ORG 0000H AJMP START ;跳转到初始化程序
ORG 0033H START:MOV SP,#60H ;SP初始化 MOV P3,#0FFH ;端口初始化 MAIN: JB P3.2,MAIN ;检测按键K1有没有按下 ACALL YS20ms ;消前沿抖动延时,实现软件去抖动 JB P3.2,MAIN ;再次检测按键,如果为高电平,则是抖动 CPL P1.0 ;执行按键命令,改变P1.0指示灯状态 JNB P3.2,$ ;等待按键K1释放 AJMP MAIN ;返回重新检测按键
YS20ms: MOV R7,#40 ;延时20ms子程序 YS1: MOV R6,#229 DJNZ R6,$ DJNZ R7,YS1 RET
END | | 由于本实验程序中对按键的前沿抖动进行20ms的软件消抖动延时处理,我们把程序烧写到单片机上运行,多次按压K1控制LED的亮灭,发控制就很稳定了,不会出现控制错误的现象。
通过本实验,可以看出软件去抖动延时还是很重要的,消抖动延时时间一般在5~20ms之间,实际应用时候根据实验取得最佳延时。
本程序没有对按键松开时的后沿抖动进行消抖动,如果在要求很严格的系统中,建议增加后沿消抖动延时处理,这样可以确保按钮不会产生误动作。 |