标题:
单片机10mS主循环,按键和蜂鸣器如何处理?
[打印本页]
作者:
liucan2020
时间:
2022-7-30 15:04
标题:
单片机10mS主循环,按键和蜂鸣器如何处理?
请问大佬,如果主循环以10mS的基础时钟运行,那么在这种情况下,1:按键使用中断触发是如何消抖的? 2:蜂鸣器是如何连续发声1秒的?是否有好的示例可以参考?
作者:
xianfajushi
时间:
2022-8-1 08:22
按键使用中断触发是硬件消抖,有源蜂鸣器是计时1秒执行
作者:
yzwzfyz
时间:
2022-8-1 09:42
1:按键使用中断触发是如何消抖的?
方案很多,与【主循环以10mS的基础时钟运行】没有矛盾。
举例:每N毫秒(例5ms,你用10ms也行)检测一次按键,M次(6次,你用3次也行)检测得到的开关状态一致,就判断开关稳定了。
2:蜂鸣器是如何连续发声1秒的?
它的开关变化,只是瞬间的事,只与你需要对它作业的瞬间操作即可,更何况音响多个少个10ms,人是听不出来的。
作者:
robinsonlin
时间:
2022-8-1 10:07
节拍计数,符合条件停止。
KeySign ++;
if(KeySign>=2)
{
KeySign = 0;
//执行案件操作
}
Buz = 1;
BuzSign ++;
if(BuzSign>=100)
{
BuzSign = 0;
Buz = 0;
}
作者:
lkc8210
时间:
2022-8-1 10:11
先假设你用C51
void main()
{
while(1)
{
if(Flag10ms)
{
static unit8_t Delay_XD = 0;
static unit8_t Delay_Beep = 0;
Flag10ms = 0;
if(!Key)//有键按下,低电平
{
if(Delay_XD<0xFF)Delay_XD++;
if(Delay_XD==2)
{
Delay_Beep = 100;
}
}else{
Delay_XD = 0;
}
if(Delay_Beep)
{
Beep = 0;//低电平启动蜂鸣器输出
Delay_Beep--;
}else
{
Beep = 1;//高电平停止蜂鸣器输出
}
}
}
}
复制代码
作者:
大漠落日
时间:
2022-8-4 08:51
定时器中断定时,产生一个时间标志,在主程序中判断调用
作者:
杰西Jesse
时间:
2022-8-24 16:32
按键消抖可以用CPU去执行别的代码在回头执行按键,例如1ms蜂鸣器
作者:
is03zong
时间:
2022-8-26 00:09
可以多次检测,例如20ms内检测若干次,若结果稳定了才处理。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1