#include "msp430G2553.h" #include "math.h" #define Clear 0x00 #define D4 BIT2 // LCD bits definition #define D5 BIT3 #define D6 BIT4 #define D7 BIT5 #define RS BIT0 #define EN BIT1 #define preset_volt 5.0 //(V) Set the INITIAL VOLTAGE HERE #define preset_cur 1.0 //(A) Set the INITIAL CURRENT HERE #define maxreference_volt 30 //(V) Maximum voltage (limit) that can be set to output #define maxreference_cur 2.5 //(A) Maximum current (limit) that can be set to output #define pwm_period 1900 // PWM Period calculation example 700*(1/16,000,000) = 43.75us / 22.857 KHz int array_div_mod[4]; long IntVolt,IntCur; int temp2,i,n,delay,tenthsc,unitsc,decimal1c,decimal2c,tenthsv,unitsv,decimal1v,decimal2v,menu,menu_ps,buton,rotE,voltage_freeze,constant_cur; float med1,med2,med3,med4,med5,med6,med7,med8,med9,med1c,med2c,med3c,sum,average,sumc; float averagec,volt_val_c,cur_val_c,volt_val,cur_val,ref_temp_val,reference_volt,reference_cur; float convert_volt(float),convert_cur(float); float bucla_div_mod(float); void move_cursor_xy(int,int); void configure_lcd(int); void display_char(unsigned char); int debouncing_la_actionare_rotire(int); int debouncing_la_revenire_rotire(int); int debouncing_but(int); int delay_time(int); int delay_long(int); int create_custom_char(int); int strobe_data_p2(int); int cls(int); int draw_Logo(int); int draw_main_menu_screen(int); int draw_USB_5V_screen(int); int draw_AGM_charger_screen(int); int draw_Li_ion_screen(int); int draw_power_supply_screen(int); int draw_sub_ps(int); int draw_sub_ps_adv(int); int draw_sub_ps_adi(int); int draw_sub_ps_mm(int); int draw_sub_ps_ret(int); void main(void){ WDTCTL = WDTPW + WDTHOLD; // disable watch dog timer DCOCTL = CALDCO_16MHZ; // set internal oscillator at 16MHz BCSCTL1 = CALBC1_16MHZ; // set internal oscillator at 16MHz P1DIR = 0x0C; // 0000 1100 P2DIR = 0xFF; P1OUT = 0x00; P2OUT = 0x00; //--------------------config ADC ADC10CTL1 |= INCH_6; //continuous sample mode, CH6 // CONSEQ1 + INCH_6 ADC10CTL0 |= ADC10SHT_2 + ADC10ON + MSC; //sample and hold time, adc on, cont. sample ADC10AE0 |= 0x40; // select channel A6 ADC10CTL0 |= ADC10SC + ENC; // start conversions //--------------------config PWM P1SEL |= BIT2; // P1.2 Select as TA0 output TA0CCR0 = pwm_period; TA0CCTL1 = OUTMOD_7; // TA0CCR1 reset/set output mode TA0CCR1 = 0; // TA0CCR1 PWM duty cycle TA0CTL = TASSEL_2 + MC_1; // SMCLK, up mode voltage_freeze = 1; delay = 5000; reference_volt = preset_volt; reference_cur = preset_cur; menu = 0; configure_lcd(0); draw_Logo(0); delay = 2000; for(;;) { do{ //==================================== select menu loop ============================== if (menu == 0){ cls(0); draw_main_menu_screen(0); } if (menu == 1){ cls(0); draw_USB_5V_screen(0); } if (menu == 2){ cls(0); draw_power_supply_screen(0); } if (menu == 3){ cls(0); draw_AGM_charger_screen(0); } if (menu == 4){ cls(0); draw_Li_ion_screen(0); } rotE = debouncing_la_actionare_rotire(rotE); if((rotE == 2) and (menu < 4)){ menu = menu+1; } if((rotE == 1) and (menu > 1)){ menu = menu-1; } rotE = debouncing_la_revenire_rotire(rotE); }while ( buton != 0 ); if ( menu == 2 ) { //========================== Power supply menu ============================ cls(0); draw_sub_ps(0); do{ n = 10; //------------ voltage regulating loop do{ //-------------------------------------------------read voltage ADC10CTL1 &= ~(INCH_7); //disable continuous sample mode, CH7 ADC10CTL1 |= INCH_6; //continuous sample mode, CH6 ADC10AE0 |= 0x40; // select channel A6 //0100 0000 ADC10CTL0 |= ADC10SC + ENC; // start conversions delay_time(50); IntVolt = ADC10MEM; //-------------------------------------------------read current ADC10CTL0 &= ~(ADC10SC + ENC); // stop conversions ADC10CTL1 &= ~(INCH_6); //disable continuous sample mode, CH6 ADC10CTL1 |= INCH_7; //continuous sample mode, CH7 ADC10AE0 |= 0x80; // select channel A7 //1000 0000 ADC10CTL0 |= ADC10SC + ENC; // start conversions delay_time(50); IntCur = ADC10MEM; ADC10CTL0 &= ~(ADC10SC + ENC); // stop conversions volt_val_c = convert_volt (IntVolt); cur_val_c = convert_cur (IntCur); //---------------------------------------------- average voltage if (IntVolt > 0x00){ med1 = med2; med2 = volt_val_c; } sum = med1+med2; average = sum/2; volt_val = average; //--------------------------------------------- average current if (IntCur > 0x00){ med1c = med2c; med2c = med3c; med3c = cur_val_c; } sumc = med1c+med2c+med3c; averagec = sumc/3; cur_val = averagec; //---------------------------------- adjusting voltage PWM according to feedback // histerezis of 0.05A and 0.1V for adjusting and of 0.06V for freeze //adjusting loop before voltage freeze if(voltage_freeze == 0){ if ((volt_val < (reference_volt - 0.05)) and (cur_val < (reference_cur - 0.025))) { if (TA0CCR1 < (pwm_period - 2)){ TA0CCR1 = TA0CCR1 + 1; } } if ((volt_val > (reference_volt + 0.05)) or (cur_val > (reference_cur + 0.025))) { if (TA0CCR1 > 2 ){ TA0CCR1 = TA0CCR1 - 1; } } if ((volt_val < (reference_volt + 0.05)) and (volt_val > (reference_volt - 0.01))){ voltage_freeze = 1; } } //adjusting loop during constant current if((voltage_freeze == 1)and(constant_cur == 1)){ voltage_freeze = 0; } n--; }while (n != 0); //----------------------------- Loop for div/mod Voltage Values bucla_div_mod(volt_val); tenthsv = array_div_mod[0]; unitsv = array_div_mod[1]; decimal1v = array_div_mod[2]; decimal2v = array_div_mod[3]; //------------------------------ Loop for div/mod Current Values bucla_div_mod(cur_val); tenthsc = array_div_mod[0]; unitsc = array_div_mod[1]; decimal1c = array_div_mod[2]; decimal2c = array_div_mod[3]; //------------------------------------------ display values move_cursor_xy(3,1); display_char(tenthsv + 0x30); display_char(unitsv + 0x30); display_char('.'); display_char(decimal1v + 0x30); move_cursor_xy(12,1); display_char(unitsc + 0x30); display_char('.'); display_char(decimal1c + 0x30); display_char(decimal2c + 0x30); if (cur_val > (reference_cur - 0.009)){ //drawing CC symbol constant_cur = 1; move_cursor_xy(15,2); display_char('c'); display_char('C'); } else{ constant_cur = 0; move_cursor_xy(15,2); display_char('c'); display_char('V'); } // ------------------------ submenu loop - Power supply temp2 = P1IN; buton = (temp2 &= 0x10); if (buton == 0){ // menuchange = 0; menu_ps = 1; buton = debouncing_but(buton); do{ if (menu_ps == 1){ draw_sub_ps_adv(0); } if (menu_ps == 2){ draw_sub_ps_adi(0); } if (menu_ps == 3){ draw_sub_ps_mm(0); } if (menu_ps == 4){ draw_sub_ps_ret(0); } // do{ rotE = debouncing_la_actionare_rotire(rotE); if((rotE == 2) and (menu_ps < 4)){ menu_ps = menu_ps+1; // menuchange = 1; } if((rotE == 1) and (menu_ps > 1)){ menu_ps = menu_ps-1; // menuchange = 1; } rotE = debouncing_la_revenire_rotire(rotE); // }while ((menuchange == 0) and (buton != 0)); move_cursor_xy(1,2); // deleting the second row i=16; do{ display_char(' '); i--; }while(i!=0); // buton = P1IN; temp2 = P1IN; buton = (temp2 &= 0x10); }while(buton != 0); } if((menu_ps == 4)and(buton == 0)){ //----------------submenu Return buton = debouncing_but(buton); menu = 2; move_cursor_xy(5,2); display_char(0x00); display_char(0x01); move_cursor_xy(11,2); display_char(0x04); move_cursor_xy(17,2); } if((menu_ps == 3)and(buton == 0)){ //----------------submenu Return to main menu buton = debouncing_but(buton); menu = 0; } if((menu_ps == 1)and(buton == 0)){ //----------------submenu Voltage set buton = debouncing_but(buton); move_cursor_xy(1,2); //deleting second row i=16; do{ display_char(' '); i--; }while(i!=0); move_cursor_xy(7,1); do{ //--------loop for actual setting rotE = debouncing_la_actionare_rotire(rotE); if((rotE == 2) and (reference_volt < maxreference_volt)){ reference_volt = reference_volt+0.1; // menuchange = 1; } if((rotE == 1) and (reference_volt > 0.2)){ reference_volt = reference_volt-0.1; // menuchange = 1; } rotE = debouncing_la_revenire_rotire(rotE); voltage_freeze = 0; bucla_div_mod(reference_volt); tenthsv = array_div_mod[0]; unitsv = array_div_mod[1]; decimal1v = array_div_mod[2]; decimal2v = array_div_mod[3]; move_cursor_xy(3,1); display_char(tenthsv + 0x30); display_char(unitsv + 0x30); display_char('.'); display_char(decimal1v + 0x30); temp2 = P1IN; buton = (temp2 &= 0x10); }while(buton != 0); buton = debouncing_but(buton); move_cursor_xy(5,2); display_char(0x00); display_char(0x01); move_cursor_xy(11,2); display_char(0x04); move_cursor_xy(17,2); } if((menu_ps == 2)and(buton == 0)){ //----------------submenu Current set buton = debouncing_but(buton); move_cursor_xy(1,2); //deleting second row i=16; do{ display_char(' '); i--; }while(i!=0); move_cursor_xy(16,1); do{ //-------- loop for actual setting rotE = debouncing_la_actionare_rotire(rotE); if((rotE == 2) and (reference_cur < maxreference_cur)){ reference_cur = reference_cur+0.1; // menuchange = 1; } if((rotE == 1) and (reference_cur > 0.2)){ reference_cur = reference_cur-0.1; // menuchange = 1; } rotE = debouncing_la_revenire_rotire(rotE); bucla_div_mod(reference_cur); tenthsc = array_div_mod[0]; unitsc = array_div_mod[1]; decimal1c = array_div_mod[2]; decimal2c = array_div_mod[3]; move_cursor_xy(12,1); display_char(unitsc + 0x30); display_char('.'); display_char(decimal1c + 0x30); display_char('0'); temp2 = P1IN; buton = (temp2 &= 0x10); }while(buton != 0); buton = debouncing_but(buton); move_cursor_xy(5,2); display_char(0x00); display_char(0x01); move_cursor_xy(11,2); display_char(0x04); move_cursor_xy(17,2); } }while ( menu == 2 ) ; TA0CCR1 = 0; } // --------------------------------------- supply menu end } } //---------------------------------------------------------------------------------------------------------------------------------- //----------------- PROCEDURI ----------- PROCEDURI ----------- PROCEDURI ----------- PROCEDURI ----------- PROCEDURI ---- //---------------------------------------------------------------------------------------------------------------------------------- int delay_time (int delay){ //----------------------------------------- Delay--------------------- do delay--; while (delay != 0); return (int)(delay); } int delay_long (int){ //--------------------------------------- long Delay ------------------ int j; j = 200; do{ delay_time(delay); j--; }while (j != 0); return (int)(delay); } float convert_volt (float IntVolt){ // ------------------------Voltage conversion float voltage,ua2,raport_divizor,r2,r1; r1 = 10010; r2 = 1000; ua2 = (3.44/1024*IntVolt); raport_divizor = ((r1+r2)/r2); voltage = (ua2*raport_divizor); return (float)(voltage); } float convert_cur (float IntCur){ // ------------------------Current conversion float current,Usunt,factor_op_amp,r2_op,r1_op,rs; r1_op = 1000; r2_op = 9450; rs = 0.025; factor_op_amp = (1+(r2_op/r1_op)); Usunt = ((3.44/1024*IntCur)/factor_op_amp); current = (Usunt/rs); return (float)(current); } int debouncing_but (int){ //----------------------debouncing for sw release delay_time(delay); do{ temp2 = P1IN; buton = (temp2 &= 0x10); }while (buton == 0); return(int)( buton ); } int debouncing_la_actionare_rotire(int rotE){ //------------debouncing for encoder rotation begin delay_time(delay); do { temp2 = P1IN; rotE = (temp2 &= (BIT0 + BIT1)); temp2 = P1IN; buton = (temp2 &= 0x10); }while ((rotE == 3) and (buton != 0)); return (int)(rotE); } int debouncing_la_revenire_rotire(int rotE){ //-------debouncing for encoder rotation end delay_time(delay); do { temp2 = P1IN; rotE = (temp2 &= (BIT0 + BIT1)); temp2 = P1IN; buton = (temp2 &= 0x10); }while ((rotE != 3) and (buton != 0)); return (int)(rotE); } void configure_lcd(int){ //-----------------------------LCD-SET-AND-CONFIGURE--------------------------------------- int rep_n; rep_n = 3; do{ strobe_data_p2(D5+D4); // comand xxxxx 110000 x3 means >> 8bit, 2lines, 5x8pixel char rep_n--; }while (rep_n != 0); rep_n = 2; do{ // comand xxxxx 100000 x1 means >> 8bit, 2lines, 5x8pixel char strobe_data_p2(D5); // comand xxxxxxxxxxxxxxx means >> move right/ shift off rep_n--; }while (rep_n != 0); strobe_data_p2(D7); // comand xxxxxxxxxxxxxxx means >> move right/ shift off strobe_data_p2(0x00); // comand xxxxxxxxxxxxxxx means >> move right/ shift off strobe_data_p2(D7+D6); // comand xxxxxxxxxxxxxxxx means >> move right/ shift off strobe_data_p2(0x00); // comand xxxxxxxxxxxxxxxx means >> display/ cursor/ blinking strobe_data_p2(D7+D6+D5+D4); // comand xxxxxxxxxxxxxxx means >> display/ cursor/ blinking rep_n = 2; do{ strobe_data_p2(0x00); // comand xxxxxxxxxxxxxx means >> 8bit, 2lines, 5x8pixel char strobe_data_p2(D4); // comand xxxxxxxxxxxxxx means >> 8bit, 2lines, 5x8pixel char rep_n--; }while (rep_n != 0); create_custom_char(0); } float bucla_div_mod(float ref_temp_val){ //------------------------------ Loop for div/mod ------------ int tenths,units,decimal1,decimal2; tenths = 0; units = 0; decimal1 = 0; decimal2 = 0; i = 27; do{ // div_/mod_ loop if ( ref_temp_val >= 10 ){ ref_temp_val = ref_temp_val - 10; tenths = tenths + 1; } i--; }while (i != 0); i = 10; ref_temp_val = ref_temp_val*10; do{ // div_/mod_ loop if ( ref_temp_val >= 10 ){ ref_temp_val = ref_temp_val - 10; units = units + 1; } i--; }while (i != 0); i = 10; ref_temp_val = ref_temp_val*10; do{ // div_/mod_ loop if ( ref_temp_val >= 10 ){ ref_temp_val = ref_temp_val - 10; decimal1 = decimal1 + 1; } i--; }while (i != 0); i = 10; ref_temp_val = ref_temp_val*10; do{ // div_/mod_ loop if ( ref_temp_val >= 10 ){ ref_temp_val = ref_temp_val - 10; decimal2 = decimal2 + 1; } i--; }while (i != 0); array_div_mod[0] = tenths; array_div_mod[1] = units; array_div_mod[2] = decimal1; array_div_mod[3] = decimal2; return (int)(array_div_mod); } void move_cursor_xy (int x,int y){ // ---------------------------- Display procedure------------ char adress,temp; x = x - 1; y = y - 1; adress = (128 + x + (64 * y)); //internal map correction temp = adress; P2OUT = Clear ; // R/W = 0 (write mode) RS = 0 (address) delay_time(delay); adress = adress >> 4; adress = adress << 2; strobe_data_p2(adress); adress = temp; adress &= 0x0F; adress = adress << 2; strobe_data_p2(adress); } void display_char(unsigned char ch){ //------------- Display char------------------------ char temp; temp = ch; P2OUT = RS ; // R/W = 0 (write mode) RS = 1 (data) ch = ch >> 4; ch = ch << 2; strobe_data_p2(RS+ch); ch = temp; ch &= 0x0F; ch = ch << 2; strobe_data_p2(RS+ch); } int create_custom_char(int){ // --------------------------------------- create custom char----------- strobe_data_p2(D6); strobe_data_p2(0x00); // comand xxxxxxxxx means >> 0x40 comand set CGRAM adress to 0 //scorpion half1 strobe_data_p2(RS+D4); strobe_data_p2(RS+D7); // comand xxxxxxxx means >> send special character data byte0 strobe_data_p2(RS); strobe_data_p2(D6+RS); // comand xxxxxxxx means >> send special character data byte1 strobe_data_p2(RS+D4); strobe_data_p2(D7+D6+D5+RS); // comand xxxxxxxx means >> send special character data byte2 strobe_data_p2(RS); strobe_data_p2(D5+D4+RS); // comand xxxxxxxx means >> send special character data byte3 strobe_data_p2(RS); strobe_data_p2(D5+D4+RS); // comand xxxxxxxx means >> send special character data byte4 strobe_data_p2(RS+D4); strobe_data_p2(RS+D7+D5+D4); // comand xxxxxxxx means >> send special character data byte5 strobe_data_p2(RS); strobe_data_p2(RS+D7+D6+D5+D4); // comand xxxxxxxx means >> send special character data byte6 strobe_data_p2(RS+D4); strobe_data_p2(RS+D7+D6); // comand xxxxxxxx means >> send special character data byte7 //scorpion half2 strobe_data_p2(RS); strobe_data_p2(RS+D6+D5); // comand xxxxxxxx means >> send special character data byte0 strobe_data_p2(RS); strobe_data_p2(D7+RS+D4); // comand xxxxxxxx means >> send special character data byte1 strobe_data_p2(RS); strobe_data_p2(D4+RS); // comand xxxxxxxx means >> send special character data byte2 strobe_data_p2(RS); strobe_data_p2(D5+D4+RS); // comand xxxxxxxx means >> send special character data byte3 strobe_data_p2(RS+D4); strobe_data_p2(D7+D6+D5+RS); // comand xxxxxxxx means >> send special character data byte4 strobe_data_p2(RS+D4); strobe_data_p2(RS+D7+D6); // comand xxxxxxxx means >> send special character data byte5 strobe_data_p2(RS+D4); strobe_data_p2(RS); // comand xxxxxxxx means >> send special character data byte6 strobe_data_p2(RS); strobe_data_p2(RS); // comand xxxxxxxx means >> send special character data byte7 //left arrow strobe_data_p2(RS); strobe_data_p2(RS+D6); // comand xxxxxxxx means >> send special character data byte0 strobe_data_p2(RS); strobe_data_p2(D7+RS+D6); // comand xxxxxxxx means >> send special character data byte1 strobe_data_p2(RS+D4); strobe_data_p2(D5+RS+D7+D6); // comand xxxxxxxx means >> send special character data byte2 strobe_data_p2(RS); strobe_data_p2(D7+D6+D4+RS); // comand xxxxxxxx means >> send special character data byte3 strobe_data_p2(RS); strobe_data_p2(D6+D4+RS); // comand xxxxxxxx means >> send special character data byte4 strobe_data_p2(RS+D4); strobe_data_p2(RS+D4); // comand xxxxxxxx means >> send special character data byte5 strobe_data_p2(RS+D4); strobe_data_p2(RS+D7+D4); // comand xxxxxxxx means >> send special character data byte6 strobe_data_p2(RS); strobe_data_p2(RS+D7+D6+D5); // comand xxxxxxxx means >> send special character data byte7 //right arrow strobe_data_p2(RS); strobe_data_p2(RS+D6); // comand xxxxxxxx means >> send special character data byte0 strobe_data_p2(RS); strobe_data_p2(D5+RS+D6); // comand xxxxxxxx means >> send special character data byte1 strobe_data_p2(RS); strobe_data_p2(D5+RS+D7+D6+D4); // comand xxxxxxxx means >> send special character data byte2 strobe_data_p2(RS+D4); strobe_data_p2(D6+D5+RS); // comand xxxxxxxx means >> send special character data byte3 strobe_data_p2(RS+D4); strobe_data_p2(D6+RS); // comand xxxxxxxx means >> send special character data byte4 strobe_data_p2(RS+D4); strobe_data_p2(RS+D4); // comand xxxxxxxx means >> send special character data byte5 strobe_data_p2(RS); strobe_data_p2(RS+D7+D4+D5); // comand xxxxxxxx means >> send special character data byte6 strobe_data_p2(RS); strobe_data_p2(RS+D6+D5); // comand xxxxxxxx means >> send special character data byte7 //button symbol strobe_data_p2(RS); strobe_data_p2(RS+D6); // comand xxxxxxxx means >> send special character data byte0 strobe_data_p2(RS+D4); strobe_data_p2(D5+RS+D6+D7+D4); // comand xxxxxxxx means >> send special character data byte1 strobe_data_p2(RS); strobe_data_p2(D5+RS+D7+D6); // comand xxxxxxxx means >> send special character data byte2 strobe_data_p2(RS); strobe_data_p2(D6+RS); // comand xxxxxxxx means >> send special character data byte3 strobe_data_p2(RS); strobe_data_p2(RS); // comand xxxxxxxx means >> send special character data byte4 strobe_data_p2(RS); strobe_data_p2(RS+D7+D6+D5); // comand xxxxxxxx means >> send special character data byte5 strobe_data_p2(RS); strobe_data_p2(RS+D7+D5); // comand xxxxxxxx means >> send special character data byte6 strobe_data_p2(RS+D4); strobe_data_p2(RS+D6+D5+D4); // comand xxxxxxxx means >> send special character data byte7 return(0); } int strobe_data_p2(int strobe){ // -------------------------- strobe data to display------------- P2OUT = (strobe); // data sent from comand delay_time(delay); P2OUT |= EN; // Enable = 1 delay_time(delay); P2OUT &= ~(EN); // Enable = 0 delay_time(delay); return(0); } int cls(int){ // -------------------------- Clear screen------------- int m; m = 16; move_cursor_xy(1,1); do{ display_char(' '); m--; }while (m != 0); m = 16; move_cursor_xy(1,2); do{ display_char(' '); m--; }while (m != 0); return(0); } int draw_Logo(int){ // -------------------- Logo intro------------- int count_m; cls(0); move_cursor_xy(3,1); display_char('S'); display_char('c'); display_char('o'); display_char('r'); display_char('p'); display_char('i'); display_char('o'); display_char('n'); display_char(' '); display_char('3'); display_char('.'); display_char('0'); move_cursor_xy(8,2); display_char(0x00); display_char(0x01); move_cursor_xy(17,2); count_m = 12; do{ delay_long(0); count_m --; }while(count_m !=0); cls(0); move_cursor_xy(4,1); display_char('C'); display_char('r'); display_char('e'); display_char('a'); display_char('t'); display_char('e'); display_char('d'); display_char(' '); display_char('b'); display_char('y'); move_cursor_xy(3,2); display_char('M'); display_char('a'); display_char('r'); display_char('i'); display_char('u'); display_char('s'); display_char(' '); display_char('T'); display_char('a'); display_char('c'); display_char('i'); display_char('u'); display_char('c'); move_cursor_xy(17,2); count_m = 12; do{ delay_long(0); count_m --; }while(count_m !=0); cls(0); move_cursor_xy(2,1); display_char('H'); display_char('a'); display_char('c'); display_char('k'); display_char('a'); display_char('d'); display_char('a'); display_char('y'); display_char(' '); display_char('P'); display_char('r'); display_char('i'); display_char('z'); display_char('e'); move_cursor_xy(7,2); display_char('2'); display_char('0'); display_char('1'); display_char('7'); move_cursor_xy(17,2); count_m = 12; do{ delay_long(0); count_m --; }while(count_m !=0); return(0); } int draw_main_menu_screen(int){ // --------------------------draw main menu------------- move_cursor_xy(4,1); display_char('M'); display_char('a'); display_char('i'); display_char('n'); display_char(' '); display_char('m'); display_char('e'); display_char('n'); display_char('u'); move_cursor_xy(1,2); display_char(0x00); display_char(0x01); move_cursor_xy(16,2); display_char(0x03); return(0); } int draw_USB_5V_screen(int){ // --------------------------draw USB_5V menu------------- move_cursor_xy(1,1); display_char('1'); display_char(' '); display_char('U'); display_char('S'); display_char('B'); display_char(' '); display_char('5'); display_char('V'); move_cursor_xy(1,2); display_char(0x02); move_cursor_xy(5,2); display_char(0x00); display_char(0x01); move_cursor_xy(11,2); display_char(0x04); move_cursor_xy(17,2); return(0); } int draw_power_supply_screen(int){ // --------------------------draw power_supply menu------------- move_cursor_xy(1,1); display_char('2'); display_char(' '); display_char('P'); display_char('o'); display_char('w'); display_char('e'); display_char('r'); display_char(' '); display_char('s'); display_char('u'); display_char('p'); display_char('p'); display_char('l'); display_char('y'); move_cursor_xy(1,2); display_char(0x02); move_cursor_xy(5,2); display_char(0x00); display_char(0x01); move_cursor_xy(11,2); display_char(0x04); move_cursor_xy(16,2); display_char(0x03); return(0); } int draw_AGM_charger_screen(int){ // --------------------------draw AGM charger menu------------- move_cursor_xy(1,1); display_char('3'); display_char(' '); display_char('A'); display_char('G'); display_char('M'); display_char(' '); display_char('c'); display_char('h'); display_char('a'); display_char('r'); display_char('g'); display_char('e'); display_char('r'); move_cursor_xy(1,2); display_char(0x02); move_cursor_xy(5,2); display_char(0x00); display_char(0x01); move_cursor_xy(11,2); display_char(0x04); move_cursor_xy(16,2); display_char(0x03); return(0); } int draw_Li_ion_screen(int){ // --------------------------draw L-ion charger menu------------- move_cursor_xy(1,1); display_char('4'); display_char(' '); display_char('L'); display_char('i'); display_char('-'); display_char('i'); display_char('o'); display_char('n'); display_char(' '); display_char('c'); display_char('h'); display_char('a'); display_char('r'); display_char('g'); display_char('e'); display_char('r'); move_cursor_xy(5,2); display_char(0x00); display_char(0x01); move_cursor_xy(11,2); display_char(0x04); move_cursor_xy(16,2); display_char(0x03); return(0); } int draw_sub_ps(int){ move_cursor_xy(1,1); display_char('U'); display_char('='); move_cursor_xy(7,1); display_char('V'); move_cursor_xy(10,1); display_char('I'); display_char('='); move_cursor_xy(16,1); display_char('A'); move_cursor_xy(5,2); display_char(0x00); display_char(0x01); move_cursor_xy(11,2); display_char(0x04); move_cursor_xy(17,2); return(0); } int draw_sub_ps_adv(int){ move_cursor_xy(2,2); display_char(' '); display_char(' '); display_char('A'); display_char('d'); display_char('j'); display_char('.'); display_char(' '); display_char('V'); display_char(' '); display_char(' '); move_cursor_xy(13,2); display_char(0x04); move_cursor_xy(15,2); display_char(' '); display_char(0x03); return(0); } int draw_sub_ps_adi(int){ move_cursor_xy(1,2); display_char(0x02); move_cursor_xy(3,2); display_char(' '); display_char('A'); display_char('d'); display_char('j'); display_char('.'); display_char(' '); display_char('I'); display_char(' '); display_char(' '); move_cursor_xy(13,2); display_char(0x04); move_cursor_xy(16,2); display_char(0x03); return(0); } int draw_sub_ps_mm(int){ move_cursor_xy(1,2); display_char(0x02); move_cursor_xy(3,2); display_char('M'); display_char('a'); display_char('i'); display_char('n'); display_char(' '); display_char('m'); display_char('e'); display_char('n'); display_char('u'); move_cursor_xy(13,2); display_char(0x04); move_cursor_xy(16,2); display_char(0x03); return(0); } int draw_sub_ps_ret(int){ move_cursor_xy(1,2); display_char(0x02); move_cursor_xy(3,2); display_char(' '); display_char(' '); display_char('B'); display_char('a'); display_char('c'); display_char('k'); display_char(' '); display_char(' '); display_char(' '); move_cursor_xy(13,2); display_char(0x04); move_cursor_xy(16,2); display_char(' '); return(0); }