单片机矩阵键盘扫描程序 没看懂求解释

单片机矩阵键盘扫描程序 没看懂求解释,第1张

楼主的疑问是正确的,程序需要修改:

main:

mov p1, #0f0h ;在P10~P13输出低电平

mov r7, #0ffh ;

key:djnz r7, key ;延时

mov a, p1 ;读P1,如有按键,高四位将有0

cpl a ;求反,有按键时,高四位将有1

anl a, #0f0h ;低四位置为0,高四位不变

jz ekey ;全0就是没有按键,退出

假设按下的是S1键进行如下检测(44键盘

先在P3口输出

p3 00001111

低四位 行会有变化

cord_h =00001111&00001110 =00001110

if !=00001111

延时01us

cord_h=00001110&00001111=00001110

if !=00001111

P3再输出11111110

P3 =00001110|11110000=11111110

输出高四位

cord_l=P3&0xf0 //此时P3口就是输入值01111110 而不是上面的11111110

cord_l=01111110&11110000=01110000

cord_h+cord_l=00001110+01110000=01111110=0x7e //此编码即为S1的编码

P3口的值有变化,不知道你注意到没?我是这样理解的,即使执行了下面这句

P3=cord_h|0xf0; //输出当前列线值

那P3口接的键盘的按键没用变化吧,所以P3口的值还是0111 1110我不知道我这样理解对不。。。呵呵

新手?。。。那要看你是怎样的键盘了,是4X4矩阵键盘?还是8个按键直列某IO口的键盘?或者是其他的?扫描可以有软件循环等待扫描,就是一直等待用户按键;还有就是中断方式的键盘扫描,当有键按下后进入中断服务程序,然后再执行键盘扫描程序判断按键。就矩阵键盘的稍微复杂点,其他种类的键盘很简单,下面的是一个接在P2口的4X4矩阵键盘扫描程序,延时程序省略掉了,忘你能了解键盘扫描的过程: P2= 0xf0; if ((P2&0xf0)!=0xf0) // 若有键按下

{

delay(10); // 延时去抖动

if ((P2&0xf0)!=0xf0) // 延时后再判断一次,去除抖动影响

{

scancode = 0xfe;

while((scancode&0x10)!=0)// 逐行扫描

{

P2 = scancode; // 输出行扫描码

if ((P2&0xf0)!=0xf0) // 判断本行是否有键按下

{

tmpcode = (P2&0xf0)|0x0f;

/ 返回特征字节码,为1的位即对应于行和列 /

return((~scancode)+(~tmpcode));

}

else scancode = (scancode<<1)|0x01; // 行扫描码左移一位

以上就是关于单片机矩阵键盘扫描程序 没看懂求解释全部的内容,包括:单片机矩阵键盘扫描程序 没看懂求解释、您好,关于扫描矩阵键盘的程序里您提的一个追问,我也不明白,您能指点我一下么,谢谢、单片机中键盘扫描,主要是对CPU怎么扫描键按下没,何时扫描不懂等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9304164.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存