📄 rudongbeng.c
字号:
LED3_OFF(); } //无法有效触发 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 + -