全球旧事资料 分类
只有一个键被按下时,每一个键只有唯一的反转码,事先为12个键的反转码建一个表,通过查表就可知道是哪个键被按下了。
四、接线方法
键盘连接成4×4的矩阵形式,占用单片机P1口的8根线,行信号是P1013列信号是P1417单片机与矩阵键盘连接如下图:
此图用P1口P10P13接4行P14P17接4列矩阵键盘工作原理:由于按键没有接地,4行4列正好占用8个IO

f
如果4行我们送P30到P33送入0111然后去读取4列的值,如果P30的按键按下那么P34P37的值等于0111,假如是第2个键按下的话那么读回来的值是1011,如果第3个键按下去读回来的值是1101,如果第4个键按下去读回来的值是1110,如果没有键按下去读回来就是1111。所以我们就根据读回来的值来判断按下去的是那个键。当然这是对P30这一行,因为矩阵键盘是扫描的,所以下次把P30给1P31给0对第2行,陆续的第3行第4行,0111101111011110而每次都去从新扫描一遍列值列有4个值,以确定是那个键按下。无论何时任何一个时间有一个按键被按下就跳出循环。当然不可能有2个键刚好一起按下你的手没有这么好的力度,就算有2个键一起按键,程序也有先后检测的顺序,只能检测一个后面的检测不到。P30XFE第一行给0temp定义个变量tempP3读回来由于读需要先写1因为P3FE已经把高4位给1了所以能读了tempoxf0如果没有按键按下结果还是0xf0如果有键按下结果就不是0xf0了。
um然后我们再定义一个变量让它赋值给这个按下去的按键值。一次类推把第一行赋值0扫描一遍然后把第2行赋值0扫描一遍共扫描16遍。只要有键按下就会得到一个值
um就从1排到16共16个按键

f
44的矩阵键盘。我再总结下思路:首先低4位是行共4行分别把每行给0低电平就4次0111、1011、1101、1110对吧然后去检测高4位4列啊先不考虑极端情况,4列就4个按键只要按下一个P3口的高4位就会有一个值。根据这个值就能判断是那个键了。如:P311111110低四位是行先把第一行给0有按键下的话tempP3读回来11011110然后temp0xf0与运算下就判断下还等于oxf0吗?如还等于就没有按下,如果不等于就肯定有按键按下。定义个变量让它等于这个不是0XF0的值,做个标记。依次类推。
五、流程图

f
六、实验电路

f
七、实验程序
i
cludereg52hi
cludei
tri
shdefi
eucharu
sig
edchardefi
eui
tu
sig
edi
t

f
ucharkeyucharflagucharcodekeycodez0xee0xde0xbe0x7e0xed0xdd0xbd0x7d
0xeb0xdb0xbb0x7b0r
好听全球资料 返回顶部