51单片机_矩阵按键检测.docVIP

  • 17
  • 0
  • 约1.56千字
  • 约 3页
  • 2017-03-19 发布于重庆
  • 举报
51单片机_矩阵按键检测

《51系列单片机_矩阵按键检测》 此程序使用 单片机89SC52 // 1、 此程序实现矩阵按键的检测功能,按下按键时,数码管显示按键的相应键值 #include void delay_ms int n //延时函数,延时n毫秒 int i, j; for i 0; i n; i++ for j 0; j 110; j++ ; void display int num //控制数码管按位输出显示数值num char BitSet[8] 0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe ; //用于设置(低电平位选)数码管的位选信号,从低到高对应8个数码管 char NumberCode[16] 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, ; //用于设置(共阴极)数码管的段选信号,从0~f共16个数值 int n num, i 0; while n 0 P0 0xff; //关闭数码管当前位的显示,共阳极关闭显示段选信号 P2 BitSet[i]; //选中数码管对应的位 P0 ~NumberCode[n%10]; //向数码管的对应位中送入该位数值对应的段选信号 delay_ms 2 ; //每一位延时显示2ms P2 0xff; //关闭所有位选 i++; //位标记 n n/10; //取数值n的商 if n 0 break; //当取得的商为0时退出while循环 int MatrixKeyscan //4*4矩阵键盘键值扫描函数,返回按下的第一个按键对应的键值 char key[16] //行扫描对应的键值数组 0xee, 0xde, 0xbe, 0x7e, 0xed, 0xdd, 0xbd, 0x7d, 0xeb, 0xdb, 0xbb, 0x7b, 0xe7, 0xd7, 0xb7, 0x77 ; char line[4] 0xfe, 0xfd, 0xfb, 0xf7 ; //行扫描值,将各行信号分别置0,列值全1 char tmp; int i, j, k -1; for i 0; i 4; i++ P1 line[i]; //将行扫描值逐个送至P1端口 tmp P1; //再读取P1口的值 if tmp ! line[i] //若读取的数值不等于送入的行扫描值,表示有按键被按下 delay_ms 10 ; //延时,重新读取判断,确认有键按下 tmp P1; if tmp ! line[i] for j 0; j 4; j++ //当有键按下时,根据变化后的P1端口值确定对应的行列值 i和j,并给k赋予键值 if tmp key[4*i+j] k 4*i+j; return k; while tmp ! line[i] tmp P1; //(等待按键释放)循环直到读取的P1端口值与行扫描值相同,此时按键释放 return k; //返回扫描到的键值 void main int num 0, tmp; while 1 tmp MatrixKeyscan ; //扫描键盘判断是否有按键按下 if tmp ! -1 num tmp; //当有按键按下时,将键值赋给num(无键按下时扫描键盘返回值-1) display num ; //数码管显示按下按键对应的数值

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档