完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
键盘扫描方法是:行线P10~P13为输出线,列线P14~P17为输入线。一开始单片机将行线(P10~P13)全部输出低电平,此时读入列线数据,若列线全为高电平则没有键按下,当列线有出现低电平时调用延时程序以此来去除按键抖动。延时完成后再判断是否有低电平,如果此时读入列线数据还是有低电平,则说明确实有键按下。最后一步确定键值。现在我们以第二行的S5键为例,若按下S5后我们应该怎么得到这个键值呢?当判断确实有键按下之后,行线轮流输出低电平,根据读入列线的数据可以确定键值。首先,单片机将P10输出为低电平,其它P11~P13输出高电平,此时读取列线的数据全为高电平,说明没有在第一行有键按下;其次,单片机将P11输出低电平,其它P10、P12、P13仍为高电平,此时再来读取列线数据,发现列线读到的数据有低电平,数值为1011(0x0B),如果我们的键盘布局已经确定,那么0x0B就代表S5的值了。转到S5键功能处理子程序就可以达到目的。 /* 功能:矩阵键盘扫面,按键显示键值程序 作者:siriuszxn */ #include "reg51.h" #define KEYPORT = P1 unsigned char i; unsigned char Keynum; unsigned char Line; //行 unsigned char Mask; unsigned char Col; //列 unsigned char ScanCode; unsigned char code psegs_table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //共阳极数码管0-F void delay_ms(unsigned int t) //ms延时程序 { unsigned char i; unsigned int x; x=t; while(x--) { for(i=0;i<113;i++); } } /* 键盘扫描程序 */ void keyscan() { while (1) //循环扫描键盘 { P1 = 0xff; //开始 Line = 1; Mask = 0x01; for(i = 0; i < 4; i++) { P1 = ~Mask; ScanCode = P1 & 0xf0; if (ScanCode != 0xf0) { delay_ms(5); } ScanCode = P1 & 0xf0; switch(ScanCode) { case 0xe0:Col=1;break; case 0xd0:Col=2;break; case 0xb0:Col=3;break; case 0x70:Col=4;break; default :Col=0;break; } if (Col > 0) { //根据行列计算键值 Keynum = (Line - 1) * 4 + Col; //通过P0口接数码管显示 P0 = psegs_table[Keynum-1]; while(1) { ScanCode = P1 & 0xf0; if(ScanCode == 0xf0) { break; } } Mask <<= 1; Line++; } } } } void main() { while(1) { keyscan(); } } |
|
|
|
只有小组成员才能发言,加入小组>>
3314 浏览 9 评论
2995 浏览 16 评论
3494 浏览 1 评论
9059 浏览 16 评论
4088 浏览 18 评论
1180浏览 3评论
605浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
599浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2335浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1896浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 19:40 , Processed in 1.104187 second(s), Total 47, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号