Bar graph simulation with custom characters
Fork of TextLCD_HelloWorld by
main.cpp@3:e7802960032b, 2013-03-07 (annotated)
- 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?
User | Revision | Line number | New 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 | } |