新闻中心

EEPW首页>嵌入式系统>设计应用> 单片机按键程序设计及电路设计

单片机按键程序设计及电路设计

作者: 时间:2013-01-15 来源:网络 收藏

二、按键实验例程
下面我们通过几个实验例程来学习按键扫描编程及按键软件消抖动的编程,通过这些对比实验,给大家一个更加感性的认识。

1、按键K1控制LED指示灯实验:本程序通过实验板上的按键K1控制P1.0上的LED亮灭。程序功能如下:当K1按下开关时指示灯亮,再次按下时指示灯灭。

轻触按键K1控制指示灯的实验例程(没有软件消抖动处理) 实验结果分析:

ORG 0000H
AJMP START ;跳转到初始化程序

ORG 0033H
START:MOV SP,#60H ;SP初始化
MOV P3,#0FFH ;端口初始化

MAIN: JB P3.2,MAIN ;检测按键K1有没有按下
CPL P1.0 ;执行按键命令,改变P1.0指示灯状态
JNB P3.2,$ ;等待按键K1释放
AJMP MAIN ;返回重新检测按键

END

由于本实验程序中没有进行软件消抖动延时处理,我们把程序烧写到上运行时,多次按压K1控制LED的亮灭,发控制不太稳定,大约按十次,LED发光二极管的输出状态有2到3次是错误的。

这就是因为没有软件去抖动的原因,在按键的前沿抖动或后沿抖动期间,抖动脉冲均有可能被程序检测而错误执行,此时相当于按键被按压和松开了N次,LED的输出状态也已经改变了N次,故松开按键后LED的状态是一个随机结果。

2、改进的按键K1控制LED指示灯实验:本程序通过实验板上的按键K1控制P1.0上的LED亮灭。程序功能如下:当K1按下开关时指示灯亮,再次按下时指示灯灭。

改进的轻触按键K1控制指示灯的实验例程(经过软件消抖动处理) 实验结果分析:

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之间,实际应用时候根据实验取得最佳延时。

本程序没有对按键松开时的后沿抖动进行消抖动,如果在要求很严格的系统中,建议增加后沿消抖动延时处理,这样可以确保按钮不会产生误动作。

3、带按键音效的按键扫描实验例程:下面的按键扫描实验例程除了有软件消抖动功能外,还具有按键音效,当按压按键K1~K4时候,按键号码会显示在实验板的数码管上,同时可以听到按键音。

51单片机相关文章:51单片机教程



上一页 1 2 下一页

评论


相关推荐

技术专区

关闭