历史上的今天
今天是:2025年07月30日(星期三)
2021年07月30日 | 学习笔记 从零开始学单片机(6) 键盘接口
2021-07-30 来源:eefocus
键盘工作原理还是使用都是比较简单的。下面是4×4的阵列键盘,行分别接P3.0-P3.3,列接P3.4-P3.7,没有接电源。
采用查询法判断那一个按键被按下。例如,令P3=0xFE,然后在将P3跟0xFE比较,如果相等,说明S6-S9没有被按下,否则在判断P3高四位哪一位等于0。例如P3.4=0 则说明S6被按下。
注意: 手工按下键盘到释放这个过程大概50ms左右,在按下开始到弹簧片稳定接触这段时间为5-10ms,从释放到弹簧片完全分开也是5-10ms,在到达稳定接触和完全分开的微观过程中,电平是时高时低的,因为单片机的速度相对比较快,所以人感觉到只按下一次,单片机却检测到按下多次。如果在单片机首次检测到键盘按下时延时10ms左右再去检测,就不会检测到抖动的毛刺电平了。这就是消抖的原理

明白原理了,写程序自然也简单了。接下来只要在每一个程序执行周期里面查询它就行了,暂且省略防抖代码。
#include #include void delay(unsigned int times); unsigned int scankeys(); void main() { while(1) { scankeys(); delay(100); } } void delay(unsigned int times) { unsigned int i,j; for (i=0; i _nop_(); } unsigned int scankeys() { unsigned char temp; P3=0xFE; temp=P3; if(temp!=0xFE) { if(temp==0x7E) P1 = 3 ; else if(temp==0xBE) P1 = 2 ; else if(temp==0xDE) P1 = 1 ; else if(temp==0xEE) P1 = 0 ; } else { P3=0xFD; temp=P3; if(temp!=0xFD) { if(temp==0x7D) P1 = 7 ; else if(temp==0xBD) P1 = 6 ; else if(temp==0xDD) P1 = 5 ; else if(temp==0xED) P1 = 4 ; } else { P3=0xFB; temp=P3; if(temp!=0xFB) { if(temp==0x7B) P1 = 11 ; else if(temp==0xBB) P1 = 10 ; else if(temp==0xDB) P1 = 9 ; else if(temp==0xEB) P1 = 8 ; } else { P3=0xF7; temp=P3; if(temp!=0xF7) { if(temp==0x77) P1 = 15 ; else if(temp==0xB7) P1 = 14 ; else if(temp==0xD7) P1 = 13 ; else if(temp==0xE7) P1 = 12 ; } } } } return 0; }
史海拾趣
|
整流二极管反向恢复时间与关断尖峰的关系。 在一般的桥式整流电路中,整流后的电压波形是方波,工作中会有一个尖峰。现在问题是: 1、这个尖峰是如何产生的。 2、这个尖峰的大小跟二极管的反向恢复时间的关系是怎么样的? 3、如果 ...… 查看全部问答> |
|
最近在做Wince5.0 SD卡的驱动,捣鼓了半个月,驱动做好了,文件的写入和读出都没问题,本来打算压力测试完毕后就结束这个工程,不料在进行压力测试的时候出现了错误,我的测试分为两种,分别为进行大文件写入读取和批量文件写入和读取,在做批量文件 ...… 查看全部问答> |
|
想在wince的nk。nb0里添加自己做的应用程序,能给点提示吗 想在wince的nk。nb0里添加自己做的应用程序,能给点提示吗, 1.是不是添加自己的exe文件就可以了呢,给点提示好吗? 2.比如要查msdn的关键字是什么呢?… 查看全部问答> |
|
wince驱动调试出现cxx0017错误,变量找不到怎么回事? 在进行wince串口驱动跟踪时在watch窗口出现cxx0017错误,有些变量找不到,提示symbol“pSerialHead”not find,还有其他几个变量也找不到,这是怎么回事?我看有些变量是可以找到的。断点设在下面的函数里。望各位高人指教。 HANDLE COM_Init( & ...… 查看全部问答> |
|
问题很简单,我在irq_mj_read 中自己构造IRP 查询文件全路径,结果出错 0xc00000d 参数错误 请联系我:13791007364 张波, 急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急… 查看全部问答> |




