Chinaunix首页 | 论坛 | 博客
  • 博客访问: 126530
  • 博文数量: 14
  • 博客积分: 1430
  • 博客等级: 上尉
  • 技术积分: 155
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-15 16:40
文章分类
文章存档

2015年(1)

2011年(1)

2009年(1)

2008年(11)

我的朋友

分类: C/C++

2008-11-19 15:57:54

  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()即可。

 

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

阅读(1723) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~