Lluis Nadal
/
Lcd_Custom_Char
Loads eight custom characters to LCD
Revision 0:639529b48adf, committed 2010-10-15
- Comitter:
- lnadal
- Date:
- Fri Oct 15 19:14:01 2010 +0000
- Commit message:
Changed in this revision
diff -r 000000000000 -r 639529b48adf TextLCD.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TextLCD.lib Fri Oct 15 19:14:01 2010 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/simon/code/TextLCD/#44f34c09bd37
diff -r 000000000000 -r 639529b48adf main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Oct 15 19:14:01 2010 +0000 @@ -0,0 +1,97 @@ + +/* Lcd_Custom_Char + +Author: Lluis Nadal. +Date: 15th October 2010. + +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" + + +// Defines LCD connections. +TextLCD lcd(p24, p26, p27, p28, p29, p30); // rs, e, d4, d5, d6, d7 + +// Defines 8 custom characters. +char custom_char[8][8] = { + {0x07,0x08,0x1F,0x08,0x1F,0x08,0x07,0x00}, // Euro sign. + {0x00,0x0E,0x11,0x11,0x11,0x0A,0x1B,0x00}, // Ohm sign. + {0x00,0x00,0x00,0x12,0x12,0x12,0x1C,0x10}, // Micro sign. + {0x00,0x00,0x1F,0x0A,0x0A,0x0A,0x0A,0x00}, // Pi sign. + {0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00}, // Degree sign. + {0x0E,0x04,0x0E,0x15,0x015,0x0E,0x04,0x0E},// Phi sign. + {0x04,0x0E,0x15,0x04,0x04,0x04,0x04,0x04}, // Arrow up. + {0x04,0x04,0x04,0x04,0x04,0x15,0x0E,0x04} // Arrow down. +}; + + +// Defines LCD bus to write data. +BusOut Lcd_pins(p27, p28, p29, p30); // d4, d5, d6, d7 + +DigitalOut rs_pin(p24); // LCD pin rs (register select.) +DigitalOut e_pin(p26); // LCD pin e (enable). + + +// Because we use 4 bit LCD, data must be sent in two steps. +void writePort(int value) { + + Lcd_pins = value >> 4; // Shifts 4 bit right. + wait(0.000040f); // Wait 40us. + 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.cls(); + lcd.printf("Loading..."); + wait(2); + + + for (int j=0; j<8; j++) { + + rs_pin = 0; // We send a 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 data. + rs_pin = 1; // We send data. + + + for (int i=0; i<8; i++) { + writePort(custom_char[j][i]); + } + } + + + + lcd.cls(); + wait(0.010); + + lcd.printf("Custom character"); + lcd.locate(0,1); + +// Prints loaded custom characters. ASCII codes 0 to 7. + for (int j=0; j<8; j++) { + lcd.putc(j); + } + +} \ No newline at end of file
diff -r 000000000000 -r 639529b48adf mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Fri Oct 15 19:14:01 2010 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/e2ac27c8e93e