从单片机基础到程序框架(全集 2019pdf版).pdf - 第531页

vGu8Shield VoiceFlag =0; //及时把屏蔽 标志清零,避 免平时正常的 单击声 音也被淹没。 vGu8KeySec =0; //响应按键服 务处理程序后 ,按键 编号必须清零 ,避免一致触 发 break; case 9 : //S9 按 键的任务 if(Gu8LedS tatus<7) { Gu8LedSt atus++; //控制 LE D“往右 边跑” Gu8Displ ayUpdate=1; // 刷…

100%1 / 836
}
}
else //如果期间检查 S9 按键已经松
{
Su8KeyStep=1; //返回步骤 1 继续扫描
Su8KeyLock=0;
Su16KeyCnt=0;
Su8ColumnRecord++;
if(Su8ColumnRecord>=3)
{
Su8ColumnRecord=0;
}
}
break;
}
}
void KeyTask(void)
{
if(0==vGu8KeySec)
{
return;
}
switch(vGu8KeySec)
{
case 1: //S1 键的任务
if(Gu8LedStatus>0)
{
Gu8LedStatus--; //控制 LED“往左边跑”
Gu8DisplayUpdate=1; //刷新显示
}
if(0==vGu8ShieldVoiceFlag) //声音没有被屏蔽
{
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=KEY_VOICE_TIME; //发出“嘀”一声
vGu8BeepTimerFlag=1;
}
vGu8ShieldVoiceFlag=0; //及时把屏蔽标志清零,避免平时正常的单击声音也被淹没。
vGu8KeySec=0; //响应按键服务处理程序后,按键编号必须清零,避免一致触
break;
case 9: //S9 键的任务
if(Gu8LedStatus<7)
{
Gu8LedStatus++; //控制 LED“往右边跑”
Gu8DisplayUpdate=1; //刷新显示
}
if(0==vGu8ShieldVoiceFlag) //声音没有被屏蔽
{
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=KEY_VOICE_TIME; //发出“嘀”一声
vGu8BeepTimerFlag=1;
}
vGu8ShieldVoiceFlag=0; //及时把屏蔽标志清零,避免平时正常的单击声音也被淹没。
vGu8KeySec=0; //响应按键服务处理程序后,按键编号必须清零,避免一致触
break;
default:
vGu8KeySec=0;
break;
}
}
void T0_time() interrupt 1
{
VoiceScan();
KeyScan();
TH0=0xfc;
TL0=0x66;
}
void SystemInitial(void)
{
TMOD=0x01;
TH0=0xfc;
TL0=0x66;
EA=1;
ET0=1;
TR0=1;
}
void Delay(unsigned long u32DelayTime)
{
for(;u32DelayTime>0;u32DelayTime--);
}
void PeripheralInitial(void)
{
}
void BeepOpen(void)
{
P3_4=0;
}
void BeepClose(void)
{
P3_4=1;
}
void VoiceScan(void)
{
static unsigned char Su8Lock=0;
if(1==vGu8BeepTimerFlag&&vGu16BeepTimerCnt>0)
{
if(0==Su8Lock)
{
Su8Lock=1;
BeepOpen();
}
else
{
vGu16BeepTimerCnt--;
if(0==vGu16BeepTimerCnt)