//#include "oledshow.h" #include "LCD.h" #include "menu.h" //#include "data_write_local.h" #include "key.h" #include "RTC.h" #include "device_gpio_init.h" #include "regdefine.h" #include "systaskinit.h" #include "mem_pro.h" #include "powermanage.h" #include "gprs.h" #include "data_interaction_DTU.h" #include "state_fun_init.h" #include "ValveControl.h" #include "third_telecom_manage.h" /*******************???*************/ #define KEY_ESC 0x01 #define KEY_RETURN 0x02 #define KEY_NEXT 0x04 #define P_MENU 4 //ѹÁ¦ #define T_MENU 5 //ÎÂ¶È #define Time_MENU 6 //ʱ¼ä //#define VOG_MENU 5 //ÆøÌåÁ÷ËÙ //#define SOS_MENU 6 //ÉùËÙ MENU_MODULE_T menu_data; LCDSIGNAL_FLAG LCDSignal_flag_g; u8 Warning_blink=1; u8 Alarm_blink=1; u8 Battery_blink=1; #define MENU_LCD_NOMARL_MODE 0 #define MENU_LCD_NOFLOW_NOSHOW_MODE 1 #define MENU_LCD_ALWAYS_SHOW_MODE 2 typedef enum { MENU_LCD_DEFAULT_MODE = 0, MENU_LCD_SEARCH_MODE, }MENU_LCD_SHOW_MODE; void menu_leve1() { // u8 show_bit_num; u8 count_i; float lcd_calibration_flow; LCD_buf_Clear(); LCD_DisplayDefault(); if(menu_data.show_mode == 0) { LCD_Display_Normal_Mode(menu_data.key_num); } else { LCD_Display_Look_Mode(menu_data.key_num); } LCD_Display(LCD_Buffer); } // void LCD_first_power_on_up(void) { u8 BUF[5]; LCDSignal_flag_g.Sleep=0; LCD_Power_Init(); LCD_Power_ON; menu_data.system_menulevel = LEVEL1; delay_ms(80); LCD_GPIO_Init(); LCD_Clear(); LCD_driver_init(); menu_data.show_mode = 0; menu_data.key_num = MENU_ORG; menu_data.lcd_refresh_cnt = 0; BUF[0] = 0x03; delay_ms(2); LCD_Write(0x84,BUF,1); //ÄÚÈÝΪ0x03£¬¿ªÆôÏÔʾºÍÕñµ´Æ÷£»ÄÚÈÝΪ00£¬¹Ø±ÕÏÔʾºÍÕñµ´Æ÷ } void LCD_first_power_on_down(void) { u8 BUF[5]; BUF[0] = 0x00; LCD_Write(0x84,BUF,1); //ÄÚÈÝΪ0x03£¬¿ªÆôÏÔʾºÍÕñµ´Æ÷£»ÄÚÈÝΪ00£¬¹Ø±ÕÏÔʾºÍÕñµ´Æ÷ delay_ms(2); LCDSignal_flag_g.Sleep=1; menu_data.system_tick=0; LCDSignal_flag_g.LCD_first_up = 1; menu_data.system_menulevel = LEVEL_POWER_OFF; LCD_Power_OFF; // LCD_Power_lowpower_init(); LCD_GPIO_sleep_mode(); } void LCD_reflash_init(void) { menu_data.system_menulevel = LEVEL1; delay_ms(80); LCD_Clear(); LCD_driver_init(); menu_data.show_mode = 0; menu_data.key_num = MENU_ORG; LCDSignal_flag_g.LCD_first_up = 0; } void lcd_hardware_detect_init(void) { /*LCDÓ²¼þ¼ì²â*/ u8 PE0_State; u8 PE1_State; /*ÅжÏÑ¡ÔñLCDÇý¶¯³ÌÐò*/ // LCD_Power_OFF; // GPIO_E_0_INIT_OUT0(); //PE0×÷Ϊ¸¡¶¯ÊäÈëµçƽ״̬²»¶¨£¬ÕâʱºòÒªÏÈÊä³öµÍµçƽ£¬ÔÙתΪ¸¡¶¯ÊäÈ룬Õâ¸öʱºòÈç¹ûÊäÈë²»ÊÇ¸ßµçÆ½£¬ÄǾÍÊÇµÍµçÆ½ÁË£ÒòΪ»ÐÂÒº¾§°åPE0¹Ü½Å±»ÉÏÀ­ÁË£¬¶øÔ­Òº¾§Ã»ÓÐ // GPIO_E_01_INIT();//PE0µÄ³õʼ»¯ GPIO_E_01_INIT();//PE0µÄ³õʼ»¯ delay_ms(10); LCD_Power_ON; //ÔÚ´ò¿ªÒº¾§µçÔ´µÄÇé¿ö϶ÁÈ¡PE0\PE1¹Ü½Å״̬ delay_ms(10); PE0_State = PEin(0); PE1_State = PEin(1); if((PE0_State==0)&&(PE1_State==1)) { menu_data.lcd_hardware_type = HT16C23_M14763_P3; } else if((PE0_State==0)&&(PE1_State==0)) { menu_data.lcd_hardware_type = HT16C23_M14280_P2; }else { //ÎÞ·¨ÅжÏʱÔÙÀ´Ò»±é GPIO_E_01_INIT();//PE0µÄ³õʼ»¯ delay_ms(10); LCD_Power_ON; delay_ms(10); PE0_State = PEin(0); PE1_State = PEin(1); if((PE0_State==0)&&(PE1_State==1)) { menu_data.lcd_hardware_type = HT16C23_M14763_P3; } else if((PE0_State==0)&&(PE1_State==0)) { menu_data.lcd_hardware_type = HT16C23_M14280_P2; }else { menu_data.lcd_hardware_type = HT16C23_M14280_P2; } } LCD_Power_OFF; delay_ms(10); GPIO_E_01_sleep_mode(); } #define LCD_FIRST_OPEN 0 #define LCD_OPEN 1 #define LCD_OFF 2 #define ALWAYSPOWER 0 #define BATPOWER 1 //·µ»Øbit1=1±êʶµçÔ´¼ü°´Ï bit2=1 ±íʾÓÒ¼ü bit3=1±íʾ×ó¼ü £¬¿ÉÒÔͬʱÓÐЧ u8 menu_key_show(u8 * key_lcd_on_flag) { u8 key_down_flag = 0; u32 key,key4; u8 keynum; u8 key_flag; key_flag = 0; /*°´¼üģʽ¶ÁÈ¡*/ key = Get_key(); key4 = get_key4(); /*Ö÷ÒªÓÃÓÚ±íʾ°´¼üµÄ³ÖÐøÊ±¼ä*/ if( ((key>> 16 ) & 0x11) == 0) //KEY3£¬ÓҲఴ¼ü£¬µçÔ´¼ü { if(menu_data.ble_cnt < 200) { menu_data.ble_cnt ++; } key_down_flag |= 1; *key_lcd_on_flag = 1; key_flag |= 0x04; } else { menu_data.ble_cnt = 0; //key_down_flag = 0; } if( ((key >> 8) & 0x11) ==0 ) //KEY2£¬Öм䰴¼ü£¬ÓÒ·½Ïò¼ü { keynum |= KEY_NEXT; key_flag |= 0x02; } else { keynum &= ~KEY_NEXT; menu_data.right_key_cnt = 0; } if( ((key ) & 0x11) ==0) //KEY1£¬×ó²à°´¼ü { keynum |= KEY_RETURN; key_flag |= 0x01; } else { keynum &= ~KEY_RETURN; } if(key_flag == 2) { menu_data.right_key_cnt++; if(menu_data.right_key_cnt == 10) { if(menu_data.show_mode == 0) { menu_data.show_mode = 1; menu_data.key_num = SV_HV_MENU; } else if(menu_data.show_mode == 1) { menu_data.show_mode = 0; menu_data.key_num = BK_SH_MENU; } } } if(key_flag == 0x04)//µçÔ´ { Bat_Test_Para.BAT_Test_Key_Flag =1; Valve_control_parm.Trigger_check_valve_status_flag =1; menu_data.power_key_cnt++; } else { menu_data.power_key_cnt = 0; } if(key_flag == 0x05)//×ó+µçÔ´ { //¿ª·§ // Valve_Open(); ValveCloseIdTypeSet(ALARM_ID_OP_VALVE_KEY,VALVE_ACTION_OPEN); // Valve_control_parm.ValveCloseID = 0; // Valve_control_parm.ValveCloseType = 0; // Valve_control_parm.ValveCloseClass = 0; // Valve_control_parm.Valve_Status = VALVE_OP; // Valve_control_parm.OpenValveAuthorizeFLAG = 1; } if(key_flag == 0x06)//ÓÒ+µçÔ´ { //¹Ø·§ // Valve_Close(); ValveCloseIdTypeSet(ALARM_ID_CL_VALVE_KEY,VALVE_ACTION_CLOSE_UNLOCK); } if(key_flag == 0x03)//×óÓÒ·½Ïò¼üÒ»Æð°´Ï { menu_data.combo_key_cnt++; /*×óÓÒÒ»Æð°´1Ã룬¿ªÆôGPRSÒ»¼üÉÏ´«¹¦ÄÜ*/ /*×óÓÒÒ»Æð°´9Ãë£¬ÖØÖÃµç³ØÊ±¼ä*/ if(menu_data.combo_key_cnt == 1) { #ifdef THIRD_TELECOM_OPEN gprs_control_g_third.Key_send_data_handle_flag = 1; #else gprs_control_g_sizhu.Key_send_data_handle_flag =1; #endif } else if(menu_data.combo_key_cnt == 9) { Bat_Test_Para.lith_bat_replace_flag =1; //menu_data.combo_key_cnt = 0; } }else { menu_data.combo_key_cnt = 0; } /*???????????*/ if((keynum & KEY_NEXT) == KEY_NEXT) { key_down_flag |= 0x02; /*????*/ if(menu_data.show_mode == 0) { if( menu_data.key_num >= GK_SH_MENU) { menu_data.key_num = BK_SH_MENU; }else { menu_data.key_num ++; menu_data.key_num = GetKeyNum(KEY_NEXT,menu_data.key_num); } } else { if( menu_data.key_num >= BPS_AD_MENU) { menu_data.key_num = SV_HV_MENU; }else { menu_data.key_num ++; } } } if((keynum & KEY_RETURN) == KEY_RETURN) { key_down_flag |= 0x04; if(menu_data.show_mode == 0) { if( menu_data.key_num == BK_SH_MENU) { menu_data.key_num = GK_SH_MENU; }else { menu_data.key_num --; menu_data.key_num = GetKeyNum(KEY_RETURN,menu_data.key_num); } } else { if( menu_data.key_num ==SV_HV_MENU) { menu_data.key_num = BPS_AD_MENU; }else { menu_data.key_num --; } } } if(key_down_flag != 0) { menu_data.system_tick = 0; } else { if(menu_data.system_tick < 200) menu_data.system_tick ++; } ///jlcÇ¿¿ª×´Ì¬ÆÁÄ»²»Ãð if(Valve_control_parm.Force_Open_status ==1) { menu_data.system_tick = 0; } if(key4 == 1) { v20_system_para_g.system_key4_down = 0; }else { v20_system_para_g.system_key4_down ++; } return key_down_flag; } void LCD_para_hard_init(void) { menu_data.system_tick=0; menu_data.system_menulevel = LEVEL1; menu_data.key_num = MENU_ORG; menu_data.ble_cnt = 0; menu_data.gprs_one_key_up = 0; // menu_data.lcd_state = LCD_OFF; menu_data.power_key_cnt = 0; LCDSignal_flag_g.Sleep=0; LCDSignal_flag_g.LCD_first_up = 0; menu_data.system_tick=0; LCD_driver_init(); LCD_Clear(); LCD_first_power_on_up(); } void show_lcd(void) { u8 lcd_refresh_time_s; LCD_GPIO_Init(); /*ÅжÏÊÇ·ñÊÇµç³Ø¹©µç*/ // if(v20_system_para_g.system_extern_power_connect_flag == NOACTIVE) // { // LCDSignal_flag_g.PowerSignal_Select = Battery_Upon80; // }else // { // LCDSignal_flag_g.PowerSignal_Select = External_Power; // } /*Ìí¼ÓLCDÏÔʾ¾¯¸æ±êʾ*/ /*???????*/ switch(menu_data.system_menulevel) { case LEVEL1: if(cal_gas_para_g.ambient_temperature>=-5) { lcd_refresh_time_s =1; }else { //ζȵÍÓÚ-5¶È£¬Ã¿1¶ÈÔö¼Ó1ÃëË¢ÐÂʱ¼ä,¼«ÏÞ-15¶È if(cal_gas_para_g.ambient_temperature>=-15) { lcd_refresh_time_s = (u8)(-5 - cal_gas_para_g.ambient_temperature); lcd_refresh_time_s +=2; if(lcd_refresh_time_s>20) { lcd_refresh_time_s = 20; } }else { lcd_refresh_time_s = (u8)(-5 - cal_gas_para_g.ambient_temperature); lcd_refresh_time_s +=2; if(lcd_refresh_time_s>20) { lcd_refresh_time_s = 20; } //µÍÓÚ-15¶È£¬ÌáʾҺ¾§ÏÔʾ²»ÄÜÕý³£¹¤×÷ if(menu_data.LCD_tem_low_flag !=1) { menu_data.LCD_tem_low_flag = 1; system_alarm_log_data_handle(ALARM_CLASS_LCD, ALARM_HAPPEN + ALARM_ID_LCD_AMBIENT_TEM_EXCEED_LOW_LIMIT); } } } if(cal_gas_para_g.ambient_temperature>-10) { //»·¾³Î¶ȳ¬¹ý¶àÉÙ¶È£¬ÒºÏÔµÍα¨¾¯È¡Ïû if(menu_data.LCD_tem_low_flag ==1) { menu_data.LCD_tem_low_flag = 0; } } if((menu_data.lcd_refresh_cnt% lcd_refresh_time_s) ==0) { menu_leve1(); } menu_data.lcd_refresh_cnt++; break; //case LEVEL2: menu_leve2();break; case LEVEL_POWER_OFF:break; default: break; } } /****************************************** * func: sys_menu * desc: °´¼üºÍÏÔʾ¿ØÖÆ * input: none * output: none * return: none *****************************************/ void sys_menu(void) { // u8 i; u8 key_down_flag = 0; u8 key_lcd_on_key = 0; u8 system_mode = 0; if(v20_system_para_g.system_extern_power_connect_flag == 1) system_mode = ALWAYSPOWER; else system_mode = BATPOWER; // system_mode = ALWAYSPOWER; // menu_data.system_menulevel = LEVEL1; key_down_flag = menu_key_show(&key_lcd_on_key); if(system_mode == BATPOWER) { /*Õâ¸ö¹¦ÄÜÖ»ÊÇÕë¶Ôµç³Ø¹©µçÔËÐÐϵÄÇé¿ö*/ if(system_function_ctrl_word_g.fun_ctrl_word.lcd_mode == SFCW_LCD_NORMAL_SHOW_MODE) { /*¼ì²éÏÔʾ״̬*/ if(menu_data.lcd_state == LCD_OPEN) { show_lcd(); /*±íʾ°´¼ü°´ÏÂ*/ if(key_down_flag != 0) { }else { if(menu_data.system_tick > 60) { menu_data.lcd_state = LCD_OFF; LCD_first_power_on_down(); } } }else if(menu_data.lcd_state == LCD_OFF) { if(key_lcd_on_key == 1) { menu_data.lcd_state = LCD_FIRST_OPEN; LCD_first_power_on_up(); show_lcd(); } }else if(menu_data.lcd_state == LCD_FIRST_OPEN) { //LCD_reflash_init(); show_lcd(); menu_data.lcd_state = LCD_OPEN; } }else if(system_function_ctrl_word_g.fun_ctrl_word.lcd_mode == SFCW_LCD_FLOW_SHOW_MODE) //ÓÐÁ÷Á¿ÓÐÏÔʾ¹¦ÄÜ { /*¼ì²éÏÔʾ״̬*/ if(menu_data.lcd_state == LCD_OPEN) { /*±íʾ°´¼ü°´ÏÂ*/ if(key_down_flag != 0) { show_lcd(); menu_data.flow_tick = 0; }else { if((cal_gas_para_g.cvol <= 0)&&(cal_gas_para_g.fancvol <= 0)) { if((menu_data.system_tick > 60)&&(menu_data.flow_tick > 10)) { menu_data.lcd_state = LCD_OFF; LCD_first_power_on_down(); menu_data.flow_tick = 0; }else { show_lcd(); } menu_data.flow_tick ++; }else { show_lcd(); menu_data.flow_tick = 0; } } }else if(menu_data.lcd_state == LCD_OFF) { if((key_lcd_on_key == 1)||(cal_gas_para_g.cvol > 0)||(cal_gas_para_g.fancvol > 0))//°´¼ü´¥·¢»òÕßСÁ÷Á¿´¥·¢ÏÔʾ { menu_data.lcd_state = LCD_FIRST_OPEN; LCD_first_power_on_up(); show_lcd(); } }else if(menu_data.lcd_state == LCD_FIRST_OPEN) { //LCD_reflash_init(); show_lcd(); menu_data.lcd_state = LCD_OPEN; } }else if(system_function_ctrl_word_g.fun_ctrl_word.lcd_mode == SFCW_LCD_ALWAYS_SHOW_MODE)//ÏÔʾ³£ÏÔʾ { /*¼ì²éÏÔʾ״̬*/ if(menu_data.lcd_state == LCD_OPEN) { /*³¤ÏÔ״̬Ï ½øÈë²éѯģʽ 60sÄÚÎÞ°´¼ü×Ô¶¯ ÇлØÕý³£ÏÔʾģʽ*/ if(menu_data.system_tick > 60 && menu_data.show_mode == 1) { menu_data.show_mode = 0; menu_data.key_num = BK_SH_MENU; } show_lcd(); }else if(menu_data.lcd_state == LCD_OFF) { menu_data.lcd_state = LCD_FIRST_OPEN; LCD_first_power_on_up(); show_lcd(); }else if(menu_data.lcd_state == LCD_FIRST_OPEN) { //LCD_reflash_init(); show_lcd(); menu_data.lcd_state = LCD_OPEN; } } }else { /*¼ì²éÏÔʾ״̬*/ if(menu_data.lcd_state == LCD_OPEN) { /*³¤ÏÔ״̬Ï ½øÈë²éѯģʽ 60sÄÚÎÞ°´¼ü×Ô¶¯ ÇлØÕý³£ÏÔʾģʽ*/ if(menu_data.system_tick > 60 && menu_data.show_mode == 1) { menu_data.show_mode = 0; menu_data.key_num = BK_SH_MENU; } show_lcd(); }else if(menu_data.lcd_state == LCD_OFF) { menu_data.lcd_state = LCD_FIRST_OPEN; LCD_first_power_on_up(); show_lcd(); }else if(menu_data.lcd_state == LCD_FIRST_OPEN) { //LCD_reflash_init(); show_lcd(); menu_data.lcd_state = LCD_OPEN; } } } /************************************** *º¯Êý¹¦ÄÜ£ºÅжϰ´¼üµÄʱºòÐè²»ÐèÒªÌø¹ýijҳ²»ÏÔʾ *KeyType£º0x02×ó¼ü 0x04ÓÒ¼ü *KeyNum : °´¼üÒ³Âë **************************************/ uint8_t GetKeyNum(uint8_t KeyType,uint8_t KeyNum) { if(KeyType == KEY_RETURN) { switch(KeyNum) { case YE_DJ_MENU: if(system_function_ctrl_word_g.fun_ctrl_word.show_balance == 1 && system_function_ctrl_word_g.fun_ctrl_word.show_price == 1) { KeyNum = KeyNum - 1; } break; default: break; } } else if(KeyType == KEY_NEXT) { switch(KeyNum) { case YE_DJ_MENU: if(system_function_ctrl_word_g.fun_ctrl_word.show_balance == 1 && system_function_ctrl_word_g.fun_ctrl_word.show_price == 1) { KeyNum = KeyNum + 1; } break; default: break; } } return KeyNum; } uint16_t getTimeDiff(u32 timeIn) { u32 CurrentTimeMin = BCD2HEX(Time_BCD_g.hour)*60 + BCD2HEX(Time_BCD_g.min); if(CurrentTimeMin >= timeIn) { return (CurrentTimeMin - timeIn); } else { return (CurrentTimeMin + 1440 - timeIn); } } /******************************** *¼ì¶¨Ä£Ê½´¦Àí£¬°üÀ¨½øÈë¡¢Í˳ö¡¢ * ********************************/ void calibration_mode_process() { if(v20_system_para_g.system_extern_power_connect_flag == ACTIVE && v20_system_para_g.medium_status == 1) { if(menu_data.power_key_cnt == 10 && menu_data.system_tick <= 60) { if(cal_gas_para_g.calibration_mode == 0) { cal_gas_para_g.calibration_mode = 1; menu_data.in_calibration_time_min= BCD2HEX(Time_BCD_g.hour)*60 + BCD2HEX(Time_BCD_g.min); } else { cal_gas_para_g.calibration_mode = 0; menu_data.in_calibration_time_min=0; } } } else { menu_data.power_key_cnt = 0; cal_gas_para_g.calibration_mode = 0; menu_data.in_calibration_time_min=0; } if(work_flow_average_g.flow_0_flag && cal_gas_para_g.calibration_mode) { if(menu_data.flow_0_first_flag == 0) { menu_data.flow_0_first_flag = 1; menu_data.flow_0_time_min = BCD2HEX(Time_BCD_g.hour)*60 + BCD2HEX(Time_BCD_g.min); } } else { menu_data.flow_0_time_min = 0; menu_data.flow_0_first_flag = 0; } if(cal_gas_para_g.calibration_mode == 1) { if((menu_data.flow_0_time_min != 0) && (getTimeDiff(menu_data.flow_0_time_min) >= 120)) { cal_gas_para_g.calibration_mode = 0; } if((menu_data.in_calibration_time_min != 0) && (getTimeDiff(menu_data.in_calibration_time_min) >= 480)) { cal_gas_para_g.calibration_mode = 0; } } }