📄 timer1.c
字号:
//每隔50ms会执行一次 每次根据按键的值执行对应的键盘子程序
void KeyProgram(void)
{
keyScan();
//检测一次按键。
//P11按下一次的检测 带有消抖功能,消抖时间为50ms。
//如果曾经有P11按键按下被检测到了,则现在已经过了50ms再次检测
if(IsKeyPressed==1)
{
IsKeyPressed=0 ;
if(KeyPressing1)
KeyCode=KeyPressing1 ;
if(KeyPressing2)
KeyCode=KeyPressing2|0x30 ;
}
//有P1P2有任何按键曾经按下,则该端口不为0
if(KeyPressed1)IsKeyPressed=1 ;
if(KeyPressed2)IsKeyPressed=1 ;
//补充根据KeyCode的值执行的函数代码,最后恢复按键的值为0。
switch(KeyCode)
{
case YELLOW :
if(MachineState==WORK)
{
CurrLed=0 ;
//这一路正在运行
if(IsRun[CurrLed]==1)
{
PLed0=1 ;
IsRun[CurrLed]=0 ;
//停止并数据复位。
TimeDelay[CurrLed]=0 ;
}
else
{
PLed0=0 ;
IsRun[CurrLed]=1 ;
TimeDelay[CurrLed]=TimeSave[CurrLed];
}
}
else
{
PLed0=0 ;
MachineState=SET1 ;
if(TimeSave[0]>=100)
TimeSave[0]-=100 ;
IsSetFirst=1 ;
}
break ;
case ORANGE :
if(MachineState==WORK)
{
CurrLed=1 ;
//这一路正在运行
if(IsRun[CurrLed]==1)
{
PLed1=1 ;
IsRun[CurrLed]=0 ;
//停止并数据复位。
TimeDelay[CurrLed]=0 ;
}
else
{
PLed1=0 ;
IsRun[CurrLed]=1 ;
TimeDelay[CurrLed]=TimeSave[CurrLed];
}
}
else
{
PLed1=0 ;
MachineState=SET2 ;
if(TimeSave[1]>=100)
TimeSave[1]-=100 ;
IsSetFirst=1 ;
}
break ;
case PURPLE :
if(MachineState==WORK)
{
CurrLed=2 ;
//这一路正在运行
if(IsRun[CurrLed]==1)
{
PLed2=1 ;
IsRun[CurrLed]=0 ;
//停止并数据复位。
TimeDelay[CurrLed]=0 ;
}
else
{
PLed2=0 ;
IsRun[CurrLed]=1 ;
TimeDelay[CurrLed]=TimeSave[CurrLed];
}
}
else
{
PLed2=0 ;
MachineState=SET3 ;
if(TimeSave[2]>=100)
TimeSave[2]-=100 ;
IsSetFirst=1 ;
}
break ;
case RED :
if(MachineState==WORK)
{
CurrLed=3 ;
//这一路正在运行
if(IsRun[CurrLed]==1)
{
PLed3=1 ;
IsRun[CurrLed]=0 ;
//停止并数据复位。
TimeDelay[CurrLed]=0 ;
}
else
{
PLed3=0 ;
IsRun[CurrLed]=1 ;
TimeDelay[CurrLed]=TimeSave[CurrLed];
}
}
else
{
PLed3=0 ;
MachineState=SET4 ;
if(TimeSave[3]>=100)
TimeSave[3]-=100 ;
IsSetFirst=1 ;
}
break ;
case GREEN :
if(MachineState==WORK)
{
CurrLed=4 ;
//这一路正在运行
if(IsRun[CurrLed]==1)
{
PLed4=1 ;
IsRun[CurrLed]=0 ;
//停止并数据复位。
TimeDelay[CurrLed]=0 ;
}
else
{
PLed4=0 ;
IsRun[CurrLed]=1 ;
TimeDelay[CurrLed]=TimeSave[CurrLed];
}
}
else
{
PLed4=0 ;
MachineState=SET5 ;
if(TimeSave[4]>=100)
TimeSave[4]-=100 ;
IsSetFirst=1 ;
}
break ;
case BLUE :
if(MachineState==WORK)
{
CurrLed=5 ;
//这一路正在运行
if(IsRun[CurrLed]==1)
{
PLed5=1 ;
IsRun[CurrLed]=0 ;
//停止并数据复位。
TimeDelay[CurrLed]=0 ;
}
else
{
PLed5=0 ;
IsRun[CurrLed]=1 ;
TimeDelay[CurrLed]=TimeSave[CurrLed];
}
}
else
{
PLed5=0 ;
MachineState=SET6 ;
if(TimeSave[5]>=100)
TimeSave[5]-=100 ;
IsSetFirst=1 ;
}
break ;
case UP :
funUp();
break ;
case DOWN :
funDown();
break ;
case LEFT :
funLeft();
break ;
case RIGHT :
funRight();
break ;
case OK :
funOk();
break ;
default :
break ;
}
KeyCode=0x00 ;
//按键p1持续按下的代码
if(KeyPressing1)
{
if(MachineState!=WORK)
{
//持续按下的时间超过50*20=1000ms则
if(++Key1PressingTime>=20)
{
//每200ms会执行一次keycode++;
if(Key1PressingTime%5==0)
switch(KeyPressing1)
{
case YELLOW :
PLed0=0 ;
MachineState=SET1 ;
IsSetFirst=1 ;
if(TimeSave[0]<100)TimeSave[0]+=100 ;
IsSetFirst=1 ;
break ;
case ORANGE :
PLed1=0 ;
MachineState=SET2 ;
IsSetFirst=1 ;
if(TimeSave[1]<100)TimeSave[1]+=100 ;
IsSetFirst=1 ;
break ;
case PURPLE :
PLed2=0 ;
MachineState=SET3 ;
IsSetFirst=1 ;
if(TimeSave[2]<100)TimeSave[2]+=100 ;
IsSetFirst=1 ;
break ;
case RED :
PLed3=0 ;
MachineState=SET4 ;
IsSetFirst=1 ;
if(TimeSave[3]<100)TimeSave[3]+=100 ;
IsSetFirst=1 ;
break ;
case GREEN :
PLed4=0 ;
MachineState=SET5 ;
IsSetFirst=1 ;
if(TimeSave[4]<100)TimeSave[4]+=100 ;
IsSetFirst=1 ;
break ;
case BLUE :
PLed5=0 ;
MachineState=SET6 ;
IsSetFirst=1 ;
if(TimeSave[5]<100)TimeSave[5]+=100 ;
IsSetFirst=1 ;
break ;
case UP :
IsFlashTime=0 ;
funUp();
break ;
case DOWN :
IsFlashTime=0 ;
funDown();
break ;
default :
break ;
}
}
}
}
else
Key1PressingTime=0 ;
//该按键出现弹起现象,则时间恢复为0
//按键p2持续按下的代码
if(KeyPressing2)
{
//持续按下的时间超过50*20=1000ms则
if(++Key2PressingTime>=20)
if(KeyPressing2==(OK&0x0e))
if(MachineState==WORK)
{
MachineState=SET1 ;
if(TimeSave[0]>=100)
TimeSave[0]-=100 ;
IsSetFirst=1 ;
}
}
else
Key2PressingTime=0 ;
//该按键出现弹起现象,则时间恢复为0
}
void funUp(void)
{
if(MachineState!=WORK)
{
if(IsFlash[2])
{
if(++DisplayData[2]>=10)
DisplayData[2]=0 ;
}
else
{
if(++DisplayData[3]>=10)
DisplayData[3]=0 ;
}
}
}
void funDown(void)
{
if(MachineState!=WORK)
{
if(IsFlash[2])
{
if(--DisplayData[2]>=10)
DisplayData[2]=9 ;
}
else
{
if(--DisplayData[3]>=10)
DisplayData[3]=9 ;
}
}
}
void funLeft(void)
{
if(MachineState!=WORK)
{
IsFlash[2]=0x01 ;
IsFlash[3]=0x00 ;
}
}
void funRight(void)
{
if(MachineState!=WORK)
{
IsFlash[2]=0x00 ;
IsFlash[3]=0x01 ;
}
}
void funOk(void)
{
unsigned char i ;
//保存数据并进入倒计时暂停状态
if(MachineState!=WORK)
{
IsFlash[2]=0x00 ;
IsFlash[3]=0x00 ;
if(TimeSave[MachineState-1]<100)
TimeSave[MachineState-1]=DisplayData[2]*10+DisplayData[3];
else
TimeSave[MachineState-1]=DisplayData[2]*10+DisplayData[3]+100 ;
MachineState=WORK ;
for(i=0;i<6;i++)
{
TimeDelay[i]=TimeSave[i];
IsRun[i]=0 ;
}
//这里保存数据到eeprom
sector_erase(0x4000);
sequential_write_flash_in_one_sector(0x4000, 6, TimeSave );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -