Loads eight custom characters to LCD

Dependencies:   mbed

Committer:
lnadal
Date:
Fri Oct 15 19:14:01 2010 +0000
Revision:
0:639529b48adf

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lnadal 0:639529b48adf 1
lnadal 0:639529b48adf 2 /* Lcd_Custom_Char
lnadal 0:639529b48adf 3
lnadal 0:639529b48adf 4 Author: Lluis Nadal.
lnadal 0:639529b48adf 5 Date: 15th October 2010.
lnadal 0:639529b48adf 6
lnadal 0:639529b48adf 7 Up to 8 characters can be programmed in CGRAM, but because CGRAM is a RAM, characters are lost
lnadal 0:639529b48adf 8 on power off and must be reloaded on power on.
lnadal 0:639529b48adf 9 Assuming 2x16 LCD with HD44780 Hitachi controller compatible.
lnadal 0:639529b48adf 10
lnadal 0:639529b48adf 11 */
lnadal 0:639529b48adf 12
lnadal 0:639529b48adf 13 #include "mbed.h"
lnadal 0:639529b48adf 14 #include "TextLCD.h"
lnadal 0:639529b48adf 15
lnadal 0:639529b48adf 16
lnadal 0:639529b48adf 17 // Defines LCD connections.
lnadal 0:639529b48adf 18 TextLCD lcd(p24, p26, p27, p28, p29, p30); // rs, e, d4, d5, d6, d7
lnadal 0:639529b48adf 19
lnadal 0:639529b48adf 20 // Defines 8 custom characters.
lnadal 0:639529b48adf 21 char custom_char[8][8] = {
lnadal 0:639529b48adf 22 {0x07,0x08,0x1F,0x08,0x1F,0x08,0x07,0x00}, // Euro sign.
lnadal 0:639529b48adf 23 {0x00,0x0E,0x11,0x11,0x11,0x0A,0x1B,0x00}, // Ohm sign.
lnadal 0:639529b48adf 24 {0x00,0x00,0x00,0x12,0x12,0x12,0x1C,0x10}, // Micro sign.
lnadal 0:639529b48adf 25 {0x00,0x00,0x1F,0x0A,0x0A,0x0A,0x0A,0x00}, // Pi sign.
lnadal 0:639529b48adf 26 {0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00}, // Degree sign.
lnadal 0:639529b48adf 27 {0x0E,0x04,0x0E,0x15,0x015,0x0E,0x04,0x0E},// Phi sign.
lnadal 0:639529b48adf 28 {0x04,0x0E,0x15,0x04,0x04,0x04,0x04,0x04}, // Arrow up.
lnadal 0:639529b48adf 29 {0x04,0x04,0x04,0x04,0x04,0x15,0x0E,0x04} // Arrow down.
lnadal 0:639529b48adf 30 };
lnadal 0:639529b48adf 31
lnadal 0:639529b48adf 32
lnadal 0:639529b48adf 33 // Defines LCD bus to write data.
lnadal 0:639529b48adf 34 BusOut Lcd_pins(p27, p28, p29, p30); // d4, d5, d6, d7
lnadal 0:639529b48adf 35
lnadal 0:639529b48adf 36 DigitalOut rs_pin(p24); // LCD pin rs (register select.)
lnadal 0:639529b48adf 37 DigitalOut e_pin(p26); // LCD pin e (enable).
lnadal 0:639529b48adf 38
lnadal 0:639529b48adf 39
lnadal 0:639529b48adf 40 // Because we use 4 bit LCD, data must be sent in two steps.
lnadal 0:639529b48adf 41 void writePort(int value) {
lnadal 0:639529b48adf 42
lnadal 0:639529b48adf 43 Lcd_pins = value >> 4; // Shifts 4 bit right.
lnadal 0:639529b48adf 44 wait(0.000040f); // Wait 40us.
lnadal 0:639529b48adf 45 e_pin = 0;
lnadal 0:639529b48adf 46 wait(0.000040f);
lnadal 0:639529b48adf 47 e_pin = 1;
lnadal 0:639529b48adf 48 Lcd_pins = value;
lnadal 0:639529b48adf 49 wait(0.000040f);
lnadal 0:639529b48adf 50 e_pin = 0;
lnadal 0:639529b48adf 51 wait(0.000040f);
lnadal 0:639529b48adf 52 e_pin = 1;
lnadal 0:639529b48adf 53 }
lnadal 0:639529b48adf 54
lnadal 0:639529b48adf 55
lnadal 0:639529b48adf 56
lnadal 0:639529b48adf 57 int main() {
lnadal 0:639529b48adf 58
lnadal 0:639529b48adf 59
lnadal 0:639529b48adf 60 lcd.cls();
lnadal 0:639529b48adf 61 lcd.printf("Loading...");
lnadal 0:639529b48adf 62 wait(2);
lnadal 0:639529b48adf 63
lnadal 0:639529b48adf 64
lnadal 0:639529b48adf 65 for (int j=0; j<8; j++) {
lnadal 0:639529b48adf 66
lnadal 0:639529b48adf 67 rs_pin = 0; // We send a command.
lnadal 0:639529b48adf 68
lnadal 0:639529b48adf 69 /* 0X40 is the initial CGRAM address. Because each character needs a total amount of 8 memory
lnadal 0:639529b48adf 70 locations, we increment addres in 8 units after each character.
lnadal 0:639529b48adf 71 */
lnadal 0:639529b48adf 72 writePort(0x40+8*j);
lnadal 0:639529b48adf 73
lnadal 0:639529b48adf 74
lnadal 0:639529b48adf 75 // Writes data.
lnadal 0:639529b48adf 76 rs_pin = 1; // We send data.
lnadal 0:639529b48adf 77
lnadal 0:639529b48adf 78
lnadal 0:639529b48adf 79 for (int i=0; i<8; i++) {
lnadal 0:639529b48adf 80 writePort(custom_char[j][i]);
lnadal 0:639529b48adf 81 }
lnadal 0:639529b48adf 82 }
lnadal 0:639529b48adf 83
lnadal 0:639529b48adf 84
lnadal 0:639529b48adf 85
lnadal 0:639529b48adf 86 lcd.cls();
lnadal 0:639529b48adf 87 wait(0.010);
lnadal 0:639529b48adf 88
lnadal 0:639529b48adf 89 lcd.printf("Custom character");
lnadal 0:639529b48adf 90 lcd.locate(0,1);
lnadal 0:639529b48adf 91
lnadal 0:639529b48adf 92 // Prints loaded custom characters. ASCII codes 0 to 7.
lnadal 0:639529b48adf 93 for (int j=0; j<8; j++) {
lnadal 0:639529b48adf 94 lcd.putc(j);
lnadal 0:639529b48adf 95 }
lnadal 0:639529b48adf 96
lnadal 0:639529b48adf 97 }