×
单片机 > 单片机程序设计 > 详情

51单片机学习笔记(二)

发布时间:2020-09-01 发布时间:
|

按照教材,昨天学到了检测按键的程序,也很明确昨天学那个程序难登大雅之堂,因为它没有实现按键在闭合和开关时的电压信号抖动。


如图示,键按下试产生多个抖动的波形,也就是产生了多个101010,而我们实际中只是两个状态只是1,或只是0。所以收集了干扰信号。于是就有今天我学的“去抖动程序”

去抖原理:收到第一个低电平信号(按下的信号)后,开始延迟再次收集信号,再确认是否低电平(一直被按下)这时收集的信息就来自抖动波形图的中间部分,所以只要这个时间段是低电平,按键就肯定被按下了,不会再有抖动。这时就跳到指令检测这个按键引脚什么时候变为高电平(表示释放按键),不断循环检测,直至按键被释放。检测到释放信号后,就有cpl指令修改相应led灯的开关状态。所以这个程序通过  延时和 检测到按键被释放后才控制led灯的亮灭  而实现了去抖的功能。准确地实现按一下就真正等于单片机收集到一个信号而不是多个抖动的信号。


需要提一下的是如果没有   检测到按键被释放后才控制led灯的亮灭  的指令的话(27--33行指令),而只有延时,经实验证明,是无法实现去抖的。因为这样在波形中间时段就已经不断控制led的亮灭,而那么长的波段,led不断闪烁,当按键释放的时候,led是亮还是灭,就听天由命了。。。


无检测到按键被释放后才控制led灯的亮灭  指令程序如下:

    ORG 0000H

SJMP START

ORG 0030H


START:

MOV SP,#060H

MOV P0,#0FFH

MOV P2,#0FFH



MAIN:

JNB P0.0,QUEREN

JNB P0.7,QUEREN2

SJMP MAIN



QUEREN:

CALL DELAY

JNB P0.0,SHIFANG

SJMP MAIN


QUEREN2:

CALL DELAY

JNB P0.7,SHIFANG2

SJMP MAIN


SHIFANG:

WAIT: JB P0.0,LED0

SJMP WAIT


SHIFANG2:

WAIT2: JB P0.7,LED7

SJMP WAIT2


LED0:

CPL P2.0

SJMP MAIN


LED7:

CPL P2.7

SJMP MAIN


DELAY:

MOV R0,#25


D1: MOV R1,#100

D2: DJNZ R1,D2

DJNZ R0,D1

RET


END

这个程序虽然有缺陷,但很值得分析 。。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
MCS-51单片机的中断系统(2)