Bar graph simulation with custom characters

Dependencies:   TextLCD mbed

Fork of TextLCD_HelloWorld by Simon Ford

Committer:
gauyeung3
Date:
Thu Mar 07 17:55:29 2013 +0000
Revision:
3:e7802960032b
Parent:
2:ad0b044d0a10
Final Version.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gauyeung3 3:e7802960032b 1 /* Lcd_Custom_Char
gauyeung3 3:e7802960032b 2
gauyeung3 3:e7802960032b 3 Up to 8 characters can be programmed in CGRAM, but because CGRAM is a RAM, characters are lost
gauyeung3 3:e7802960032b 4 on power off and must be reloaded on power on.
gauyeung3 3:e7802960032b 5 Assuming 2x16 LCD with HD44780 Hitachi controller compatible.
gauyeung3 3:e7802960032b 6
gauyeung3 3:e7802960032b 7 */
simon 1:7418a52375a0 8
simon 0:334327d1a416 9 #include "mbed.h"
simon 0:334327d1a416 10 #include "TextLCD.h"
simon 0:334327d1a416 11
gauyeung3 3:e7802960032b 12 TextLCD lcd(p13, p14, p17, p18, p19, p20); // rs, e, d4, d5, d6, d7
gauyeung3 3:e7802960032b 13 AnalogIn ain(p15);
gauyeung3 3:e7802960032b 14 DigitalOut led1(LED1);
gauyeung3 3:e7802960032b 15 DigitalOut led2(LED2);
gauyeung3 3:e7802960032b 16 DigitalOut led3(LED3);
gauyeung3 3:e7802960032b 17 DigitalOut led4(LED4);
gauyeung3 3:e7802960032b 18
gauyeung3 3:e7802960032b 19 // Defines 8 bar heights
gauyeung3 3:e7802960032b 20 char custom_char[8][8] = {
gauyeung3 3:e7802960032b 21 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 0
gauyeung3 3:e7802960032b 22 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f}, // 1
gauyeung3 3:e7802960032b 23 {0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x1f}, // 2
gauyeung3 3:e7802960032b 24 {0x00,0x00,0x00,0x00,0x00,0x1f,0x1f,0x1f}, // 3
gauyeung3 3:e7802960032b 25 {0x00,0x00,0x00,0x00,0x1f,0x1f,0x1f,0x1f}, // 4
gauyeung3 3:e7802960032b 26 {0x00,0x00,0x00,0x1f,0x1f,0x1f,0x1f,0x1f}, // 5
gauyeung3 3:e7802960032b 27 {0x00,0x00,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f}, // 6
gauyeung3 3:e7802960032b 28 {0x00,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f} // 7
gauyeung3 3:e7802960032b 29 };
gauyeung3 3:e7802960032b 30
gauyeung3 3:e7802960032b 31 BusOut Lcd_pins(p17, p18, p19, p20); // d4, d5, d6, d7
gauyeung3 3:e7802960032b 32
gauyeung3 3:e7802960032b 33 DigitalOut rs_pin(p13); // rs
gauyeung3 3:e7802960032b 34 DigitalOut e_pin(p14); // e
gauyeung3 3:e7802960032b 35
gauyeung3 3:e7802960032b 36 // Prepare write port
gauyeung3 3:e7802960032b 37 void writePort(int value) {
gauyeung3 3:e7802960032b 38
gauyeung3 3:e7802960032b 39 Lcd_pins = value >> 4; // Shifts 4 bit right.
gauyeung3 3:e7802960032b 40 wait(0.000040f); // Delay
gauyeung3 3:e7802960032b 41 e_pin = 0;
gauyeung3 3:e7802960032b 42 wait(0.000040f);
gauyeung3 3:e7802960032b 43 e_pin = 1;
gauyeung3 3:e7802960032b 44 Lcd_pins = value;
gauyeung3 3:e7802960032b 45 wait(0.000040f);
gauyeung3 3:e7802960032b 46 e_pin = 0;
gauyeung3 3:e7802960032b 47 wait(0.000040f);
gauyeung3 3:e7802960032b 48 e_pin = 1;
gauyeung3 3:e7802960032b 49 }
simon 0:334327d1a416 50
simon 0:334327d1a416 51 int main() {
gauyeung3 3:e7802960032b 52 float temp = ain;
gauyeung3 3:e7802960032b 53 lcd.cls();
gauyeung3 3:e7802960032b 54 //lcd.printf("Writing Characters...");
gauyeung3 3:e7802960032b 55 wait(0.5);
gauyeung3 3:e7802960032b 56 for (int j=0; j<8; j++) {
gauyeung3 3:e7802960032b 57
gauyeung3 3:e7802960032b 58 rs_pin = 0; // Send command
gauyeung3 3:e7802960032b 59
gauyeung3 3:e7802960032b 60 /* 0X40 is the initial CGRAM address. Because each character needs a total amount of 8 memory
gauyeung3 3:e7802960032b 61 locations, we increment addres in 8 units after each character.
gauyeung3 3:e7802960032b 62 */
gauyeung3 3:e7802960032b 63 writePort(0x40+8*j);
gauyeung3 3:e7802960032b 64 // Writes custom characters to the text LCD.
gauyeung3 3:e7802960032b 65 rs_pin = 1; // Send the data here
gauyeung3 3:e7802960032b 66 for (int i=0; i<8; i++) {
gauyeung3 3:e7802960032b 67 writePort(custom_char[j][i]);
gauyeung3 3:e7802960032b 68 }
gauyeung3 3:e7802960032b 69 }
gauyeung3 3:e7802960032b 70 lcd.cls();
gauyeung3 3:e7802960032b 71 wait(0.010);
gauyeung3 3:e7802960032b 72 lcd.locate(0,0);
gauyeung3 3:e7802960032b 73
gauyeung3 3:e7802960032b 74 // Prints loaded custom characters. ASCII codes 0 to 7.
gauyeung3 3:e7802960032b 75
gauyeung3 3:e7802960032b 76 while(1){
gauyeung3 3:e7802960032b 77 wait(0.2);
gauyeung3 3:e7802960032b 78 temp = ain;
gauyeung3 3:e7802960032b 79 if(temp>=0&&temp<=0.142){
gauyeung3 3:e7802960032b 80 lcd.cls();
gauyeung3 3:e7802960032b 81 lcd.putc(0);
gauyeung3 3:e7802960032b 82 led1=0;
gauyeung3 3:e7802960032b 83 led2=0;
gauyeung3 3:e7802960032b 84 led3=0;
gauyeung3 3:e7802960032b 85 led4=0;
gauyeung3 3:e7802960032b 86 }
gauyeung3 3:e7802960032b 87 if(temp>0.142&&temp<=0.284){
gauyeung3 3:e7802960032b 88 lcd.cls();
gauyeung3 3:e7802960032b 89 lcd.putc(1);
gauyeung3 3:e7802960032b 90 led1=1;
gauyeung3 3:e7802960032b 91 led2=0;
gauyeung3 3:e7802960032b 92 led3=0;
gauyeung3 3:e7802960032b 93 led4=0;
gauyeung3 3:e7802960032b 94 }
gauyeung3 3:e7802960032b 95 if(temp>0.284&&temp<=0.426){
gauyeung3 3:e7802960032b 96 lcd.cls();
gauyeung3 3:e7802960032b 97 lcd.putc(2);
gauyeung3 3:e7802960032b 98 led1=1;
gauyeung3 3:e7802960032b 99 led2=1;
gauyeung3 3:e7802960032b 100 led3=0;
gauyeung3 3:e7802960032b 101 led4=0;
gauyeung3 3:e7802960032b 102 }
gauyeung3 3:e7802960032b 103 if(temp>0.426&&temp<=0.568){
gauyeung3 3:e7802960032b 104 lcd.cls();
gauyeung3 3:e7802960032b 105 lcd.putc(3);
gauyeung3 3:e7802960032b 106 led1=1;
gauyeung3 3:e7802960032b 107 led2=1;
gauyeung3 3:e7802960032b 108 led3=0;
gauyeung3 3:e7802960032b 109 led4=0;
gauyeung3 3:e7802960032b 110 }
gauyeung3 3:e7802960032b 111 else if(temp>0.568&&temp<=0.710){
gauyeung3 3:e7802960032b 112 lcd.cls();
gauyeung3 3:e7802960032b 113 lcd.putc(4);
gauyeung3 3:e7802960032b 114 led1=1;
gauyeung3 3:e7802960032b 115 led2=1;
gauyeung3 3:e7802960032b 116 led3=1;
gauyeung3 3:e7802960032b 117 led4=0;
gauyeung3 3:e7802960032b 118 }
gauyeung3 3:e7802960032b 119 else if(temp>0.710&&temp<=0.852){
gauyeung3 3:e7802960032b 120 lcd.cls();
gauyeung3 3:e7802960032b 121 lcd.putc(5);
gauyeung3 3:e7802960032b 122 led1=1;
gauyeung3 3:e7802960032b 123 led2=1;
gauyeung3 3:e7802960032b 124 led3=1;
gauyeung3 3:e7802960032b 125 led4=0;
gauyeung3 3:e7802960032b 126 }
gauyeung3 3:e7802960032b 127 else if(temp>0.852&&temp<=0.92){
gauyeung3 3:e7802960032b 128 lcd.cls();
gauyeung3 3:e7802960032b 129 lcd.putc(6);
gauyeung3 3:e7802960032b 130 led1=1;
gauyeung3 3:e7802960032b 131 led2=1;
gauyeung3 3:e7802960032b 132 led3=1;
gauyeung3 3:e7802960032b 133 led4=1;}
gauyeung3 3:e7802960032b 134
gauyeung3 3:e7802960032b 135 else if(temp>0.92&&temp<=1.0){
gauyeung3 3:e7802960032b 136 lcd.cls();
gauyeung3 3:e7802960032b 137 lcd.putc(7);
gauyeung3 3:e7802960032b 138 led1=1;
gauyeung3 3:e7802960032b 139 led2=1;
gauyeung3 3:e7802960032b 140 led3=1;
gauyeung3 3:e7802960032b 141 led4=1;}
gauyeung3 3:e7802960032b 142
gauyeung3 3:e7802960032b 143
gauyeung3 3:e7802960032b 144 }
gauyeung3 3:e7802960032b 145 }