void main( void ) { Delay(100); //等待复位 LcmInit(); LcmClearTXT(); LcmClearBMP(); while(1) { LcmClearTXT(); PutBMP(bmp1); DelayKey(1,5); DisplayDots(0x55); DelayKey(1,5); LcmClearBMP(); PutStr(0,0,str1); DelayKey(1,5); LcmClearTXT(); DisplayDots(0xaa); DelayKey(1,5); } }
int main(void) { OSCCON = 0xF2; //配置CPU时钟频率为16MHz //定时器1配置,10ms,源Fosc/4,再分频1:2,10ms一次中断 TMR1ON = 0; TMR1CS = 0; //内部时钟Fosc/4 T1CKPS1 = 1; //1:4预分频比 T1CKPS0 = 0; //TMR1H = 0xD8; //10ms //TMR1L = 0xEF; TMR1H = 0x3C; //50ms TMR1L = 0xAF; TMR1IE = 1; TMR1ON = 1; //定时器1配置结束并启用 //定时器2配置,1ms TMR2ON=0; TMR2IE=0; T2CON=0b00000010; PR2=125; TMR2IE=1; TMR2ON=1; //定时器2配置结束 //开启全局中断 PEIE = 1; GIE = 1; b50MsFlag = 0; b1SecFlag=0; b1MinFlag=0; b1HourFlag=0; nTimer1Count = 0; nSecCount = 0; nMinCount = 0; nHourCount = 0; IO_Config(); //初始化所有端口 //初始化参数,如果已经保存到EEPROM,则读取,否则默认值初始化并保存 KYJ_Param_Default(); if(EEPROM_Read(EEPROM_FLAG_ADDR) == 100) { EEPROM_Load_Param(PARAM_STORE_BYTES); EEPROM_Load_Counter();//这个要放在后面 } else { EEPROM_Save_Param(PARAM_STORE_BYTES); EEPROM_Write(EEPROM_FLAG_ADDR,100); } //初始化 LcmInit(); DelayMs(100); LcmInit(); //防止LCD一次初始化失败,再次初始化 LED_ON; // DelayMs(100); KYJ_Init(); adc_init(); LED_RUN_ON; LED_ERROR_ON; BEEP_ON; //显示欢迎界面 LcmSetSongBuff(1,2,3,4,0,0,0,0); LcmPutSongStr(1,30,BuffCharDot,4,0); LcmSetSongBuff(5,6,7,8,9,0,0,0); LcmPutSongStr(4,20,BuffCharDot,5,0); asm("CLRWDT"); DelayS(3); LcmClear(0x00); LED_RUN_OFF; LED_ERROR_OFF; BEEP_OFF; //运行前验证下参数设置是否正确,另外在每次设置参数值后也要验证下 sKYJ.nValidateParamResult = KYJ_ValidateParam(); //sKYJ.nStatusTimeElapse = sKYJ.sUserParam.nRestartDelayTime; //sKYJ.sFactoryParam.nLowTempProtect = -10; SWDTEN = 1; while(1) { //检查状态 if(KYJ_CheckStatus(STATUS_POWERSTOP)) KYJ_SwitchToStatus(STATUS_POWERSTOP); if(KYJ_CheckStatus(STATUS_KEYSTOP)) KYJ_SwitchToStatus(STATUS_KEYSTOP); if(KYJ_CheckStatus(STATUS_DELAYSTOP)) KYJ_SwitchToStatus(STATUS_DELAYSTOP); if(KYJ_CheckStatus(STATUS_FAULTSTOP)) KYJ_SwitchToStatus(STATUS_FAULTSTOP); if(KYJ_CheckStatus(STATUS_STARTUP)) KYJ_SwitchToStatus(STATUS_STARTUP); if(KYJ_CheckStatus(STATUS_LOAD)) KYJ_SwitchToStatus(STATUS_LOAD); if(KYJ_CheckStatus(STATUS_UNLOAD)) KYJ_SwitchToStatus(STATUS_UNLOAD); if(KYJ_CheckStatus(STATUS_MANUAL)) KYJ_SwitchToStatus(STATUS_MANUAL); KYJ_ExcecuteStatus(); //检查界面 if(KYJ_CheckInterface(INTERFACE_MAIN)) KYJ_SwitchToInterface(INTERFACE_MAIN); if(KYJ_CheckInterface(INTERFACE_MENU)) KYJ_SwitchToInterface(INTERFACE_MENU); if(KYJ_CheckInterface(INTERFACE_RUNPARAM)) KYJ_SwitchToInterface(INTERFACE_RUNPARAM); if(KYJ_CheckInterface(INTERFACE_USERPARAM)) KYJ_SwitchToInterface(INTERFACE_USERPARAM); if(KYJ_CheckInterface(INTERFACE_FACTORYPARAM)) KYJ_SwitchToInterface(INTERFACE_FACTORYPARAM); if(KYJ_CheckInterface(INTERFACE_REGPARAM)) KYJ_SwitchToInterface(INTERFACE_REGPARAM); if(KYJ_CheckInterface(INTERFACE_PASSWORD)) KYJ_SwitchToInterface(INTERFACE_PASSWORD); if(KYJ_CheckInterface(INTERFACE_PARAM)) KYJ_SwitchToInterface(INTERFACE_PARAM); KYJ_ExecuteInterface(); if(b50MsFlag) { //更新压力和温度数据 // KYJ_UpdateData(); //不能放在这里,会被1ms的中断打断,导致采样不准 b50MsFlag = 0; } if(b1SecFlag) { asm("CLRWDT"); sKYJ.nStatusTimeElapse++; //如果时间超过9999秒,则定格在9999秒,否则无法显示 if(sKYJ.nStatusTimeElapse>9999) sKYJ.nStatusTimeElapse = 9999; sKYJ.nInterfaceTimeElapse++; //重新初始化下端口 // IO_Config(); if(sKYJ.nInterface == INTERFACE_RUNPARAM)KYJ_ShowRunParam(); b1SecFlag=0; //是否1分钟到 nSecCount++; if(nSecCount>=60) { b1MinFlag = 1; nSecCount = 0; } } if(b1MinFlag) { //如果不是停止状态,则运行时间加一 if((sKYJ.nStatus & 0xF0) == 0) sKYJ.sFactoryParam.nTotalRunTime++; //如果是加载状态,则加载时间加一 if(sKYJ.nStatus == STATUS_LOAD) sKYJ.sFactoryParam.nTotalLoadTime++; b1MinFlag = 0; nMinCount++; if(nMinCount>=60) { b1HourFlag = 1; nMinCount =0; } //每隔10分钟,重新初始化下液晶 if((nMinCount%10) == 0 && sKYJ.nInterface == INTERFACE_MAIN) //每隔1分钟,重新初始化下液晶 //if(sKYJ.nInterface == INTERFACE_MAIN) { LcmInit(); LcmSetSongBuff(12,0,0,0,0,0,0,0); //℃ LcmPutSongStr(1,32,BuffCharDot,1,0); LcmPutStr(104,1,(unsigned char *)"MPa"); LcmSetSongBuff(19,0,0,0,0,0,0,0); //秒 LcmPutSongStr(4,112,BuffCharDot,1,0); } //每隔1分钟,如果处于停止状态重新初始化下端口 if(sKYJ.nStatus&0xF0 != 0) { IO_Config(); } } if(b1HourFlag) { //每隔1小时,如果处于停止状态重新初始化下端口 // if(sKYJ.nStatus&0xF0 != 0) // { // IO_Config(); // } b1HourFlag = 0; } } }