📄 rudongbeng.c.bak
字号:
}
//无法有效触发
else
{
keyResetCounter=0;
keyResetStatus=KEY_WAITING;
}
}
}
}
/*********************************************************
//按键处理程序
//假定时间单位是100ms
//假定运行时间以及间隔时间单位都是100ms
*********************************************************/
void keyProcess(void)
{
//按键TINY ADD松开了
if(keyTinyAddStatus==KEY_OPEN)
{
//微调运行时间,增量为100ms
if(timeSetMode==TIME_SET_WORK)
{
if(outputWorkTimeSetting<65530)outputWorkTimeSetting+=1;
unionData.intData=outputWorkTimeSetting;
dataSaveBuffer[WORK_TIME_HIGH]=unionData.charData[0];
dataSaveBuffer[WORK_TIME_LOW]=unionData.charData[1];
}
else //if(timeSetMode==TIME_SET_STOP)
{
if(outputStopTimeSetting<65530)outputStopTimeSetting+=1;
unionData.intData=outputStopTimeSetting;
dataSaveBuffer[STOP_TIME_HIGH]=unionData.charData[0];
dataSaveBuffer[STOP_TIME_LOW]=unionData.charData[1];
}
writeEEPROM(dataSaveBuffer,1);
timeSwitchTimeCounter=200;
unitTimeCounter=600;
keyTinyAddStatus=KEY_WAITING;
}
//按键TINY SUB松开了
if(keyTinySubStatus==KEY_OPEN)
{
//微调运行时间,减量为100ms
if(timeSetMode==TIME_SET_WORK)
{
if(outputWorkTimeSetting>0)outputWorkTimeSetting-=1;
unionData.intData=outputWorkTimeSetting;
dataSaveBuffer[WORK_TIME_HIGH]=unionData.charData[0];
dataSaveBuffer[WORK_TIME_LOW]=unionData.charData[1];
}
else //if(timeSetMode==TIME_SET_STOP)
{
if(outputStopTimeSetting>0)outputStopTimeSetting-=1;
unionData.intData=outputStopTimeSetting;
dataSaveBuffer[STOP_TIME_HIGH]=unionData.charData[0];
dataSaveBuffer[STOP_TIME_LOW]=unionData.charData[1];
}
writeEEPROM(dataSaveBuffer,1);
timeSwitchTimeCounter=200;
unitTimeCounter=600;
keyTinySubStatus=KEY_WAITING;
}
//按键LARGE ADD松开了
if(keyLargeAddStatus==KEY_OPEN)
{
//粗调运行时间,增量为100x100ms
if(timeSetMode==TIME_SET_WORK)
{
if(outputWorkTimeSetting<65430)outputWorkTimeSetting+=100;
unionData.intData=outputWorkTimeSetting;
dataSaveBuffer[WORK_TIME_HIGH]=unionData.charData[0];
dataSaveBuffer[WORK_TIME_LOW]=unionData.charData[1];
}
else //if(timeSetMode==TIME_SET_STOP)
{
if(outputStopTimeSetting<65430)outputStopTimeSetting+=100;
unionData.intData=outputStopTimeSetting;
dataSaveBuffer[STOP_TIME_HIGH]=unionData.charData[0];
dataSaveBuffer[STOP_TIME_LOW]=unionData.charData[1];
}
writeEEPROM(dataSaveBuffer,1);
timeSwitchTimeCounter=200;
unitTimeCounter=600;
keyLargeAddStatus=KEY_WAITING;
}
//按键LARGE SUB松开了
if(keyLargeSubStatus==KEY_OPEN)
{
//粗调运行时间,减量为100x100ms
if(timeSetMode==TIME_SET_WORK)
{
if(outputWorkTimeSetting>100)outputWorkTimeSetting-=100;
unionData.intData=outputWorkTimeSetting;
dataSaveBuffer[WORK_TIME_HIGH]=unionData.charData[0];
dataSaveBuffer[WORK_TIME_LOW]=unionData.charData[1];
}
else //if(timeSetMode==TIME_SET_STOP)
{
if(outputStopTimeSetting>100)outputStopTimeSetting-=100;
unionData.intData=outputStopTimeSetting;
dataSaveBuffer[STOP_TIME_HIGH]=unionData.charData[0];
dataSaveBuffer[STOP_TIME_LOW]=unionData.charData[1];
}
writeEEPROM(dataSaveBuffer,1);
timeSwitchTimeCounter=200;
unitTimeCounter=600;
keyLargeSubStatus=KEY_WAITING;
}
//按键HandControl松开了
if(keyHandControlStatus==KEY_OPEN)
{
outPutEnable=1;
outputWorkTimeCounter=0;
outputStopTimeCounter=0;
keyHandControlStatus=KEY_WAITING;
timeSwitchTimeCounter=200;
unitTimeCounter=600;
}
//按键HandAuto松开了
if(keyHandAutoStatus==KEY_OPEN)
{
//假如是自动状态,切换到手动状态
if(outPutMode==OUTPUT_AUTO)
{
outPutMode=OUTPUT_HAND;
outPutEnable=1;
//outputWorkTimeCounter=0;
//outputStopTimeCounter=0;
}
//假如是手动状态,切换到自动状态
else //if((outPutMode==OUTPUT_HAND))
{
outPutMode=OUTPUT_AUTO;
outPutEnable=1;
//outputWorkTimeCounter=0;
//outputStopTimeCounter=0;
}
timeSwitchTimeCounter=0;
unitTimeCounter=0;
keyHandAutoStatus=KEY_WAITING;
}
//按键TimeSwitch松开了
if(keyTimeSwitchStatus==KEY_OPEN)
{
//假如是运作时间设置状态,切换到间隔时间设置状态
if(timeSetMode==TIME_SET_WORK)
{
timeSetMode=TIME_SET_STOP;
//outputWorkTimeCounter=0;
//outputStopTimeCounter=0;
}
//假如是手动状态,切换到自动状态
else //if((timeSetMode==TIME_SET_STOP))
{
timeSetMode=TIME_SET_WORK;
//outputWorkTimeCounter=0;
// outputStopTimeCounter=0;
}
timeSwitchTimeCounter=200;
unitTimeCounter=600;
keyTimeSwitchStatus=KEY_WAITING;
}
//按键RESET松开了
//是短按的动作
if(keyResetStatus==KEY_TIME_SHORT)
{
timeSetMode=TIME_SET_STOP;
outPutMode=OUTPUT_HAND;
//outPutEnable=0;
outputWorkTimeCounter=0;
outputStopTimeCounter=0;
outputWorkTimeSetting=90;
outputStopTimeSetting=30;
unionData.intData=outputWorkTimeSetting;
dataSaveBuffer[WORK_TIME_HIGH]=unionData.charData[0];
dataSaveBuffer[WORK_TIME_LOW]=unionData.charData[1];
unionData.intData=outputStopTimeSetting;
dataSaveBuffer[STOP_TIME_HIGH]=unionData.charData[0];
dataSaveBuffer[STOP_TIME_LOW]=unionData.charData[1];
writeEEPROM(dataSaveBuffer,1);
keyResetStatus=KEY_WAITING;
}
//是长按的动作
else if(keyResetStatus==KEY_TIME_LONG)
{
timeSetMode=TIME_SET_STOP;
outPutMode=OUTPUT_AUTO;
outPutEnable=1;
outputWorkTimeCounter=0;
outputStopTimeCounter=0;
outputWorkTimeSetting=65530;
outputStopTimeSetting=10;
unionData.intData=outputWorkTimeSetting;
dataSaveBuffer[WORK_TIME_HIGH]=unionData.charData[0];
dataSaveBuffer[WORK_TIME_LOW]=unionData.charData[1];
unionData.intData=outputStopTimeSetting;
dataSaveBuffer[STOP_TIME_HIGH]=unionData.charData[0];
dataSaveBuffer[STOP_TIME_LOW]=unionData.charData[1];
writeEEPROM(dataSaveBuffer,1);
keyResetStatus=KEY_WAITING;
//LED3_ON();
}
}
/*********************************************************
//继电器输出控制
//假设时间单位是100ms
*********************************************************/
void outputControl(void)
{
//在输出状态
if(outPutEnable==1)
{
if(outputStep==OUTPUT_STEP_WORK)
{
outputWorkTimeCounter++;
OUTPUT1_ON();
OUTPUT2_ON();
//LED3_ON();
if(outputWorkTimeCounter>outputWorkTimeSetting)
{
outputWorkTimeCounter=0;
outputStep=OUTPUT_STEP_STOP;
}
}
else //if(outputStep==OUTPUT_STEP_STOP)
{
outputStopTimeCounter++;
OUTPUT1_OFF();
OUTPUT2_OFF();
if(outPutMode==OUTPUT_HAND)
{
outPutEnable=0;
outputStep=OUTPUT_STEP_WORK;
}
//LED3_OFF();
if(outputStopTimeCounter>outputStopTimeSetting)
{
outputStopTimeCounter=0;
outputStep=OUTPUT_STEP_WORK;
//完成一个周期,判断一下运作的模式,
//假如是手动状态,设置该程序暂停,
//假如是自动状态,继续运行。
}
}
}
}
/*********************************************************
//LED输出控制
//假设时间单位是100ms
*********************************************************/
void ledStatusShow(void)
{
//恢复状态灯指示
//设置状态
if(unitTimeCounter>0)
{
//闪烁处理
if(timeSwitchTimeCounter>0)
{
//点亮一次
if(timeSwitchTimeCounter>150)
{
//运作时间的设置状态
if(timeSetMode==TIME_SET_WORK)
{
LED1_ON();
LED2_OFF();
}
//间隔时间的设置状态
else //if(timeSetMode==TIME_SET_WORK)
{
LED1_OFF();
LED2_ON();
}
}
//关闭
else if(timeSwitchTimeCounter>100)
{
//运作时间的设置状态
if(timeSetMode==TIME_SET_WORK)
{
LED1_OFF();
LED2_OFF();
}
//间隔时间的设置状态
else //if(timeSetMode==TIME_SET_WORK)
{
LED1_OFF();
LED2_OFF();
}
}
//点亮一次
else if(timeSwitchTimeCounter>50)
{
//运作时间的设置状态
if(timeSetMode==TIME_SET_WORK)
{
LED1_ON();
LED2_OFF();
}
//间隔时间的设置状态
else //if(timeSetMode==TIME_SET_WORK)
{
LED1_OFF();
LED2_ON();
}
}
//关闭
else //if(timeSwitchTimeCounter>100)
{
//运作时间的设置状态
if(timeSetMode==TIME_SET_WORK)
{
LED1_OFF();
LED2_OFF();
}
//间隔时间的设置状态
else //if(timeSetMode==TIME_SET_WORK)
{
LED1_OFF();
LED2_OFF();
}
}
}
//恢复原来的状态
else
{
//运作时间的设置状态
if(timeSetMode==TIME_SET_WORK)
{
LED1_ON();
LED2_OFF();
}
//间隔时间的设置状态
else //if(timeSetMode==TIME_SET_WORK)
{
LED1_OFF();
LED2_ON();
}
}
}
//正常运行指示状态
else //if(unitTimeCounter==0)
{
if(outPutMode==OUTPUT_AUTO)
{
LED1_ON();
LED2_ON();
}
else //if(outPutMode==OUTPUT_HAND)
{
LED1_OFF();
LED2_OFF();
}
}
}
//=====================================================
//10ms中断定时器
//=====================================================
SIGNAL(SIG_OVERFLOW0)
{
//CLI();
TCNT0 = 0x8b; //reload counter value
keyScanProgram();
outputCounter++;
if(outputCounter>10)
{
outputCounter=0;
outputControl();
}
//键盘执行程序
keyProcessCounter++;
if(unitTimeCounter>0)unitTimeCounter--;
if(timeSwitchTimeCounter>0)timeSwitchTimeCounter--;
}
//===========================================================//
//===========================================================//
int main(void)
{
init_devices();
for(delay1=0;delay1<2000;delay1++)
{
if(delay2<3000)
{
delay2++;
}
else
{
delay2=0;
}
}
set_interrupt(); //re-enable interrupts
outPutEnable=0;
outputWorkTimeSetting=90;
outputStopTimeSetting=30;
readEEPROM(dataSaveBuffer,1);
//读出工作时间设置
//taSaveTemp=0;
unionData.charData[0]=dataSaveBuffer[WORK_TIME_HIGH];
unionData.charData[1]=dataSaveBuffer[WORK_TIME_LOW];
outputWorkTimeSetting=unionData.intData;
//读出间隔时间设置
unionData.charData[0]=dataSaveBuffer[STOP_TIME_HIGH];
unionData.charData[1]=dataSaveBuffer[STOP_TIME_LOW];
outputStopTimeSetting=unionData.intData;
while(1)
{
//处理键盘程序,
//周期是100ms
if(keyProcessCounter>10)
{
keyProcessCounter=0;
keyProcess();
}
ledStatusShow();
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -