新型的按键扫描程序 不过我在网上游逛了很久,也看过不少源程序了,没有发现这种按键处理办法的踪迹,所以,我将他共享出来,和广大同僚们共勉
我非常坚信这种按键处理办法的便捷和高效,你可以移植到任何一种嵌入式处理器上面,因为 C语言强大的可移植性
同时,这里面用到了一些分层的思想,在单片机当中也是相当有用的,也是本文的另外一个重点
对于老鸟,我建议直接看那两个表达式,然后自己想想就会懂的了,也不需要听我后面的自吹自擂了,我可没有班门弄斧的意思,hoho~~但是对于新手,我建议将全文看完
因为这是实际项目中总结出来的经验,学校里面学不到的东西
以下假设你懂 C语言,因为纯粹的 C语言描述,所以和处理器平台无关,你可以在 MCS-51,AVR,PIC,甚至是 ARM平台上面测试这个程序性能
当然,我自己也是在多个项目用过,效果非常好的
好了,工程人员的习惯,废话就应该少说,开始吧
以下我以 AVR的 MEGA8作为平台讲解,没有其它原因,因为我手头上只有 AVR的板子而已没有 51的
用 51也可以,只是芯片初始化部分不同,还有寄存器名字不同而已
核心算法: unsigned char Trg; unsigned char Cont; void KeyRead( void ) { unsigned char ReadData = PINB^0xff; // 1 Trg = ReadData & (ReadData ^ Cont); // 2 Cont = ReadData; // 3 } 完了
有没有一种不可思议的感觉
当然, 没有想懂之前会那样,想懂之后就会惊叹于这算法的精妙
下面是程序解释: Trg(triger) 代表的是触发,Cont(continue)代表的是连续按下
1:读PORTB的端口数据,取反,然后送到 ReadData 临时变量里面保存起来