int main(void) { GPIO_Configuration(); InitLCD(); RCC_Configuration(); uint8_t Pos=60; while (1) { /*ClrScr(); Pos+=1; DrawRectangle(Pos,Pos,242-2*Pos,130-2*Pos,clBlack); DrawRectangle(Pos-20,Pos-20,242-2*(Pos-20),130-2*(Pos-20),clBlack); DrawRectangle(Pos-40,Pos-40,242-2*(Pos-40),130-2*(Pos-40),clBlack); ShowForm(165,5,70,80); DrawRectangle(1,1,240,128,clBlack); RefreshLCD(); if (Pos==64) {Pos=44;};*/ DrawFillRectangle(1,1,240,128,clWhite); RefreshLCD(); Delay(500); DrawFillRectangle(1,1,240,128,clBlack); RefreshLCD(); Delay(500); } }
u8 AuthorProcess(u8 key_data) { static u8 key_count = 0; u8 author_flag = 0; if(key_data > 9) { key_count = 0; memset(authorbuf , 0 , 10); } else { authorbuf[key_count++] = key_data + '0'; if(key_count >= 9) { if(0 == memcmp(authorbuf , "503740053" , 9)) //匹配成功 { CAB_MSG cab_msg; ReadCabinetMsg(&cab_msg);//读取系统信息 memset(cab_msg.sys_password , '8' , 6);//改变箱子系统管理员密码 888888 memset(cab_msg.comm_password , '6' , 6);//改变箱子系统管理员密码 666666 WriteCabinetMsg(&cab_msg);//写入系统信息 RefreshLCD(); Dis1LineMid("武汉霍克富莱" , 0); Dis1LineMid("作者:lc" , 1); Dis1LineMid("版本:v7.7.3" , 2); RefreshLCD();//刷新屏幕 author_flag = 1; } key_count = 0; memset(authorbuf , 0 , 10); } } return author_flag; }
/*恢复出厂设置*/ void SysRecoveryInit(FUN_BLOCK **funBlock) { DIS_SING *sing_temp; CAB_MSG cab_msg; ReadCabinetMsg(&cab_msg); GetSubFunBlock(&pfunSubBlock); sing_temp = (DIS_SING *)(pfunSubBlock->current_display); pfunSubBlock->data_type = NONUM;//显示属性 strcpy(sing_temp->y2 , "确认恢复出厂设置?"); /*取得VIRTUAL_NUM_LENGTH位数的箱门数*/ if(CANCEL == KeyDisplay(pfunSubBlock , 10)) { FreeMem(); return; } Dis1LineMid("初始化中、、、" , 1); RefreshLCD(); /*恢复出厂设置*/ InitAllBox(INIT_FLAG); memset(pboxStatus , BOX_IDLE , cab_msg.cab_box_num); //忘了将缓存的箱子信息清空 2013.4.25 *(pboxStatus + cab_msg.cab_box_num) = 0;//最后一位设置为0,方便使用strlen strcpy(sing_temp->y2 , "初始化完成"); DisplaySubBlock(pfunSubBlock); }
/* 复位按键检测,实现对管理员密码和系统管理员密码复位 长按复位键5s可实现复位操作 time: LC 2013.8.13 */ void RestKeyCheck() { /*检测复位键是否按下,低有效*/ if(!RESETKEY) { u8 i; LED2ON; for(i=0;i<100;i++) { OSTimeDlyHMSM(0, 0, 0,50);//循环检测,按下时长超过3s if(RESETKEY) { LED2OFF; break; } if(i == 99) { CAB_MSG cab_msg; TIM_Cmd(TIM2,DISABLE);//禁能TIM2,禁止键盘输入 RefreshLCD(); Dis1LineMid("初始化中、、、" , 1); RefreshLCD();//刷新屏幕 ReadCabinetMsg(&cab_msg);//读取系统信息 memset(cab_msg.sys_password , '8' , 6);//改变箱子系统管理员密码 888888 memset(cab_msg.comm_password , '6' , 6);//改变箱子系统管理员密码 666666 WriteCabinetMsg(&cab_msg);//写入系统信息 OSTimeDlyHMSM(0, 0, 2,0);//显示时间2s LED2OFF; TIM_Cmd(TIM2,ENABLE);//使能TIM2 pfunBlock = mainFunBlock; OSMboxPost(display_box , pfunBlock);// 发送邮箱,刷新显示,回到主屏 } } } }
/*********************************************************** 函数功能:停电模式循环 入口参数: 出口参数: 备注说明:1 空闲进入休眠,停显1屏,停电7天后关闭液晶显示 2 定时1s唤醒,判断是否上电,喂狗,每分钟RTC温度补偿 3 按键唤醒,低速运行一个轮显周期 4 检测到上电后直接复位 ***********************************************************/ uint16 PowerDowmMain(void) { uint32 timer500ms=0; uint32 timer1000ms=0; int16 temp; volatile uint8 BatteryFlag = 0; volatile uint8 BatteryState; DRV_WD_FeedDog(); //LvdGetManaul(); //设置LVD门限等 while(1) { //按键中断唤醒 if(scrKeyIntFlag) { scrKeyIntFlag=0; EXTI_DisableInt(EXTI_CH1); DRV_RTC_FlashTask(); //adc DRV_ADC_On(); DRV_ADC_StartTask(); while(RESET != ADC12_GetScanStatusFlag(ADC12_UNIT0)); DRV_ADC_StartTask(); while(RESET != ADC12_GetScanStatusFlag(ADC12_UNIT0)); DRV_ADC_StartTask(); while(RESET != ADC12_GetScanStatusFlag(ADC12_UNIT0)); DRV_ADC_StartTask(); while(RESET != ADC12_GetScanStatusFlag(ADC12_UNIT0)); DRV_ADC_StartTask(); while(RESET != ADC12_GetScanStatusFlag(ADC12_UNIT0)); DRV_ADC_Off(); BatteryState = BattLowStateGet(); if(BatteryState == 0) { BatteryFlag = 0; PowerSleepWakeInit(); //按键唤醒主循环 while(1) { if(runMe) { //5ms任务 runMe=0; timer500ms++; timer1000ms++; DRV_WD_FeedDog(); if(FM3_GPIO->PDIR1&= IO_PINx3) {//上电外部中断唤醒 if(PowerUpDetect()) { PowerWakeSleepInit();//设置唤醒源,退出低速运行 break; } } Key_Scr_DetectPowerDown_Task();//轮显按键驱动 //CoverDetectProcess(); //EventBatteryUpdateStateFlagProcess(); //500ms任务 if(timer500ms>100) { timer500ms=0; //DRV_RTC_FlashTask(); //Clock_CheckDST(); } DRV_RTC_FlashTask(); //1000ms任务 if(timer1000ms>200) { timer1000ms=0; PowerDownDisplayAlarmPro(); //LCD_Flag_Driver_Task(); Disp_Auto_Cycle_Task(); //显示 if(wakeUpTimer) //定时回到休眠 { wakeUpTimer--; } else { PowerWakeSleepInit();//设置唤醒源,退出低速运行 break; } } } } } else { DRV_LCD_Uninit(); } } //1s定时中断唤醒 if(SecFlag==1) { SecFlag=0; } //1min定时中断唤醒 if(MinFlag==1) { MinFlag=0; //adc DRV_ADC_On(); DRV_ADC_StartTask(); while(RESET != ADC12_GetScanStatusFlag(ADC12_UNIT0)); DRV_ADC_StartTask(); while(RESET != ADC12_GetScanStatusFlag(ADC12_UNIT0)); DRV_ADC_StartTask(); while(RESET != ADC12_GetScanStatusFlag(ADC12_UNIT0)); DRV_ADC_StartTask(); while(RESET != ADC12_GetScanStatusFlag(ADC12_UNIT0)); DRV_ADC_StartTask(); while(RESET != ADC12_GetScanStatusFlag(ADC12_UNIT0)); DRV_ADC_Off(); //RTC温度补偿 TempGet(&temp, 1); CalcPPM(temp); DRV_RTC_CalcSecDeviation(); //停电计算秒的误差 if(BattLowStateGet())//电池 { SetSegment(SEG_battery2,0); } else { SetSegment(SEG_battery2,1); } RefreshLCD(); //电池电压检测 BatteryState = BattLowStateGet(); if(BatteryState == 1) { if(BatteryFlag == 0) { Feed_watchdog(); BatteryFlag =1; SleepDispTimer = 0; } } else if(BatteryFlag == 1) { *(volatile unsigned long*)(0xE000ED0C)=0x05FA0004; while(1); //20140710加上 } //停电停显定时 if(SleepDispTimer) { SleepDispTimer--; } else { DRV_LCD_Uninit(); //关闭LCD } } //p13上电预判//尽量缩短检测时间 if(FM3_GPIO->PDIR1&= IO_PINx3) { if(PowerUpDetect()) { //if(POWER_UP_INIT_SUCESS == PowerUpInit()) //{ // return POWER_UP_INIT_SUCESS; //回到主循环 //} //else //{ // PowerDownInit(); // Feed_watchdog(); //LvdGetManaul(); //设置LVD门限等 //} *(volatile unsigned long*)(0xE000ED0C)=0x05FA0004; while(1); //20140710加上 } } //休眠 if(BatteryState == 1) { LowPwrCon_GoToStandByMode(STB_RTCMode,STB_IO_KEEP); } else { LowPwrCon_GoToStandByMode(STB_TimerMode,STB_IO_KEEP); } Feed_watchdog(); } }