给单片机编程为什么要编写一个按键扫描的程序啊?

给单片机编程为什么要编写一个按键扫描的程序啊?,第1张

其实按键可以有好几种工作方式,比如用中断,这个是不用扫描的,还有就是扫描方让碰式,其实扫描就是不时的检查按键所对应的寄存器的值有没有改变,如果改变,说明按键有动作,没变说明按键没动作早悄,为了做到及时反应按键的状态,坦睁谈就得不停地对按键进行扫描。。。

getk: clr p2.4;将P2.4口 清0(置0)

mov p0,#0ffh;给P0口传递数据FFH,1111 1111 即把P0口全部置1,用于扫描按键因为51单片机的IO只能检测低电平,所以要先将IO置为1,才能检测按键按下后对0导通

nop ;这个不用解释了吧,空 *** 作占用1个机器周期,用于简单的延时一下,以便让P0口电平

nop ;稳定

mov a,p0 ;将P0口的状态传递给A寄存器。这期间如果P0口有按键按下他的状态会变成0比

如P0.0的按键按下,那传给A的状态就是1111 1110,16进制的#0FEH

cpl a ;将A寄存器取反原来为1的现在为0 如上行所示就变成了0000 0001,16进制的#01H

anl a,#1fh;与 *** 作,用于保留A寄存器的低5位数据,防止别的信号影响到结果(同时也说 明按键接在P0口的低5位。手禅另外结果实际保存在了A寄存宴竖器中)

setbp2.4 ;在将P2.4置位,即让P2.4口输出1高电平

ret ;子程序返回

这段程序用于扫描P0的低5位的按键,哪个按下,最后变为那个位为1输出。结果保存在A寄存器中,另外A寄存器的高3位即位7,6,5这3位恒为0.因为 这句anl a,#1fh;已经把高位清零了。

至于P2.4口应该如楼上所说的用于控制244,373等锁存器用途。因为P0口的低5位应该同毕祥尘时还接又别的器件。用锁存器防止干扰


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

原文地址:https://54852.com/yw/12343230.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存