- #define beep_nor() -----
- #define beep_on() -----
- #define beep_off() -----
- typedef struct _BEEP
- {
- UINT8 MuteState; //静音状态 : 开、关
- UINT8 BeepState; //蜂鸣器状态: 开、关
- UINT8 BeepCount; //蜂鸣器响的次数
- UINT8 BeepOnTime; //蜂鸣器响的时间
- UINT8 BeepOffTime; //蜂鸣器不响的时间
- UINT8 BeepWaitTime; //蜂鸣器响和不响的定时时间
- UINT8 BeepRefresh; //是否需要刷新蜂鸣器显示图标
- }BEEP_STRUCT;
- //-----------------------------
- //n-响的次数,btime-响的时间,gtime-不响的时间
- //-----------------------------
- void beep(BEEP_STRUCT *beep, UINT8 n,UINT8 btime,UINT8 gtime)
- {
- if((beep->MuteState ==0)&&(n>0)) //非静音
- {
- beep->BeepState = 1; //响
- beep->BeepCount = n;
- beep->BeepOnTime = btime;
- beep->BeepOffTime = gtime;
- beep->BeepWaitTime = 3*beep->BeepOnTime;
- }
- }
- //-----------------------------
- //在100ms的定时器处理中调用
- //-----------------------------
- void beep_deal(BEEP_STRUCT *beep)
- {
- if(beep->BeepState != 0){ //响
- if(beep->BeepCount >0){
- if(beep->BeepWaitTime>0){
- beep->BeepWaitTime--;
- }
- else{
- beep->BeepWaitTime = 3*beep->BeepOffTime;
- beep->BeepState = 0; //不响
- beep->BeepCount--; //响的次数减1
- }
- }
- else{
- beep->BeepState = 0;
- }
- }
- else{
- if(beep->BeepCount>0){
- if(beep->BeepWaitTime>0){
- beep->BeepWaitTime--;
- }
- else{
- beep->BeepWaitTime = 3*beep->BeepOnTime;
- beep->BeepState = 1;
- }
- }
- }
- if(beep->BeepState !=0){
- beep_on();
- }
- else{
- beep_off();
- }
- }
一直以来,每次涉及到蜂鸣器等通用操作时,还是要重新写代码,缺少对代码可重用性的重视,从现在开始对这方面加以重视。
只需在一个较短定时处理中调用beep_deal()函数,在需要蜂鸣器提示的地方调用beep()即可。
---希望高手们多指点,偶写代码效率一般般,正在想法提高。