www.rtmj.net > 单片机简答题 以4×4矩阵键盘为例,写出该键盘按键处理扫描流程

单片机简答题 以4×4矩阵键盘为例,写出该键盘按键处理扫描流程

zffbfhnzxc 再看看别人怎么说的.

我给你一个我自己写的吧有注释 假设按下的是s1键进行如下检测(4*4键盘) 先在p3口输出 p300001111 低四位行会有变化 cord_h=00001111&00001110=00001110 if!=00001111 延时0.1us cord_h=00001110&00001111=00001110 if!=

矩阵键盘扫描是分两次的.比方说,51单片机,默认各口是高电平,首先,比方图中P1.0-P1.3给低电平(注:你的图太小,我就把接矩阵键盘的各口当作P1.0-P1.7),若图中无键被按下,P1.4-P1.7扫描出来的就都是高电平,若有键被按下,

程序忘了,大概跟你说秒 原理吧. 主要循环检测,比如P1接键盘,先往P1送个0x0F再读取P1口电压是否变化,不变则不处理,有变化则记录得到的值,然后再送个0xF0到P1口,读取值,记录,再用读取的两个值相与,得到具体是哪个键被按下了,再就是要继续送入初值0x0F,直到读取的值不在变化,还是0x0F,这时候就已经放手了,就可以运行下面的程序了

如果放一个具体电路就好讲了. 现在只能给你说可以用两种方式来 1.逐行扫描的方式 2.行反转的方式 这些你可以字网上找找.应该有的.

如图:单片机4个IO线如P1.0至P1.3作为输出,4 个作为输入如P1.4至P1.7,上面可以接16 个按键,这些按键都有是一端跨在一根输出线上,另一端跨在一根输入线上, 要是没有按键按下时,输入 状态和输出状态没有任何关系,这时单片机读

void keyscan()//矩阵键盘扫描程序{ P0=0x0f; if(P0!=0x0f) //这里条件0,不会执行后面的程序吧 {delay (10); if(P0!=0x0f) { a=P0; P0=0xf0; b=P0; a= a|b; }; };}

这这个循环4次的程序段就是发送扫描码,再分别检测按键情况的.扫描码就是k_out,分别是0xfe;0xfd;0xfb,0xf7;这几个数是靠k_out=crol_(k_out,1);来实现的.键盘扫描,你要理解是“扫描”也就是一行一行的发送扫描码,再检测每“列”的值,这个值就是键值.

1、全扫描2、横竖交替扫描

可以私聊我~

网站地图

All rights reserved Powered by www.rtmj.net

copyright ©right 2010-2021。
www.rtmj.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com