单片机按键延时,使用定时计数器消除按键延时,求操作流程
发布网友
发布时间:2022-04-23 14:54
我来回答
共4个回答
热心网友
时间:2023-10-03 06:24
嘿嘿 俺来帮你解答
1 按键处理的操作流程:
当发现有键按下时, 为了消除按键的抖动 需要软件延时5~10ms
经过延时后 再读入按键的状态 如果按键有效 则进入相应的按键处理程序
否则(按键无效)可以视为干扰。
2 一般都是采用软件延时(即调用一个延时子程序 延时5ms )
不要使用定时计数器来延时 会浪费单片机的硬件资源。
呵呵 满意 就选满意回答追问我的意思是我按一下按键液晶显示屏上的数字没反映,需要长时间按住按键才有反映,我想要得到按一下就立刻得到反映的结果该怎么处理,老师说可以用定时器,但是我不知道该怎么具体操作,求流程。
追答不是用定时器 是用外部中断 当按键按下时 可以马上申请中断 能及时处理
热心网友
时间:2023-10-03 06:24
按键程序中,使用计数方式可以做到:消抖、按下识别、弹起识别,连续有效等等。
好处:用时间短,可以和其它功能程序同时运行,可以实现多种功能。
缺点:需要花费内存空间。功能越多,需要内存越多。
方法:每10ms扫描一次按键状态,按键为按下状态时,计数值加1,反之,计数清零。当计数累加到3时,说明,已经连续按下30ms时间,可认为,按键按下。为防止计数值溢出,最好加到比3大1就停止加。这个计数值,就需要一个全局变量来做,即需要花费内存资源。
识别弹起状态,用同样的方法即可,需要增加一个全局变量。
热心网友
时间:2023-10-03 06:25
void t0_isr() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256; //10ms中断一次
KEYPORT=keyscan; //键盘扫描码送键盘口
keyval=KEYPORT; //读键值
num++; //中断次数+1
if(keyval==keytm) //如果该次键值与上次键值一致
{
if(num>2) //三次键值相同
{
num=0;
flag=1;//键值有效标志
}
}
keytm=keyval; //键值赋值给键值暂存
}
热心网友
时间:2023-10-03 06:26
不太明白意思,是指的按键长按功能吗,个人觉得这样能实现:按下按键后,启动定时器,然后while(标志位)等待就可以了。用定时器中断置位标志位即可。