jianhong_wu 发表于 2014-10-31 13:37:31

鸿哥通过修改曹健的程序,告诉你如何把不能即刻完成的按键任务传递到外面来处理。

本帖最后由 jianhong_wu 于 2014-10-31 13:42 编辑

今天曹健的程序虽然可以把原来按一次蜂鸣器响1声的程序改成了按一下响2声的程序,但是那样改把我的按键框架打乱了,思路也乱。他的代码:
void key_service()
{
    switch(ucKeySec)
    {
      case 1:
            {
      uiVoiceCnt=20;
      ucKeySec=2;
      break;
            }
//跟鸿哥的程序主要不同的在这里。当uiBeepTimeCnt加到6000
//让蜂鸣器再响一次。这个程序能实现响两次
      case 2:
            {
            if(0==uiVoiceCnt)
                  {
                uiBeepTimeCnt++;
                if(6000<=uiBeepTimeCnt)
                        {
                  uiBeepTimeCnt=0;
                  uiVoiceCnt=20;
                        ucKeySec=0;
                        }
                }      
            break;
            }
    }
}
经过鸿哥修改后:



void key_service()
{
    switch(ucKeySec)
    {
      case 1:
            
             ucBeepFlag=1; //多增加这个标志变量,把不能即刻完成的任务传递到外面来处理
             uiVoiceCnt=20;
             //ucKeySec=2;注意,这个毕竟是按键程序,只做按键的事情,做完就即时清零。
             ucKeySec=0;
             break;
    }
}


void ucBeepFlagService() //多响一声的处理程序放在主函数的while(1)循环里
{
   if(ucBeepFlag==1)//判断是否有消息响应
   {
       uiBeepTimeCnt++;
       if(6000<=uiBeepTimeCnt)
       {
          uiBeepTimeCnt=0;
          uiVoiceCnt=20;
          ucBeepFlag=0; //及时把标志清零,等于处理完了这次消息。避免一直进来处理。
       //   ucKeySec=0;
       }

   }

}

fyt57889681-东莞:
鸿哥,这样的话不是把蜂鸣器声音独立一个子函数会更好吗?

鸿哥--深圳:
一般的蜂鸣器声音是做按键声音的,就可以直接放在按键服务里。如果要额外编写不同节奏的声音,那么就把它的消息导出到外面来处理。

页: [1]
查看完整版本: 鸿哥通过修改曹健的程序,告诉你如何把不能即刻完成的按键任务传递到外面来处理。