![](/media/cache/profiles/655f38d1675150dcd4cbaf8df41718e4.jpg.50x50_q85.png)
program for ping pong robot
Diff: LCD.h
- Revision:
- 0:14b64813c04d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LCD.h Wed Jun 29 00:02:00 2016 +0000 @@ -0,0 +1,286 @@ +DigitalOut LCD_DB4(p5); +DigitalOut LCD_DB5(p6); +DigitalOut LCD_DB6(p7); +DigitalOut LCD_DB7(p8); + +DigitalOut LCD_EN(p30); +DigitalOut LCD_RW(p29); +DigitalOut LCD_RS(p28); + +unsigned int get_power2(int a) +{ + int i = 0; + + unsigned int power = 1; + for(i = 0; i < a; i++) { + power *= 2; + } + return power; +} + +unsigned int get_bit(char word, int a) +{ + unsigned int s = get_power2(a); + + if((word & s) != 0) + return(1); + else + return(0); +} + +void setDB_singleShot(unsigned short x) +{ + /* This hex number is the same as binary 0001 */ + short MASK = 0x01; + + LCD_DB4 = (MASK & x) ? 1 : 0; + MASK = MASK << 1; + LCD_DB5 = (MASK & x) ? 1 : 0; + MASK = MASK << 1; + LCD_DB6 = (MASK & x) ? 1 : 0; + MASK = MASK << 1; + LCD_DB7 = (MASK & x) ? 1 : 0; +} + +void EnableImp() +{ + wait(0.02); + LCD_EN = 1; + wait(0.02); + LCD_EN = 0; + wait(0.02); +} + +void FastEnableImp() +{ + wait(0.001); + LCD_EN = 1; + wait(0.001); + LCD_EN = 0; + wait(0.001); +} + +void init() +{ + //SET ALL BITS TO 0 + LCD_RS = 0; + LCD_RW = 0; + LCD_EN = 0; + + setDB_singleShot(0x00); //HEX 0x00 is 0000 in Binary + EnableImp(); + //DISPLAY IN 4BIT MODE + LCD_RS = 0; + LCD_RW = 0; + setDB_singleShot(0x02); //HEX 0x02 is 0010 in Binary + EnableImp(); + + setDB_singleShot(0x00); //HEX 0x00 is 0000 in Binary + EnableImp(); + //SET FUNCTION + LCD_RS = 0; + LCD_RW = 0; + setDB_singleShot(0x0C); //HEX 0x0C is 1100 in Binary + EnableImp(); + + setDB_singleShot(0x00); //HEX 0x00 is 0000 in Binary + EnableImp(); + //DISPLAY ON + LCD_RS = 0; + LCD_RW = 0; + setDB_singleShot(0x0C); //HEX 0x0F is 1111 in Binary --> Cursor ON + BLINKING + EnableImp(); //HEX 0x0C is 1100 in Binary --> Cursor OFF + NO BLINKING + + setDB_singleShot(0x00); //HEX 0x00 is 0000 in Binary + EnableImp(); + //DISPLAY CLEAR + LCD_RS = 0; + LCD_RW = 0; + setDB_singleShot(0x01); //HEX 0x01 is 0001 in Binary + EnableImp(); + + setDB_singleShot(0x00); //HEX 0x00 is 0000 in Binary + EnableImp(); + //SET ENTRY MODE + LCD_RS = 0; + LCD_RW = 0; + setDB_singleShot(0x06); //HEX 0x06 is 0110 in Binary + EnableImp(); + + +} + +void clearDispl() +{ + //DISPLAY CLEAR + LCD_RS = 0; + LCD_RW = 0; + wait(0.001); + setDB_singleShot(0x00); //HEX 0x00 is 0000 in Binary + FastEnableImp(); + + setDB_singleShot(0x01); //HEX 0x01 is 0001 in Binary + FastEnableImp(); +} + +void setCursorPos(unsigned short pos) +{ + LCD_RS = 0; + LCD_RW = 0; + + /* This hex number is the same as binary 0001 */ + short MASK = 0x01; + + MASK = MASK << 4; + LCD_DB4 = (MASK & pos) ? 1 : 0; + MASK = MASK << 1; + LCD_DB5 = (MASK & pos) ? 1 : 0; + MASK = MASK << 1; + LCD_DB6 = (MASK & pos) ? 1 : 0; + MASK = MASK << 1; + LCD_DB7 = 1; + FastEnableImp(); + + MASK = 0x01; + LCD_DB4 = (MASK & pos) ? 1 : 0; + MASK = MASK << 1; + LCD_DB5 = (MASK & pos) ? 1 : 0; + MASK = MASK << 1; + LCD_DB6 = (MASK & pos) ? 1 : 0; + MASK = MASK << 1; + LCD_DB7 = (MASK & pos) ? 1 : 0; + FastEnableImp(); +} + +void writeChar(char x) +{ + LCD_RS = 1; + LCD_RW = 0; + + LCD_DB4 = get_bit(x, 4); + LCD_DB5 = get_bit(x, 5); + LCD_DB6 = get_bit(x, 6); + LCD_DB7 = get_bit(x, 7); + EnableImp(); + + LCD_DB4 = get_bit(x, 0); + LCD_DB5 = get_bit(x, 1); + LCD_DB6 = get_bit(x, 2); + LCD_DB7 = get_bit(x, 3); + EnableImp(); +} + +void fastWriteChar(char x) +{ + LCD_RS = 1; + LCD_RW = 0; + + LCD_DB4 = get_bit(x, 4); + LCD_DB5 = get_bit(x, 5); + LCD_DB6 = get_bit(x, 6); + LCD_DB7 = get_bit(x, 7); + FastEnableImp(); + + LCD_DB4 = get_bit(x, 0); + LCD_DB5 = get_bit(x, 1); + LCD_DB6 = get_bit(x, 2); + LCD_DB7 = get_bit(x, 3); + FastEnableImp(); +} + +void writeHex(unsigned short x, unsigned short y) +{ + LCD_RS = 1; + LCD_RW = 0; + + setDB_singleShot(x); + EnableImp(); + + setDB_singleShot(y); + EnableImp(); +} + +void writeString(char str[]) +{ + while(*str) { + writeChar(*str); + str++; + } +} + +void fastWriteString(char str[]) +{ + while(*str) { + fastWriteChar(*str); + str++; + } +} + +void writeHex_RS0_RW0(unsigned short x, unsigned short y) +{ + //SET CGRAM Address + LCD_RS = 0; + LCD_RW = 0; + + setDB_singleShot(x); + EnableImp(); + + setDB_singleShot(y); + EnableImp(); +} + +void writeHex_RS1_RW0(unsigned short x, unsigned short y) +{ + LCD_RS = 1; + LCD_RW = 0; + + setDB_singleShot(x); + EnableImp(); + + setDB_singleShot(y); + EnableImp(); +} + +void write_pixel_character(void) +{ + + for(int i = 0; i < 8; i++) { + //Set the Adress to 0100 0000 to 0100 0111 + writeHex_RS0_RW0(4, i); + //Write the user specified pixel line + switch(i) { + case 0: + writeHex(0,14); + break; + case 1: + writeHex(0,14); + break; + case 2: + writeHex(0,4); + break; + case 3: + writeHex(1,15); + break; + case 4: + writeHex(0,4); + break; + case 5: + writeHex(0,14); + break; + case 6: + writeHex(0,10); + break; + case 7: + writeHex(0,10); + break; + default: + writeHex(0,0); + break; + } + } + + writeHex(0,0); + + return; +} +