コード例 #1
0
ファイル: lcd.c プロジェクト: ruediheimlicher/Resetter
/*
 * Loads the byte into the shift register and then sends it to the LCD as a char
 * Parameters:
 *      c               The byte (character) to display
*/
void 
lcd_putc(const char c)
{
        lcd_load_byte(c);
        lcd_send_char();
}
コード例 #2
0
ファイル: lcd.c プロジェクト: ruediheimlicher/TWI_Master
void lcd_CGRAMInit_Mode(void)
{
	uint8_t i=0;
        lcd_load_byte(0x48);
        lcd_send_cmd();
		
		for (i=0;i<3;i++)	//				beide h	Tag voll, Nacht off			- -	char 1
		{
		lcd_putc(0x1B);
		lcd_send_char();
		}
		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();
		for (i=3;i<6;i++)	//					
		{
		lcd_putc(0x00);
		lcd_send_char();
		}

		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();
		
		for (i=0;i<3;i++)	//				beide h	Tag voll, 2. h Nacht red			- -	char 2
		{
		lcd_putc(0x1B);
		lcd_send_char();
		}
		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();
		for (i=3;i<6;i++)	//					
		{
		lcd_putc(0x01+i%2);
		lcd_send_char();
		}

		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();
		
		
		for (i=0;i<3;i++)	//				beide h	Tag voll, 1. h Nacht red			- -	char 3
		{
		lcd_putc(0x1B);
		lcd_send_char();
		}
		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();
		for (i=3;i<6;i++)	//					
		{
		lcd_putc(0x08*((i%2)*2));	//0x08, 0x10
		lcd_send_char();
		}

		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();

		
		for (i=0;i<3;i++)	//				beide h	Tag voll,  Nacht red			- -	char 4
		{
		lcd_putc(0x1B);
		lcd_send_char();
		}
		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();
		for (i=3;i<6;i++)	//					
		{
		lcd_putc(0x09*((i%2)*2));	//0x09, 0x12
		lcd_send_char();
		}

		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();

		
		for (i=0;i<3;i++)	//				beide h	Tag voll,  1. h Nacht red, 2. h voll			- -	char 5
		{
		lcd_putc(0x1B);
		lcd_send_char();
		}
		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();
		for (i=3;i<6;i++)	//					
		{
		lcd_putc(0x0B+(i%2*8));	//0x0B, 0x13
		lcd_send_char();
		}

		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();


		for (i=0;i<3;i++)	//				beide h	Tag voll,  1. h Nacht voll, 2. h red			- -	char 6
		{
		lcd_putc(0x1B);
		lcd_send_char();
		}
		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();
		for (i=3;i<6;i++)	//					
		{
		lcd_putc(0x19+(i%2));	//0x0x19, 0x1A
		lcd_send_char();
		}

		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();

		for (i=0;i<3;i++)	//				beide h	Tag voll, Nacht voll						- -	char 7
		{
		lcd_putc(0x1B);
		lcd_send_char();
		}
		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();
		for (i=3;i<6;i++)	//					
		{
		lcd_putc(0x1B);	//
		lcd_send_char();
		}

		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();

		for (i=0;i<3;i++)	//				beide h	Tag red, Nacht off						- -	char 7
		{
		lcd_putc(0x09*((i%2)*2));	//0x09, 0x12
		lcd_send_char();
		}
		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();
		for (i=3;i<6;i++)	//					
		{
		lcd_putc(0x00);	//
		lcd_send_char();
		}

		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();





		lcd_load_byte(0x80);
        lcd_send_cmd();


}
コード例 #3
0
ファイル: lcd.c プロジェクト: ruediheimlicher/TWI_Master
void lcd_CGRAMInit_Titel(void)
{
	uint8_t i=0;
	lcd_load_byte(0x48);
	lcd_send_cmd();
	
	//													Strich senkrecht mitte				char 1
	for (i=0;i<8;i++)	
	{
		lcd_load_byte(0x84);//	mittl Pixel 
		lcd_send_char();
	}
	
	//													Ecke links oben						char 2
	for (i=0;i<3;i++)	
	{
		lcd_load_byte(0x00);	//	leer
		lcd_send_char();
	}

	lcd_load_byte(0x87);	//	obere Linie
	lcd_send_char();
	
	for (i=0;i<4;i++)	
	{
		lcd_load_byte(0x84);	//	mittl. Pixel
		lcd_send_char();
	}
	
	//													Ecke links unten					char 3
	for (i=0;i<3;i++)	
	{
		lcd_load_byte(0x84);	//	mittl Pixel 
		lcd_send_char();
	}
	lcd_load_byte(0x87);	//	untere Linie
	lcd_send_char();

	for (i=0;i<4;i++)	
	{
		lcd_load_byte(0x00);	//	leer
		lcd_send_char();
	}
	
	
	
	//													Strich oben							char 4
	lcd_load_byte(0x9F);	//	obere Linie
	lcd_send_char();
	
	for (i=0;i<7;i++)			
	{
		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();
	}
	
	//													Ecke rechts oben					char 5
		for (i=0;i<3;i++)	
	{
		lcd_load_byte(0x00);	//	leer
		lcd_send_char();
	}
	lcd_load_byte(0x9C);	//	obere Linie
	lcd_send_char();
	
	for (i=0;i<4;i++)	
	{
		lcd_load_byte(0x84); // Pixel mitte
		lcd_send_char();
	}
	
	//													Ecke rechts unten					char 6
	for (i=0;i<3;i++)			
	{
		lcd_load_byte(0x84); // Pixel ganz rechts
		lcd_send_char();
	}
	lcd_load_byte(0x9C);	//	untere Linie
	lcd_send_char();

	for (i=0;i<4;i++)	
	{
		lcd_load_byte(0x00);	//	leer
		lcd_send_char();
	}

	
	//													Pfeil nach oben						char 7
	lcd_load_byte(0x00);	//	obere Linie
	lcd_send_char();
	lcd_load_byte(0x00);	//	leer
	lcd_send_char();
	lcd_load_byte(0x84);	//	mittl. Pixel
	lcd_send_char();
	lcd_load_byte(0x8E);	//	3 mittl. Pixel
	lcd_send_char();
	lcd_load_byte(0x9F);	//	5 Pixel
	lcd_send_char();	
	
	//	3 freie Linien
	for (i=0;i<2;i++)	
	{
		lcd_load_byte(0x00);	//	freie Linie
		lcd_send_char();
	}
	
	//													Pfeil nach unten					char 8
	//	3 freie Linien
	for (i=0;i<3;i++)	
	{
	lcd_load_byte(0x00);	//	freie Linie
	lcd_send_char();
	}
	lcd_load_byte(0x9F);	//	5 Pixel
	lcd_send_char();	
	lcd_load_byte(0x8E);	//	3 mittl. Pixel
	lcd_send_char();
	lcd_load_byte(0x84);	//	mittl Pixel
	lcd_send_char();	

	lcd_load_byte(0x00);	//	freie Linie
	lcd_send_char();
	lcd_load_byte(0x00);	//	freie Linie
	lcd_send_char();
	lcd_load_byte(0x00);	//	freie Linie
	lcd_send_char();
	
	
	
	
	// Abschliessen
	lcd_load_byte(0x80);
	lcd_send_cmd();
			
				
}
コード例 #4
0
ファイル: lcd.c プロジェクト: ruediheimlicher/TWI_Master
void lcd_CGRAMInit_A(void)
{
	uint8_t i=0;
        lcd_load_byte(0x48);
        lcd_send_cmd();
		
		for (i=0;i<6;i++)	
		//					Kolonne 1 ganz links		char 1
		{
		
		lcd_load_byte(0x10);
		lcd_send_char();
		
		//		lcd_putc(0x10);
		//lcd_send_char();
		}
		lcd_load_byte(0x1B);//OFF-Linie
		lcd_send_char();
		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();
		
		for (i=0;i<6;i++)
		//					Kolonne 1+2					char 2
		{
		lcd_load_byte(0x18);
		lcd_send_char();
		}
		lcd_load_byte(0x1B);//OFF-Linie
		lcd_send_char();
		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();
		
		
		for (i=0;i<6;i++)	
		//					Kolonne 1,2,3				char 3
		{
		lcd_load_byte(0x1A);
		lcd_send_char();
		}
		lcd_load_byte(0x1B);//OFF-Linie
		lcd_send_char();
		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();
		
		
		for (i=0;i<6;i++)
			//					Kolonne 1,2,3,4				char 4
		{
		lcd_load_byte(0x1B);
		lcd_send_char();
		}
		lcd_load_byte(0x1B);//OFF-Linie
		lcd_send_char();
		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();
		
		
		for (i=0;i<6;i++)	
		//					Kolonne 2,3,4				char 5
		{
		lcd_load_byte(0x0B);
		lcd_send_char();
		}
		lcd_load_byte(0x1B);//OFF-Linie
		lcd_send_char();
		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();
		
		
		for (i=0;i<6;i++)	
		//					Kolonne 3,4					char 6
		{
		lcd_load_byte(0x03);
		lcd_send_char();
		}
		lcd_load_byte(0x1B);//OFF-Linie
		lcd_send_char();
		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();
		
		
		for (i=0;i<6;i++)	//					Kolonne 4					char 7
		{
		lcd_load_byte(0x01);
		lcd_send_char();
		}
		lcd_load_byte(0x1B);//OFF-Linie
		lcd_send_char();
		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();
		
		for (i=0;i<6;i++)	
		//					OFF							char 8
		{
		lcd_load_byte(0x00);
		lcd_send_char();
		}
		lcd_load_byte(0x1B);//OFF-Linie
		lcd_send_char();
		lcd_load_byte(0x00);//freie Linie
		lcd_send_char();
		
		lcd_load_byte(0x80);
        lcd_send_cmd();


}
コード例 #5
0
ファイル: main.c プロジェクト: adrpak/casainho-projects
int main (void)
{
    unsigned char           menu = MENU_SHOW_USER_TIME;

    static unsigned char    button_state = 0, counter_button = 0;

    unsigned                cpsr_temp;
    double                  voltage_temp,
                            current_temp,
                            wattage_hour_temp,
                            wattage_temp;

    unsigned short int      nr_adc_reads_temp;

    /* Initialize variables */
    voltage                             = 0;
    current                             = 0;
    wattage                             = 0;
    wattage_hour_user                   = 0;
    wattage_hour_system                 = 0;
    tick_update_lcd                     = 0;
    nr_adc_reads                        = 0;
    user_time_wattage                   = 0;

	/* Initialize the system */
    system_init ();

    /* Initialize the LCD */
    lcd_init ();

    /* Initialize the ADC */
    adc_init ();

    /* Initialize the buttons */
    buttons_init ();

    /* Initialize the Timer0 */
    timer1_init ();
    enableIRQ ();

    for (;;)
    {
        switch (menu)
        {
        case MENU_SHOW_USER_TIME:

        if (button_is_set(BUTTON_01) && !button_state)
        {
            menu = MENU_SHOW_USER_POWER;
            button_state = 1;
            counter_button = 0;
        }

        if (!button_is_set(BUTTON_01))
            button_state = 0;

        if (tick_update_lcd >= 50) /* Execute on every 50 * 5ms */
        {
            /* Disable the IRQ for avoid change on global variables used on
            * Timer1 IRQ handler code */
            cpsr_temp = disableIRQ ();
            wattage = 0;
            voltage = 0;
            current = 0;
            nr_adc_reads = 0;
            wattage_temp = user_time_wattage;
            tick_update_lcd = 0;
            /* Restore the IRQ */
            restoreIRQ (cpsr_temp);

            lcd_send_command (DD_RAM_ADDR); /* LCD set first row */
            lcd_send_char (' ');
            lcd_send_char ('A');
            lcd_send_char ('v');
            lcd_send_char ('a');
            lcd_send_char ('i');
            lcd_send_char ('l');
            lcd_send_char ('a');
            lcd_send_char ('b');
            lcd_send_char ('l');
            lcd_send_char ('e');
            lcd_send_char (' ');
            lcd_send_char ('t');
            lcd_send_char ('i');
            lcd_send_char ('m');
            lcd_send_char ('e');
            lcd_send_char (' ');

            lcd_send_command (DD_RAM_ADDR2); /* LCD set 2nd row */

            /* (watts per hour * 60) ==> watts per minute.
             * Load uses 30 watts so: ((watts per hour * 60) / 30) <=>
             *                         (watts per hour * 2).
             */
            double temp1, temp2;
            temp1 = ((long) (wattage_temp * 2));
            temp2 = ((double) (((double) (wattage_temp * 2)) - (double) temp1));
            lcd_send_char (' ');
            lcd_send_char (' ');
            lcd_send_char (' ');
            lcd_send_char (' ');
            lcd_send_int (temp1, 3);
            lcd_send_char ('m');
            lcd_send_char (' ');
            lcd_send_int (((long) (temp2 * 60)), 2);
            lcd_send_char ('s');
            lcd_send_char (' ');
            lcd_send_char (' ');
            lcd_send_char (' ');
            lcd_send_char (' ');

            /* Verify if we need to reset the "usage time available" */
            if (button_is_set(BUTTON_02))
            {
                if (++counter_button >= 4)
                {
                    while (button_is_set(BUTTON_02))
                    {
                        lcd_send_command (DD_RAM_ADDR);
                        lcd_send_char (' ');
                        lcd_send_char ('A');
                        lcd_send_char ('v');
                        lcd_send_char ('a');
                        lcd_send_char ('i');
                        lcd_send_char ('l');
                        lcd_send_char ('a');
                        lcd_send_char ('b');
                        lcd_send_char ('l');
                        lcd_send_char ('e');
                        lcd_send_char (' ');
                        lcd_send_char ('t');
                        lcd_send_char ('i');
                        lcd_send_char ('m');
                        lcd_send_char ('e');
                        lcd_send_char (' ');

                        lcd_send_command (DD_RAM_ADDR2);
                        lcd_send_char (' ');
                        lcd_send_char (' ');
                        lcd_send_char (' ');
                        lcd_send_char (' ');
                        lcd_send_char (' ');
                        lcd_send_char ('r');
                        lcd_send_char ('e');
                        lcd_send_char ('s');
                        lcd_send_char ('e');
                        lcd_send_char ('t');
                        lcd_send_char (' ');
                        lcd_send_char (' ');
                        lcd_send_char (' ');
                        lcd_send_char (' ');
                        lcd_send_char (' ');
                        lcd_send_char (' ');
                    }

             /* Disable the IRQ for avoid change on global variables used on
              * Timer1 IRQ handler code */
                    cpsr_temp = disableIRQ ();
                    user_time_wattage = 0;
                    tick_update_lcd = 0;
                    /* Restore the IRQ */
                    restoreIRQ (cpsr_temp);

                    counter_button = 0;
                }
            }
        }

        break;

            case MENU_SHOW_USER_POWER:

            if (button_is_set(BUTTON_01) && !button_state)
            {
                menu = MENU_SHOW_SYSTEM_POWER;
                button_state = 1;
                counter_button = 0;
            }

            if (!button_is_set(BUTTON_01))
                button_state = 0;

            if (tick_update_lcd >= 50) /* Execute on every 50 * 5ms */
            {
                /* Disable the IRQ for avoid change on global variables used on
                * Timer1 IRQ handler code */
                cpsr_temp = disableIRQ ();
                wattage_temp = wattage;
                wattage = 0;
                wattage_hour_temp = wattage_hour_user;
                voltage = 0;
                current = 0;
                nr_adc_reads_temp = nr_adc_reads;
                nr_adc_reads = 0;
                tick_update_lcd = 0;
                /* Restore the IRQ */
                restoreIRQ (cpsr_temp);

                lcd_send_command (DD_RAM_ADDR); /* LCD set first row */
                lcd_send_char (' ');
                lcd_send_float ((wattage_temp/nr_adc_reads_temp), 3, 1);
                lcd_send_char (' ');
                lcd_send_char ('W');
                lcd_send_char ('a');
                lcd_send_char ('t');
                lcd_send_char ('t');
                lcd_send_char ('s');
                lcd_send_char (' ');
                lcd_send_char (' ');
                lcd_send_char (' ');
                lcd_send_char (' ');

                lcd_send_command (DD_RAM_ADDR2); /* LCD set 2nd row */
                lcd_send_char (' ');
                lcd_send_float (wattage_hour_temp, 3, 3);
                lcd_send_char (' ');
                lcd_send_char ('W');
                lcd_send_char ('/');
                lcd_send_char ('h');
                lcd_send_char ('o');
                lcd_send_char ('u');
                lcd_send_char ('r');
                lcd_send_char (' ');

                /* Verify if we need to reset the wattage_hour_user */
                if (button_is_set(BUTTON_02))
                {
                    if (++counter_button >= 8)
                    {
                        while (button_is_set(BUTTON_02))
                        {
                            lcd_send_command (DD_RAM_ADDR);
                            lcd_send_char (' ');
                            lcd_send_char (' ');
                            lcd_send_char (' ');
                            lcd_send_char ('W');
                            lcd_send_char ('a');
                            lcd_send_char ('t');
                            lcd_send_char ('t');
                            lcd_send_char ('s');
                            lcd_send_char (' ');
                            lcd_send_char ('h');
                            lcd_send_char ('o');
                            lcd_send_char ('u');
                            lcd_send_char ('r');
                            lcd_send_char (' ');
                            lcd_send_char (' ');
                            lcd_send_char (' ');

                            lcd_send_command (DD_RAM_ADDR2);
                            lcd_send_char (' ');
                            lcd_send_char (' ');
                            lcd_send_char (' ');
                            lcd_send_char (' ');
                            lcd_send_char (' ');
                            lcd_send_char ('r');
                            lcd_send_char ('e');
                            lcd_send_char ('s');
                            lcd_send_char ('e');
                            lcd_send_char ('t');
                            lcd_send_char (' ');
                            lcd_send_char (' ');
                            lcd_send_char (' ');
                            lcd_send_char (' ');
                            lcd_send_char (' ');
                            lcd_send_char (' ');
                        }

                 /* Disable the IRQ for avoid change on global variables used on
                  * Timer1 IRQ handler code */
                        cpsr_temp = disableIRQ ();
                        wattage_hour_user = 0;
                        tick_update_lcd = 0;
                        /* Restore the IRQ */
                        restoreIRQ (cpsr_temp);

                        counter_button = 0;
                    }
                }
            }

            break;

            case MENU_SHOW_SYSTEM_POWER:

            if (button_is_set(BUTTON_01) && !button_state)
            {
                menu = MENU_SHOW_USER_TIME;
                button_state = 1;
                counter_button = 0;
            }

            if (!button_is_set(BUTTON_01))
                button_state = 0;

            if (tick_update_lcd >= 50) /* Execute on every 50 * 5ms */
            {
                /* Disable the IRQ for avoid change on global variables used on
                * Timer1 IRQ handler code */
                cpsr_temp = disableIRQ ();
                wattage_temp = wattage;
                wattage = 0;
                wattage_hour_temp = wattage_hour_system;
                voltage = 0;
                current = 0;
                nr_adc_reads_temp = nr_adc_reads;
                nr_adc_reads = 0;
                tick_update_lcd = 0;
                /* Restore the IRQ */
                restoreIRQ (cpsr_temp);

                lcd_send_command (DD_RAM_ADDR); /* LCD set first row */
                lcd_send_char (' ');
                lcd_send_char (' ');
                lcd_send_char ('T');
                lcd_send_char ('o');
                lcd_send_char ('t');
                lcd_send_char ('a');
                lcd_send_char ('l');
                lcd_send_char (' ');
                lcd_send_char ('p');
                lcd_send_char ('o');
                lcd_send_char ('w');
                lcd_send_char ('e');
                lcd_send_char ('r');
                lcd_send_char (' ');
                lcd_send_char (' ');
                lcd_send_char (' ');

                lcd_send_command (DD_RAM_ADDR2); /* LCD set 2nd row */
                lcd_send_char (' ');
                lcd_send_float (wattage_hour_temp, 4, 3);

                lcd_send_char (' ');
                lcd_send_char ('W');
                lcd_send_char ('/');
                lcd_send_char ('h');
                lcd_send_char ('o');
                lcd_send_char ('u');
                lcd_send_char ('r');

                /* Verify if we need to go on the advanced menus */
                if (button_is_set(BUTTON_02))
                {
                    if (++counter_button >= 20)
                    {
                        while (button_is_set(BUTTON_02))
                        {
                            lcd_send_command (DD_RAM_ADDR);
                            lcd_send_char (' ');
                            lcd_send_char (' ');
                            lcd_send_char (' ');
                            lcd_send_char (' ');
                            lcd_send_char ('G');
                            lcd_send_char ('o');
                            lcd_send_char ('i');
                            lcd_send_char ('n');
                            lcd_send_char ('g');
                            lcd_send_char (' ');
                            lcd_send_char ('t');
                            lcd_send_char ('o');
                            lcd_send_char (' ');
                            lcd_send_char (' ');
                            lcd_send_char (' ');
                            lcd_send_char (' ');

                            lcd_send_command (DD_RAM_ADDR2); /* LCD set 2nd row */
                            lcd_send_char (' ');
                            lcd_send_char ('a');
                            lcd_send_char ('d');
                            lcd_send_char ('v');
                            lcd_send_char ('a');
                            lcd_send_char ('n');
                            lcd_send_char ('c');
                            lcd_send_char ('e');
                            lcd_send_char ('d');
                            lcd_send_char (' ');
                            lcd_send_char ('m');
                            lcd_send_char ('e');
                            lcd_send_char ('n');
                            lcd_send_char ('u');
                            lcd_send_char ('s');
                            lcd_send_char (' ');
                        }

                        menu = MENU_SHOW_VOLTAGE_CURRENT;

                        counter_button = 0;
                    }
                }
            }

            break;

            case MENU_SHOW_VOLTAGE_CURRENT:

            if (button_is_set(BUTTON_01) && !button_state)
            {
                menu = MENU_SHOW_ADC_READINGS;
                button_state = 1;
                counter_button = 0;
            }

            if (!button_is_set(BUTTON_01))
                button_state = 0;

            if (tick_update_lcd >= 50) /* Execute on every 50 * 5ms */
            {
                /* Disable the IRQ for avoid change on global variables used on
                 * Timer1 IRQ handler code */
                cpsr_temp = disableIRQ ();
                voltage_temp = voltage;
                voltage = 0;
                current_temp = current;
                current = 0;
                nr_adc_reads_temp = nr_adc_reads;
                nr_adc_reads = 0;
                tick_update_lcd = 0;
                /* Restore the IRQ */
                restoreIRQ (cpsr_temp);

                lcd_send_command (DD_RAM_ADDR); /* LCD set first row */
                lcd_send_char (' ');
                lcd_send_char (' ');
                lcd_send_char (' ');
                lcd_send_float ((((voltage_temp/nr_adc_reads_temp) * \
                                                K_VOLTAGE) + M_VOLTAGE), 2,1);

                lcd_send_char (' ');
                lcd_send_char ('V');
                lcd_send_char ('o');
                lcd_send_char ('l');
                lcd_send_char ('t');
                lcd_send_char ('s');
                lcd_send_char (' ');
                lcd_send_char (' ');
                lcd_send_char (' ');

                lcd_send_command (DD_RAM_ADDR2); /* LCD set 2nd row */
                lcd_send_char (' ');
                lcd_send_char (' ');
                lcd_send_char (' ');
          /* First 3 values from ADC_current should not be used since they are
           *  very non linear.
           */
                current_temp = (current_temp/nr_adc_reads_temp);
                if (current_temp < 3)
                {
                    lcd_send_float (0, 2, 1);
                }

                if (current_temp >= 3 && current_temp < 60)
                {
                    current_temp = \
                   ((-0.000004 * current_temp * current_temp * current_temp) + \
                   (0.0005 * current_temp * current_temp) - \
                   (0.0028 * current_temp) + 0.356);
                    lcd_send_float (current_temp, 2, 1);
                }

                if (current_temp >= 60)
                {
                    lcd_send_float (((current_temp * K_CURRENT) + \
                            M_CURRENT),2,1);
                }

                lcd_send_char (' ');
                lcd_send_char ('A');
                lcd_send_char ('m');
                lcd_send_char ('p');
                lcd_send_char ('s');
                lcd_send_char (' ');
                lcd_send_char (' ');
                lcd_send_char (' ');
                lcd_send_char (' ');

                /* Verify if we need to go on the normal menus */
                if (button_is_set(BUTTON_02))
                {
                    if (++counter_button >= 20)
                    {
                        while (button_is_set(BUTTON_02))
                        {
                            lcd_send_command (DD_RAM_ADDR);
                            lcd_send_char (' ');
                            lcd_send_char (' ');
                            lcd_send_char (' ');
                            lcd_send_char (' ');
                            lcd_send_char ('L');
                            lcd_send_char ('e');
                            lcd_send_char ('a');
                            lcd_send_char ('v');
                            lcd_send_char ('i');
                            lcd_send_char ('n');
                            lcd_send_char ('g');
                            lcd_send_char (' ');
                            lcd_send_char (' ');
                            lcd_send_char (' ');
                            lcd_send_char (' ');
                            lcd_send_char (' ');

                            lcd_send_command (DD_RAM_ADDR2);
                            lcd_send_char (' ');
                            lcd_send_char ('a');
                            lcd_send_char ('d');
                            lcd_send_char ('v');
                            lcd_send_char ('a');
                            lcd_send_char ('n');
                            lcd_send_char ('c');
                            lcd_send_char ('e');
                            lcd_send_char ('d');
                            lcd_send_char (' ');
                            lcd_send_char ('m');
                            lcd_send_char ('e');
                            lcd_send_char ('n');
                            lcd_send_char ('u');
                            lcd_send_char ('s');
                            lcd_send_char (' ');
                        }

                        menu = MENU_SHOW_USER_TIME;

                        counter_button = 0;
                    }
                }
            }

            break;

            case MENU_SHOW_ADC_READINGS:

            disableIRQ ();
            lcd_send_command (CLR_DISP);

            while (1)
            {
                lcd_send_command (DD_RAM_ADDR); /* LCD set first row */
                lcd_send_char ('A');
                lcd_send_char ('D');
                lcd_send_char ('C');
                lcd_send_char (' ');
                lcd_send_char ('v');
                lcd_send_char ('o');
                lcd_send_char ('l');
                lcd_send_char ('t');
                lcd_send_char ('a');
                lcd_send_char ('g');
                lcd_send_char ('e');
                lcd_send_char (':');
                int i;
                for (i = 0; i < 5000; i++)
                    voltage += adc_read (6);
                lcd_send_int (voltage/5000, 4);
                voltage = 0;
                lcd_send_command (DD_RAM_ADDR2); /* LCD set 2nd row */
                lcd_send_char ('A');
                lcd_send_char ('D');
                lcd_send_char ('C');
                lcd_send_char (' ');
                lcd_send_char ('c');
                lcd_send_char ('u');
                lcd_send_char ('r');
                lcd_send_char ('r');
                lcd_send_char ('e');
                lcd_send_char ('n');
                lcd_send_char ('t');
                lcd_send_char (':');
                for (i = 0; i < 5000; i++)
                    current += adc_read (7);
                lcd_send_int (current/5000, 4);
                current = 0;

                if (button_is_set(BUTTON_01) && !button_state)
                {
                    menu = MENU_SHOW_VOLTAGE_CURRENT;
                    button_state = 1;
                    counter_button = 0;
                    voltage = 0;
                    current = 0;
                    restoreIRQ (cpsr_temp);
                    break;
                    break;
                }

                if (!button_is_set(BUTTON_01))
                    button_state = 0;
            }

            break;

            default:
            break;
        }

    /* Go to idle mode to save power. System leaves idle mode on interrupt, so,
     * at each 5ms interrupt from Timer 1.
     */
    /* UNCOMENT IN THE END - NOT POSSIBLE TO DEBUG WITH IDLE MODE */
    system_go_idle ();
    }
}