Bar graph simulation with custom characters
Fork of TextLCD_HelloWorld by
Diff: main.cpp
- Revision:
- 3:e7802960032b
- Parent:
- 2:ad0b044d0a10
--- a/main.cpp Sat Dec 04 11:31:07 2010 +0000 +++ b/main.cpp Thu Mar 07 17:55:29 2013 +0000 @@ -1,10 +1,145 @@ -// Hello World! for the TextLCD +/* Lcd_Custom_Char + +Up to 8 characters can be programmed in CGRAM, but because CGRAM is a RAM, characters are lost +on power off and must be reloaded on power on. +Assuming 2x16 LCD with HD44780 Hitachi controller compatible. + +*/ #include "mbed.h" #include "TextLCD.h" -TextLCD lcd(p15, p16, p17, p18, p19, p20); // rs, e, d4-d7 +TextLCD lcd(p13, p14, p17, p18, p19, p20); // rs, e, d4, d5, d6, d7 +AnalogIn ain(p15); +DigitalOut led1(LED1); +DigitalOut led2(LED2); +DigitalOut led3(LED3); +DigitalOut led4(LED4); + +// Defines 8 bar heights +char custom_char[8][8] = { + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 0 + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f}, // 1 + {0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x1f}, // 2 + {0x00,0x00,0x00,0x00,0x00,0x1f,0x1f,0x1f}, // 3 + {0x00,0x00,0x00,0x00,0x1f,0x1f,0x1f,0x1f}, // 4 + {0x00,0x00,0x00,0x1f,0x1f,0x1f,0x1f,0x1f}, // 5 + {0x00,0x00,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f}, // 6 + {0x00,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f} // 7 +}; + +BusOut Lcd_pins(p17, p18, p19, p20); // d4, d5, d6, d7 + +DigitalOut rs_pin(p13); // rs +DigitalOut e_pin(p14); // e + +// Prepare write port +void writePort(int value) { + + Lcd_pins = value >> 4; // Shifts 4 bit right. + wait(0.000040f); // Delay + e_pin = 0; + wait(0.000040f); + e_pin = 1; + Lcd_pins = value; + wait(0.000040f); + e_pin = 0; + wait(0.000040f); + e_pin = 1; +} int main() { - lcd.printf("Hello World!\n"); -} + float temp = ain; + lcd.cls(); + //lcd.printf("Writing Characters..."); + wait(0.5); + for (int j=0; j<8; j++) { + + rs_pin = 0; // Send command + + /* 0X40 is the initial CGRAM address. Because each character needs a total amount of 8 memory + locations, we increment addres in 8 units after each character. + */ + writePort(0x40+8*j); +// Writes custom characters to the text LCD. + rs_pin = 1; // Send the data here + for (int i=0; i<8; i++) { + writePort(custom_char[j][i]); + } + } + lcd.cls(); + wait(0.010); + lcd.locate(0,0); + +// Prints loaded custom characters. ASCII codes 0 to 7. + + while(1){ + wait(0.2); + temp = ain; + if(temp>=0&&temp<=0.142){ + lcd.cls(); + lcd.putc(0); + led1=0; + led2=0; + led3=0; + led4=0; + } + if(temp>0.142&&temp<=0.284){ + lcd.cls(); + lcd.putc(1); + led1=1; + led2=0; + led3=0; + led4=0; + } + if(temp>0.284&&temp<=0.426){ + lcd.cls(); + lcd.putc(2); + led1=1; + led2=1; + led3=0; + led4=0; + } + if(temp>0.426&&temp<=0.568){ + lcd.cls(); + lcd.putc(3); + led1=1; + led2=1; + led3=0; + led4=0; + } + else if(temp>0.568&&temp<=0.710){ + lcd.cls(); + lcd.putc(4); + led1=1; + led2=1; + led3=1; + led4=0; + } + else if(temp>0.710&&temp<=0.852){ + lcd.cls(); + lcd.putc(5); + led1=1; + led2=1; + led3=1; + led4=0; + } + else if(temp>0.852&&temp<=0.92){ + lcd.cls(); + lcd.putc(6); + led1=1; + led2=1; + led3=1; + led4=1;} + + else if(temp>0.92&&temp<=1.0){ + lcd.cls(); + lcd.putc(7); + led1=1; + led2=1; + led3=1; + led4=1;} + + + } + }