#include "1lcd.h" #include "devicegpioinit.h" #include "para.h" #include "1gprs.h" #include "1ValveControl.h" #include "1billing.h" u8 LCD_Buffer[SEGNUM] = {0}; //u8 LCD_Read_buffer[34] = {0}; u8 LCD_Menu_Level = 0; u8 k1 =0 ,k2 =0; void lcd_init(void) { // u8 i,j; LCD_Power_ON; LCD_GPIO_Init(); LCD_driver_init(); LCD_Clear(); // LCD_Power_OFF; } /*********************************************************************** * Ãû³Æ£ºLCD_driver_init( ) * ¹¦ÄÜ£ºLCDÇý¶¯³õʼ»¯ ********************************************************************** */ void LCD_driver_init(void) { static unsigned char i =0; static unsigned short Temp=0; LCD_CS_LOW; //----·¢Ëͳõʼ»¯ÃüÁî×Ö100£¬±íÃ÷ÊÇдÃüÁî------- Temp=LCD_COMMAND; delay_us(1); for(i=0;i<3;i++) { LCD_WR_LOW; (Temp&(0x04>>i))? LCD_DATA_HIGH:LCD_DATA_LOW; delay_us(2); LCD_WR_HIGH; delay_us(2); } //-----System clock source, on-chip RC oscillator---- Temp=0x030;//Temp=0x18;// for(i=0;i<9;i++) { LCD_WR_LOW; (Temp&(0x100>>i))? LCD_DATA_HIGH:LCD_DATA_LOW; delay_us(2); LCD_WR_HIGH; delay_us(2); } // LCD_WR_LOW; //-----¿Õ·¢1λX----- // delay_us(3); // LCD_WR_HIGH; // delay_us(3); //-----Turn on system oscillator----- Temp=0x002;//Temp=0x01;// for(i=0;i<9;i++) { LCD_WR_LOW; (Temp&(0x100>>i))? LCD_DATA_HIGH:LCD_DATA_LOW; delay_us(2); LCD_WR_HIGH; delay_us(2); } // LCD_WR_LOW; //-----¿Õ·¢1λX----- // delay_us(3); // LCD_WR_HIGH; // delay_us(3); //-----Turn on LCD display----- Temp=0x006;//Temp=0x03;// for(i=0;i<9;i++) { LCD_WR_LOW; (Temp&(0x100>>i))? LCD_DATA_HIGH:LCD_DATA_LOW; delay_us(2); LCD_WR_HIGH; delay_us(2); } // LCD_WR_LOW; //-----¿Õ·¢1λX----- // delay_us(3); // LCD_WR_HIGH; // delay_us(3); delay_us(1); LCD_CS_HIGH; //----CSÖøߣ¬Æ¬Ñ¡½ûÖ¹ } /*********************************************************************** * Ãû³Æ£ºLCD_Display( ) * ¹¦ÄÜ£º½«ÏÔʾ»º´æÖеÄÊý¾Ý·¢Ë͸øLCD£¬ÁîÆäÏÔʾ³ö¶ÔÓ¦×Ö·û¡¢Êý×Ö¡£ ********************************************************************** */ void LCD_Display(u8 *RAM) { u8 i,j; LCD_CS_LOW; //ʹÄÜ delay_us(1); for(i=0;i<3;i++) { LCD_WR_LOW; (LCD_WriteModeID&(0x04>>i))? LCD_DATA_HIGH:LCD_DATA_LOW; // delay_us(1); LCD_WR_HIGH; //delay_us(1); } for(i=0;i<=6;i++) { LCD_WR_LOW; // delay_us(1); LCD_DATA_LOW; // delay_us(1); LCD_WR_HIGH; } for(j=0;j 99999999) { if(number_div > 9999999999) { number_div = 9999999999; } LCD_ClearSeg(_LCD_POINT1); yu_temp = number_div % 10; number_div = number_div / 10; while(number_div > 0) { array[9 - num_array] = yu_temp; num_array ++; yu_temp = number_div % 10; number_div = number_div / 10; } array[9 - num_array] = yu_temp; num_array ++; for(i = 0; i < (10 - num_array); i ++) { LCD_ClearDigit((i+1)); } for(i = (10- num_array); i < 10; i ++) { LCD_DisplayDigit((i+1),array[i]); } } else { /*ÕûÊý²¿·Ö¼ÆËã*/ yu_temp = number_div % 10; number_div = number_div / 10; while(number_div > 0) { array[7 - num_array] = yu_temp; num_array ++; yu_temp = number_div % 10; number_div = number_div / 10; } array[7 - num_array] = yu_temp; num_array ++; /*СÊý²¿·Ö¼ÆËã*/ number_div = (number * 10); array[8] =(u8) (number_div % 10); number_div = (number * 100); array[9] =(u8) (number_div % 10); /**/ LCD_DisplaySeg(_LCD_POINT1); for(i = 0; i < (8 - num_array); i ++) { LCD_ClearDigit((i+1)); } for(i = (8- num_array); i < 10; i ++) { LCD_DisplayDigit((i+1),array[i]); } } if(show_type == 0) { LCD_DisplaySeg(_LCD_TOTAL); LCD_DisplaySeg(_LCD_UP_N); LCD_DisplaySeg(_LCD_M3); //LCD_ClearSeg(_LCD_P); } else { LCD_DisplaySeg(_LCD_UP_N); LCD_DisplaySeg(_LCD_M3); LCD_DisplaySeg(_LCD_P); } } //*show_type : ÏÔʾÀàÐÍ 1£º¹¤¿ö£¬0£º±ê¿ö void LCD_DisplaysecondLine(u8 show_type,double number) { long long number_div; u8 array[9]={0}; u8 div_temp,yu_temp; u8 num_array; u8 i; if(number<0) { number = -number; LCD_DisplaySeg(_LCD_FUSHU); } else { // LCD_ClearSeg(_LCD_FUSHU); } num_array = 0; number_div = (long long) number; if(number_div > 9999999) { LCD_ClearSeg(_LCD_POINT2); if(number_div>999999999) { number_div = 999999999; } yu_temp = number_div % 10; number_div = number_div / 10; while(number_div > 0) { array[8 - num_array] = yu_temp; num_array ++; yu_temp = number_div % 10; number_div = number_div / 10; } array[8 - num_array] = yu_temp; num_array ++; for(i = 0; i < (9 - num_array); i ++) { LCD_ClearDigit((i+11)); } for(i = (9- num_array); i < 9; i ++) { LCD_DisplayDigit((i+11),array[i]); } }else { /*ÕûÊý²¿·Ö¼ÆËã*/ yu_temp = number_div % 10; number_div = number_div / 10; while(number_div > 0) { array[6 - num_array] = yu_temp; num_array ++; yu_temp = number_div % 10; number_div = number_div / 10; } array[6 - num_array] = yu_temp; num_array ++; /*СÊý²¿·Ö¼ÆËã*/ number_div = (number * 10); array[7] =(u8) (number_div % 10); number_div = (number * 100); array[8] =(u8) (number_div % 10); /**/ for(i = 0; i < (7 - num_array); i ++) { LCD_ClearDigit((i+11)); } for(i = (7- num_array); i < 9; i ++) { LCD_DisplayDigit((i+11),array[i]); } LCD_DisplaySeg(_LCD_POINT2); } LCD_DisplaySeg(_LCD_MARGIN); if(show_type == 0) { LCD_DisplaySeg(_LCD_DOWN_NM3); LCD_ClearSeg(_LCD_YUAN); } else if(show_type ==1) { LCD_DisplaySeg(_LCD_YUAN); LCD_ClearSeg(_LCD_DOWN_NM3); } } void LCD_DisplayThirdLine(float number) { u32 number_div,number_10000; u8 array[4]={0}; u8 div_temp,yu_temp; u8 num_array; u8 i; if(number>99.99) { number = 99.99; } number_10000 = number*10000; //ÏÈ*10000ÅжÏβÊýÊDz»ÊÇ99£¬ÊDZÜÃ⸡µãÊý¾«¶È¶ÔÕûÊýµÄÓ°Ïì¡£±ÈÈç4.7. ʵ¼Ê¸¡µãÊý¿ÉÄÜÊÇ4.699999. if((number_10000%100)==99) { number_10000 = number_10000 +1; } num_array = 0; number_div = number_10000 /10000; if(number_div > 100) number_div = 99; /*ÕûÊý²¿·Ö¼ÆËã*/ yu_temp = number_div % 10; number_div = number_div / 10; while(number_div > 0) { array[1 - num_array] = yu_temp; num_array ++; yu_temp = number_div % 10; number_div = number_div / 10; } array[1 - num_array] = yu_temp; num_array ++; /*СÊý²¿·Ö¼ÆËã*/ number_div = number_10000 / 100; yu_temp = number_div % 10; number_div = number_div / 10; array[3] = yu_temp; yu_temp = number_div % 10; array[2] = yu_temp; /**/ for(i = 0; i < (2 - num_array); i ++) { LCD_ClearDigit((i+20)); } for(i = (2- num_array); i < 4; i ++) { LCD_DisplayDigit((i+20),array[i]); } LCD_DisplaySeg(_LCD_UNIT_PRICE); LCD_DisplaySeg(_LCD_POINT3); LCD_DisplaySeg(_LCD_YUAN_M3); } void show_time(u8 hour, u8 minute) { u8 div_temp,yu_temp; u8 array[4]; u8 i; array[1] = hour % 10; array[0] = hour / 10; array[3] = minute % 10; array[2] = minute / 10; for(i = 0; i < 4; i ++) { LCD_DisplayDigit((i+28),array[i]); } // LCD_DisplaySeg(_LCD_POINT5); } void show_error(u8 error) { // u8 div_temp,yu_temp; // u8 array[2]; // u8 i; LCD_DisplayDigit(28,error); // array[1] = error % 10; // array[0] = error / 10; // // for(i = 0; i < 2; i ++) // { // LCD_DisplayDigit((i+28),array[i]); // } } void show_error_sym(u8 sym_index) { switch(sym_index) { case SIZHULOG: LCD_DisplaySeg(_LCD_SIZHULOG); break; case NET_SIG: LCD_DisplaySeg(_LCD_WIFI); break; case POWER_CONNECT: LCD_DisplaySeg(_LCD_DISCONNECT); break; case WARNING_SYM: LCD_DisplaySeg(_LCD_WARRING); break; default: break; } } void clear_error_sym(u8 sym_index) { switch(sym_index) { case SIZHULOG: LCD_ClearSeg(_LCD_SIZHULOG); break; case NET_SIG: LCD_ClearSeg(_LCD_WIFI); break; case POWER_CONNECT: LCD_ClearSeg(_LCD_DISCONNECT); break; case WARNING_SYM: LCD_ClearSeg(_LCD_WARRING); break; default: break; } } void show_bat_sym(u8 bat_cap) { LCD_DisplaySeg(_LCD_BATTERY_SHELL); switch(bat_cap) { case BAT_CAP_0: LCD_ClearSeg(_LCD_BATTERY_4); LCD_ClearSeg(_LCD_BATTERY_3); LCD_ClearSeg(_LCD_BATTERY_2); LCD_ClearSeg(_LCD_BATTERY_1); break; case BAT_CAP_1: LCD_DisplaySeg(_LCD_BATTERY_4); LCD_ClearSeg(_LCD_BATTERY_3); LCD_ClearSeg(_LCD_BATTERY_2); LCD_ClearSeg(_LCD_BATTERY_1); break; case BAT_CAP_2: LCD_DisplaySeg(_LCD_BATTERY_4); LCD_DisplaySeg(_LCD_BATTERY_3); LCD_ClearSeg(_LCD_BATTERY_2); LCD_ClearSeg(_LCD_BATTERY_1); break; case BAT_CAP_3: LCD_DisplaySeg(_LCD_BATTERY_4); LCD_DisplaySeg(_LCD_BATTERY_3); LCD_DisplaySeg(_LCD_BATTERY_2); LCD_ClearSeg(_LCD_BATTERY_1); break; case BAT_CAP_4: LCD_DisplaySeg(_LCD_BATTERY_4); LCD_DisplaySeg(_LCD_BATTERY_3); LCD_DisplaySeg(_LCD_BATTERY_2); LCD_DisplaySeg(_LCD_BATTERY_1); break; default: break; } } void LCD_DisplaySignal(u8 signal) //µ¥×Ö·ûÏÔʾ { LCD_DisplaySeg(signal); LCD_Display(LCD_Buffer); } u16 kkk = 300; void LCD_DisplayAll(void) //µ¥×Ö·ûÏÔʾ { u16 i; // double num; // u8 data = 8; //num = 123.45; // LCD_Power_ON; //LCD_Clear(); for(i=0;i5.0) { LCD_DisplaySeg(_LCD_BATTERY_4); } if(LLJ_data_g.Lith_Battery_V>5.5) { LCD_DisplaySeg(_LCD_BATTERY_3); } if(LLJ_data_g.Lith_Battery_V>6.3) { LCD_DisplaySeg(_LCD_BATTERY_2); } if(LLJ_data_g.Lith_Battery_V>6.9) { LCD_DisplaySeg(_LCD_BATTERY_1); } LCD_DisplaySeg(_LCD_LITH); } else { if(LLJ_data_g.Alka_Battery_V>5.0) { LCD_DisplaySeg(_LCD_BATTERY_4); } if(LLJ_data_g.Alka_Battery_V>5.4) { LCD_DisplaySeg(_LCD_BATTERY_3); } if(LLJ_data_g.Alka_Battery_V>5.8) { LCD_DisplaySeg(_LCD_BATTERY_2); } if(LLJ_data_g.Alka_Battery_V>5.95) { LCD_DisplaySeg(_LCD_BATTERY_1); } LCD_DisplaySeg(_LCD_ALKA); } if(gprs_protocol_header.Power_type==2) //ÓÐÍâµç { LCD_DisplaySeg(_LCD_EXPOWER); } else { LCD_ClearSeg(_LCD_EXPOWER); } /*warrning*/ // if(system_alarm.alarm_AlkaPowerLow_LCDFLAG==1) // { // LCD_DisplaySeg(_LCD_WARRING); // LCD_DisplayDigit(28,2); // } // // if(system_alarm.alarm_LithPowerLow_LCDFLAG==1) // { // LCD_DisplaySeg(_LCD_WARRING); // LCD_DisplayDigit(28,3); // } // if(system_alarm.alarm_Cap_OPEN_LCDFALG==1) // { // LCD_DisplaySeg(_LCD_WARRING); // LCD_DisplayDigit(28,8); // } if(system_alarm.alarm_E2RW_read_abnormal_FLAG==1) { LCD_DisplaySeg(_LCD_WARRING); LCD_DisplayDigit(28,5); } if(system_alarm.alarm_E2RW_write_abnormal_FLAG==1) { LCD_DisplaySeg(_LCD_WARRING); LCD_DisplayDigit(28,6); } if((parameter_bil.cDataObtainType & RS485_MODE)== RS485_MODE) { if(system_alarm.alarm_Sample_LCDFLAG==1) { LCD_DisplaySeg(_LCD_WARRING); LCD_DisplayDigit(28,2); } } if((Settlement_Para.RS485SettlementFlag ==1)&&(device_Parm.AccountStatus == 1)) //ÐèÒªRS485ºËËãÇÒÐèÒªÆôÓÃÖ®ºó { if(Settlement_Para.RS485BilDataReadableFlag == 0) //ÎÞ»ùÊý£¬±¨¾¯ÌáÐÑ { LCD_DisplaySeg(_LCD_WARRING); LCD_DisplayDigit(28,3); } } if((system_alarm.alarm_RS485_Abnormal_Small_Reading_FLAG==1) && ((parameter_bil.cDataObtainType & RS485_MODE)== RS485_MODE)) { LCD_DisplaySeg(_LCD_WARRING); LCD_DisplayDigit(28,7); } if(system_alarm.alarm_Pulse_Broken_LCDFLAG==1) { LCD_DisplaySeg(_LCD_WARRING); LCD_DisplayDigit(28,1); } if(system_alarm.alarm_Gas_Leak_LCDFLAG==1) { LCD_DisplaySeg(_LCD_WARRING); LCD_DisplayDigit(28,4); } // if(system_alarm.alarm_TEM_LCDFLAG==1) // { // LCD_DisplaySeg(_LCD_WARRING); // LCD_DisplayDigit(28,6); // } // // if(system_alarm.alarm_PRE_LCDFLAG==1) // { // LCD_DisplaySeg(_LCD_WARRING); // LCD_DisplayDigit(28,7); // } // if((system_alarm.alarm_Balance_Small_LCDFLAG==1)&&(device_Parm.AccountStatus== 0x01) ) // { // LCD_DisplaySeg(_LCD_WARRING); // LCD_DisplayDigit(28,8); // } if(parameter_bil.cDataObtainType == RS485_MODE) { LCD_DisplayfisrtLine( 0,Settlement_Para.fCumulativeGasUsage); //µ¥485ģʽµÚÒ»ÐÐÖ»ÏÔʾ×ÜÁ¿£¬²»ÏÔʾÂö³åϵÊý } else { if((LCD_Menu_Level&0x02) ==0)//ÏÔʾ×ÜÓÃÆøÁ¿ { LCD_DisplayfisrtLine( 0,Settlement_Para.fCumulativeGasUsage); } else if((LCD_Menu_Level&0x02) ==0x02)//ÏÔʾÂö³åϵÊý { LCD_DisplayfisrtLine( 1,parameter_bil.fPulseCoefficient); } } if(device_Parm.show_balance_flag) { LCD_DisplaysecondLine( 0,Settlement_Para.fBalance / parameter_bil.fSingleBillingFee ); } else { if((LCD_Menu_Level&0x01) ==0x00)//ÏÔʾʣÓàÆøÁ¿ { LCD_DisplaysecondLine( 0,Settlement_Para.fBalance / parameter_bil.fSingleBillingFee ); } else if((LCD_Menu_Level&0x01) ==0x01)//ÏÔʾʣÓà½ð¶î { LCD_DisplaysecondLine( 1,Settlement_Para.fBalance); } } if(!device_Parm.show_price_flag) { LCD_DisplayThirdLine(parameter_bil.fSingleBillingFee); } if(device_Parm.TestStatus==1) { LCD_DisplayDigit(27,0); } LCD_Clear(); //delay_ms(1); // LCD_Display(LCD_Buffer); } void LCD_ClearSignal(u8 signal) { LCD_ClearSeg(signal); LCD_Display(LCD_Buffer); }