
你好,这里仅将现象的原因解释清楚,你在根据自己程序的实际情况作相应调整。
我们知道动态显示的扫描频率理论上不能低于25Hz,实际应用上往往要到30hz以上才会有较好的显示效果。不按按键时显示是正常的,按下按键后显示就抖动,是因为你没按下按键时扫描频率能够满足显示要求,按下之后,由于程序增多以及大量延时等原因使得扫描频率无法满足要求,以至于出现了“抖动”现象。
解决问题的关键就是如何降低按键程序所运行的时间,以保证扫描程序能够按时扫描。
建议将扫描显示部分的程序放置在定时器的中断处理部分,这样可保证扫描频率,另外将按键处理部分的程序中的延时改为定时中断。
方法如下。
软件去抖可利用延时程序进行去抖。由于抖动时间很短,当有按键按下并检测到按下时,对程序进行一小段延时,跳过前沿抖动,再进行一次按键按下检测,若检测到按下则说明确实有按键按下,这也避免了前沿抖动。对于后沿抖动,在检测到确实有按键按下时延时一小段延时,再去检测按键是否被抬起,检测到抬起则一次按键的检测完毕。
轻触开关是一种常用的按钮开关,其工作原理是通过手指轻触按钮使其内部接点闭合或断开。在单片机中,我们可以利用轻触开关来实现一些特定的功能,比如短按开机、长按关机等。
对于短按开机,我们可以通过在单片机的程序中设置一个计时器,在轻触开关被按下后,计时器开始计时,在一定时间内如果没有再次按下轻触开关,就认为是短按开机,执行相应的 *** 作。
对于长按关机,我们同样可以设置一个计时器,在轻触开关被按下后,计时器开始计时,如果在一定时间内轻触开关一直处于按下状态,就认为是长按关机,执行相应的 *** 作。
需要注意的是,在实现短按开机和长按关机时,要考虑到开关的抖动问题。抖动是指当按钮按下或松开时,接点会短暂的发生多次闭合和断开,这会对计时器的计时造成干扰,导致误判。因此,在程序中需要添加去抖动的处理,一般使用延时消抖或硬件消抖的方法来解决。
综上所述,通过轻触开关实现单片机短按开机长按关机的原理,是通过设置计时器和去抖动处理来实现的。
实际应用在产品上时,建议还是都加上程序去抖。
去抖主要目的是防止机械抖动,所以,机械限位开关要加去抖程序。
光电开关,有个边沿上升、下降时间的问题,所以最好有个整形电路处理一下,比如史密特触发器,单稳态触发器。至于要不要加程序去抖,还是那句话,建议加上。
使用这个到板子里面:
#include <reg52h>
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
sbit KEY1 = P2^4;
sbit KEY2 = P2^5;
sbit KEY3 = P2^6;
sbit KEY4 = P2^7;
unsigned char code LedChar[] = { //数码管显示字符转换表0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};
void delay();
void main(){
bit keybuf = 1; //按键值暂存,临时保存按键的扫描值
bit backup = 1; //按键值备份,保存前一次的扫描值
unsigned char cnt = 0; //按键计数,记录按键按下的次数
ENLED = 0; //选择数码管 DS1 进行显示
ADDR3 = 1;
ADDR2 = 0;
ADDR1 = 0;
ADDR0 = 0;
P2 = 0xF7; //P23 置 0,即 KeyOut1 输出低电平
P0 = LedChar[cnt]; //显示按键次数初值
while (1){
keybuf = KEY4; //把当前扫描值暂存
if (keybuf != backup){ //当前值与前次值不相等说明此时按键有动作
delay(); //延时大约 10ms
if (keybuf == KEY4){ //判断扫描值有没有发生改变,即按键抖动
if (backup == 0){ //如果前次值为 0,则说明当前是d起动作
cnt++; //按键次数+1
//只用 1 个数码管显示,所以加到 10 就清零重新开始
if (cnt >= 10){
cnt = 0;
}
P0 = LedChar[cnt]; //计数值显示到数码管上
}
backup = keybuf; //更新备份为当前值,以备进行下次比较
}
}
}
}
/ 软件延时函数,延时约 10ms /
void delay(){
unsigned int i = 1000;
while (i--);
}
采用软件方法进行按键去抖中使用的是雷音语句,因为根据资料显示,该方法的质量很高,用户体验感不错,得到用户一致好评,其使用的语句可以查询到,因此采用软件方法进行按键去抖中使用的是雷音语句
以上就是关于按键开关抖动厉害怎么办全部的内容,包括:按键开关抖动厉害怎么办、软件去抖的工作原理、用一个轻触开关实现单片机短按开机,长按关机等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)