单片机 查询_单片机查询方式在市场上的应用场合

单片机 查询_单片机查询方式在市场上的应用场合单片机学习之十:查询方式按键一、实验现象本文引用地址:http://www.eepw.com.cn/article/201609/310402.htm最右面的数码管初始显示0,每次按下外部按键K1执行加一,计数到九时重新回零。二、实验目的掌握读取外部按键时候应该注意的事项,掌握查

单片机学习之十:查询方式按键   一、实验现象本文引用地址:http://www.eepw.com.cn/article/201609/310402.htm   最右面的数码管初始显示0,每次按下外部按键K1执行加一,计数到九时重新回零。   二、实验目的   掌握读取外部按键时候应该注意的事项,掌握查询方式响应按键的方法   掌握读取按键去抖动的方法   掌握判直接寻址位转移指令jb,jnb的用法。   三、实验任务分析   单片机响应外部按键的方式有两种,一种是查询方式,一种是中断方式。   查询方式的响应过程如下:单片机不断的查询是否有按键按下,如果有按键按下的话,就执行相应的程序,否则继续查询。   中断方式的响应过程如下:单片机处理自己的工作,如果有按键按下,向单片机发出中断请求。单片机停下现在正在处理的工作,转去执行中断程序,执行之后回来继续刚才的工作。   本试验程序我们采用查询方式完成,下一个试验我们采用中断方式完成。   还是先看看电路图吧,当JMP4跳线拔下的时候,电路图如下图6-1所示。   (注:如果JMP4跳线插上,则按键和中断建立联系。在本试验中,JMP4跳线可以插也可以不插。因为我们采用查询方式,没有开中断。具体情况下一个试验介绍。)   
单片机 查询_单片机查询方式在市场上的应用场合       从图上我们可以看到,当按键k1按下的时候,对应P1.0输入低电平。因此,我们要查询k1是否按下,只要检测到p1.0是低电平就可以拉。   注意,在查询按键是否按下时候,特别需要注意按键的去抖动问题,为什么呢?   由于按键或者键盘都是利用机械触点的合、断作用。由于机械触点的弹性作用,在闭合和断开的瞬间都会出现抖动问题。由于这种抖动,使得电压信号在机械触点的闭合、断开瞬间会出现一系列的脉冲信号,如下图所示。抖动的时间长短,与开关的机械特性有关,一般为5~10ms。   按键的稳定闭合期,由操作人员的按键动作确定,一般为十分之几秒至几秒。为了保证按下一次按键,单片机只对按键作一次处理,就必须经过去抖动处理。   
单片机 查询_单片机查询方式在市场上的应用场合       通常去抖动的方法有硬件和软件两种。   硬件去抖是利用基本RS触发器或者单稳态电路构成,大家可以参考相关数电教材。   软件处理的方法是:在检测到按键按下时,执行一个10ms左右的延时程序后,再次检测该按键是否按下。如果仍然是按下状态,就确认为键真正按下,从而消除了抖动的影响。   按照这个思路编写的程序如下:   四、实验程序   org 0000h   start: clr p1.5   mov p0,#48h   mov p2,#01h ;初始状态最右面的数码管显示0   main: mov r7,#0ffh   wait1: jb p1.0,wait1 ;如果P1.0为1,转回wait1继续查询。否则调用延时程序   lcall del10ms ;调用10ms延时   jb p1.0,wait1 ;再次查询P1.0,如果是1,表示是抖动,转回wait1   ljmp play1 ;确定按键按下,转去数码显示程序   play1: inc r7   mov a,r7   mov dptr,#tab   movc a,@a+dptr ;利用查表指令找欲显示的数字,   mov p0,a ;把 这个数字送到P0显示   cjne a,#48h,wait1 ;如果没有显示到最后一个数字,就继续查询按键状态   ljmp main ;如果显示到最后一个数字就重新开始   tab: db 0ebh,52h,62h,0e1h,64h,44h,0eah,40h,60h,48h ;存放欲显示数字的表格   del10ms:mov r6,#14h ;10ms延时子程序   del1: mov r5,#0ffh   del2: djnz r4,del2   djnz r3,del1   ret   end   把这个程序下载到学习板上,按下k1,发现了什么?   我们发现这个程序运行不是很稳定,如果我们按下的时间稍微长一点,显示的数字就会变换几次。   这是为什么呢?   由于数字显示之后,单片机会返回重新查询P1.0的状态,如果按下的时间很长,就会导致单片机又检测到低电平,所以就继续显示。因此就会出现错误。   如果我们希望按下一次按键,无论时间长短,单片机只作一次按键处理,应该怎么办呢?   我们可以这样作:在数字显示之后,返回重新查询之前,我们加入一条指令,让单片机检测P1.0是否回到高电平。如果是,就表示按键按下了一次,程序可以返回继续查询,否则等待,一直到P1.0回到高电平。这样就保证了按键按下一次,无论时间长短,单片机只作一次按键处理。   具体的做法是在原来的程序中增加如下的红色语句,改进后的程序如下:   org 0000h   start:clr p1.5   mov p0,#48h   mov p2,#01h ;初始状态右面数码管显示0   main: mov r7,#0ffh   wait1:jb p1.0,wait1 ;按键没有按下,等待   call del10ms ;调用延时   jb p1.0,wait1 ;继续查询   ljmp play1   play1: inc r7   mov a,r7   mov dptr,#tab   movc a,@a+dptr   mov p0,a ;查表显示数字   wait2: jnb p1.0,wait2 ;等待按键弹起   cjne a,#48h,wait1 ;判断是否显示到最后一个数字   ljmp main   ret   tab: db 0ebh,52h,62h,0e1h,64h,44h,0eah,40h,60h,48h   del10ms:mov r6,#14h   del1: mov r5,#0ffh   del2: djnz r4,del2   djnz r3,del1   ret   end   
单片机 查询_单片机查询方式在市场上的应用场合

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/67833.html

(0)
上一篇 2024年 8月 8日
下一篇 2024年 8月 8日

相关推荐

关注微信