鸿哥通过修改曹健的程序,告诉你如何把不能即刻完成的按键任务传递到外面来处理。
本帖最后由 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]