写一段适用于单片机和上位机的蜂鸣器处理程序~

  1. #define  beep_nor()        -----   
  2. #define  beep_on()         -----   
  3. #define  beep_off()        -----   
  4. typedef struct _BEEP
  5. {
  6.    UINT8  MuteState;  //静音状态 : 开、关
  7.    UINT8  BeepState;  //蜂鸣器状态: 开、关
  8.    UINT8  BeepCount;  //蜂鸣器响的次数
  9.    UINT8  BeepOnTime;  //蜂鸣器响的时间
  10.    UINT8  BeepOffTime; //蜂鸣器不响的时间
  11.    UINT8  BeepWaitTime; //蜂鸣器响和不响的定时时间
  12.    UINT8  BeepRefresh;  //是否需要刷新蜂鸣器显示图标
  13. }BEEP_STRUCT;
  14. //-----------------------------
  15. //n-响的次数,btime-响的时间,gtime-不响的时间
  16. //-----------------------------
  17. void beep(BEEP_STRUCT *beep, UINT8 n,UINT8 btime,UINT8 gtime)
  18. {
  19.    if((beep->MuteState ==0)&&(n>0))  //非静音
  20.    {
  21.       beep->BeepState = 1; //响
  22.       beep->BeepCount = n;
  23.       beep->BeepOnTime  = btime;
  24.       beep->BeepOffTime = gtime;
  25.       beep->BeepWaitTime = 3*beep->BeepOnTime;
  26.    }
  27. }
  28. //-----------------------------
  29. //在100ms的定时器处理中调用
  30. //-----------------------------
  31. void beep_deal(BEEP_STRUCT *beep)
  32. {
  33.    if(beep->BeepState != 0){  //响
  34.       if(beep->BeepCount >0){
  35.          if(beep->BeepWaitTime>0){
  36.             beep->BeepWaitTime--;
  37.          }
  38.          else{
  39.             beep->BeepWaitTime = 3*beep->BeepOffTime;
  40.             beep->BeepState = 0;  //不响
  41.             beep->BeepCount--;  //响的次数减1
  42.          }
  43.       }
  44.       else{
  45.          beep->BeepState = 0;
  46.       }
  47.    }
  48.    else{
  49.       if(beep->BeepCount>0){
  50.          if(beep->BeepWaitTime>0){
  51.              beep->BeepWaitTime--;
  52.          }
  53.          else{
  54.              beep->BeepWaitTime = 3*beep->BeepOnTime;
  55.              beep->BeepState = 1;
  56.          }
  57.       }
  58.    }
  59.    
  60.    if(beep->BeepState !=0){
  61.      beep_on();
  62.    }
  63.    else{
  64.      beep_off();
  65.    }
  66. }

          一直以来,每次涉及到蜂鸣器等通用操作时,还是要重新写代码,缺少对代码可重用性的重视,从现在开始对这方面加以重视。 

          只需在一个较短定时处理中调用beep_deal()函数,在需要蜂鸣器提示的地方调用beep()即可。

 

---希望高手们多指点,偶写代码效率一般般,正在想法提高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值