标题: 单片机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

  1. void main()
  2. {
  3.         while(1)
  4.         {
  5.                 if(Flag10ms)
  6.                 {
  7.                         static unit8_t Delay_XD = 0;
  8.                         static unit8_t Delay_Beep = 0;
  9.                         Flag10ms = 0;
  10.                         if(!Key)//有键按下,低电平
  11.                         {
  12.                                 if(Delay_XD<0xFF)Delay_XD++;
  13.                                 if(Delay_XD==2)
  14.                                 {
  15.                                         Delay_Beep = 100;                                       
  16.                                 }
  17.                         }else{                                
  18.                                 Delay_XD = 0;
  19.                         }
  20.                         if(Delay_Beep)
  21.                         {
  22.                                 Beep = 0;//低电平启动蜂鸣器输出
  23.                                 Delay_Beep--;
  24.                         }else
  25.                         {
  26.                                 Beep = 1;//高电平停止蜂鸣器输出
  27.                         }
  28.                 }
  29.         }        
  30. }
复制代码

作者: 大漠落日    时间: 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