同时按下两个按键,是应该叫“组合键”,还是应该叫“复合键”?做而论道虽然很自大,但是也不得不承认搞不清楚这个。在网上查,两种叫法都存在。
相信大家都用过组合键,比较著名的用法就是:Ctrl+C、Ctrl+V;但是在单片机应用系统上,好像还没有人使用过组合键。
在P1口外接4×4的矩阵键盘,几乎成了51单片机系统的标准配置。
16个按键,一般来说可以满足大部分的应用需求,但是在某些比较复杂的系统中,16个按键就显得不足了,就像手机,就需要20几个按键。
使用独立的按键接口芯片,扩充大量按键,其实是个非常笨的方法。
做而论道对此进行了仔细深入的研究,发现在4×4的矩阵键盘上,也可以使用组合键的方法。
就是说,还是原来的4×4的矩阵键盘电路,利用其中一个按键充当Ctrl键,按下后不要松手,再按下其它15个键,也就可以像按下“Ctrl+C、Ctrl+V”那样,完成程序特定的操作。
其它的15个按键分别处于组合状态或非组合状态,共可以形成30个按键的使用范围,这就超过手机的按键数目了,足以满足任何需求。
在单片机系统中使用组合键,特别在是经典的4×4矩阵键盘中使用组合键,以前还从没有见过报道,做而论道在此提出的方法可以说是独创。
对于4×4矩阵键盘,读出按键的方法主要有行列扫描法,反转法、查表法等等,这些方法所用的程序,做而论道以前也发表过。
一般来说,上述的方法在得出一个按键的信息之后,就返回主程序了,所以它们不能检查出来同时按下两个键、三个键或更多键的情况。
做而论道采用了反转加查表的方法,编写了新的程序,可以查出同时按下多个键的信息。
那么在键盘中,哪怕再设置上Shift、Alt按键,做而论道也是可以把它们的组合键盘读出来的。
按键布局及读出组合键的函数如下:
如果有键按下,Keyscan函数可以返回0~30,如果没有按下,将返回255。
如果主函数收到的返回值小于31,应该延时几个毫秒后再次读出键盘;如果延时前后的两次返回值相同,即可确认按键是按下了,这就软件消抖。
这个读出组合键的函数已经经过了硬件测试,效果十分理想,完全可以和 PC 机上的组合键相媲美。
在 Proteus 中,也可以仿真,下图是个密码锁的仿真图,有8位数码显示,16个按键输入。
图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/11c04d08d8a2316c6a60fb88.html
通过按键可以输入密码。
输入数字0~9就不必说了,输入Ctrl+1~0,就是输入英文字符“ABCDEFGHIJ”。
反复按下“*”可以切换“左移位”和“右移位”的输入方式。
反复按下“Ctrl + *”可以切换“正常”显示和“--------”显示,保证密码不被别人窥视。
反复按下“#”可以切换“开门”和“关门”的状态。
反复按下“Ctrl + #”可以进行“修改密码”和“修改完成”的操作。
显示“CDEFGHIJ”符号的图片如下。
密码是0~9、A~J,共20个符号,用这些符号组成 8 位密码,总共是多少种?肯定不少,远远超过用0~9十个符号组成的密码。
呵呵,键盘电路中还有 F1F2F3、Ctrl+F1F2F3 六个按键的功能尚待开发。