找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2249|回复: 7
收起左侧

单片机10mS主循环,按键和蜂鸣器如何处理?

[复制链接]
ID:1040201 发表于 2022-7-30 15:04 | 显示全部楼层 |阅读模式
请问大佬,如果主循环以10mS的基础时钟运行,那么在这种情况下,1:按键使用中断触发是如何消抖的? 2:蜂鸣器是如何连续发声1秒的?是否有好的示例可以参考?
回复

使用道具 举报

ID:332444 发表于 2022-8-1 08:22 | 显示全部楼层
按键使用中断触发是硬件消抖,有源蜂鸣器是计时1秒执行
回复

使用道具 举报

ID:123289 发表于 2022-8-1 09:42 | 显示全部楼层
1:按键使用中断触发是如何消抖的?
方案很多,与【主循环以10mS的基础时钟运行】没有矛盾。
举例:每N毫秒(例5ms,你用10ms也行)检测一次按键,M次(6次,你用3次也行)检测得到的开关状态一致,就判断开关稳定了。
2:蜂鸣器是如何连续发声1秒的?
它的开关变化,只是瞬间的事,只与你需要对它作业的瞬间操作即可,更何况音响多个少个10ms,人是听不出来的。
回复

使用道具 举报

ID:451718 发表于 2022-8-1 10:07 | 显示全部楼层
节拍计数,符合条件停止。
KeySign ++;   
if(KeySign>=2)
{
   KeySign = 0;
  //执行案件操作
}


Buz = 1;
BuzSign ++;
if(BuzSign>=100)
{
   BuzSign = 0;
   Buz = 0;
}
回复

使用道具 举报

ID:161164 发表于 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. }
复制代码
回复

使用道具 举报

ID:195496 发表于 2022-8-4 08:51 | 显示全部楼层
定时器中断定时,产生一个时间标志,在主程序中判断调用
回复

使用道具 举报

ID:1042823 发表于 2022-8-24 16:32 | 显示全部楼层
按键消抖可以用CPU去执行别的代码在回头执行按键,例如1ms蜂鸣器
回复

使用道具 举报

ID:1042965 发表于 2022-8-26 00:09 | 显示全部楼层
可以多次检测,例如20ms内检测若干次,若结果稳定了才处理。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表