void StatusShow( bool show ) /**************************/ { if( StatusWnd == NULL && show ) { StatusInit(); } if( StatusWnd != NULL ) { if( show ) { GUIShowWindow( StatusWnd ); } else { GUIHideWindow( StatusWnd ); } GUIWndDirty( StatusWnd ); } }
int main(void) { int nCounter = 0; //給Beep Loop用的Counter //初始化參數 u8gLCD_BOOT = 1; u32NeedWriteFlash = 0; u32ADC = POWER_LOWEST_ADC + 100; //檢查電源用的參數,電不夠時把馬達動作變小。 u8MotorSuspended = 0; //看看馬達是不是在暫停狀態 //正式程式碼,開始初始化動作。 SysCLK_config_clock_select(0); // 配置時鐘 EL_Init(); ADC_Init(); //讀取CPU ID u32IAP_ReadUID(uid); sn = uid[0] + uid[1] +uid[2] +uid[3]; //讀取記憶的速度 memset(BufferFlash, 0x0, IAP_FLASH_PAGE_SIZE_BYTES); u32IAP_ReadUserDataFlash(BufferFlash, IAP_FLASH_PAGE_SIZE_BYTES); memcpy(BackupBuffer, BufferFlash,IAP_FLASH_PAGE_SIZE_BYTES); BeeperInit(); HallInit(); KeyInit(); PWMInit(); // For motor control voltage. WDT_Enable(); //Enable the watch dog. InitialTimeTick(TIME_TICK_NUMBER); while(u8gLCD_BOOT != 0); //time tic 開始後就會叫callback, 此時LCD及Beeper,KeyBounce要初始完成。 u32ADC = ADC_Read(); if(u32ADC > POWER_LOWEST_ADC && u32ADC != 0) { LCD_Init(); // LCD update for(nCounter = 0 ; nCounter < 2; nCounter++) { BeepMillisecondsAndWait(500); WDTFeed(); } } else { //如果一開始就電量不足,在閃一下後,就離開,等下次初始化。 EL_OnOff(); delay_us(1000); EL_OnOff(); delay_us(1000); return 0; } StatusInit(); nCounter = 0; while(sn % 1000 != UID) { #ifndef PROGRAMING BeepMillisecondsAndWait(500); #endif WDTFeed(); } if( !(GPIO2->DATA & (1 << 1)) && !(GPIO0->DATA & (1 << 5))) { while(1) { WDTFeed();// Feed Dog. } } while(1) { WDTFeed();// Feed Dog. u32ADC = ADC_Read(); PWM_CheckSuspend(u32ADC); WDTFeed();// Feed Dog. ProcessHall(); Status_ProcessKey(GetKey()); WriteFlash(); } }