200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 51单片机矩阵键盘PROTEUS仿真演示

51单片机矩阵键盘PROTEUS仿真演示

时间:2020-12-11 23:55:53

相关推荐

51单片机矩阵键盘PROTEUS仿真演示

51单片机矩阵键盘PROTEUS仿真演示(图、程序)作者:给力哈哈

程序如下:

#include

#define uchar unsigned char;

uchar key_val=0; //定义键值,初始默认为0

uchar code TAB[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,0xC6,0xa1,0x86,0x8e}; //0~F

共阳数码管显示段码

void Check_Key(void)

{

unsigned char row,col,tmp1,tmp2;

tmp1 = 0x10; //tmp1用来设置P1口的输出,取反后使

P1.4~P1.7中有一个为0

for(row=0;row<4;row++) // 行检测

{

P1 = 0x0f; // 先将p1.4~P1.7置高

P1 =~tmp1; // 使P1.4~p1.7中有一个为0

tmp1*=2; // tmp1左移一位

if ((P1 & 0x0f) < 0x0f) // 检测P1.0~P1.3中是否有一位为0,只

要有,则说明此行有键按下,进入列检测

{

tmp2 = 0x01; // tmp2用于检测出哪一列为0

for(col =0;col<4;col++) // 列检测

{

if((P1 & tmp2)==0x00) // 该列如果为低电平则可以判定为该列

{

key_val = row*4 +col; // 获取键值,识别按键

return; // 退出循环

}

tmp2*=2; // tmp2左移一位

}

}

}

}

void main()

{

P2=0xFF; //位码,这里全部置高,点亮8位数码管

while(1)

{

Check_Key();

P0=TAB[key_val]; //显示

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。