Baseline for testing
Diff: LCD.h
- Revision:
- 0:c428f1d60316
- Child:
- 1:0f1dffc6103a
diff -r 000000000000 -r c428f1d60316 LCD.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LCD.h Thu Jul 25 00:43:40 2019 +0000 @@ -0,0 +1,155 @@ + +#ifndef _LCD_ +#define _LCD_ + +#include "mbed.h" + + +/* + * LCD commands. + */ +// Clear display: +#define LCD_CLEAR (1 << 0) + +// return cursor and LCD to home position: +#define LCD_HOME (1 << 1) + +// set cursor move direction: +#define LCD_MOVEDIR (1 << 2) +// shift display when byte written to display +#define LCD_MOVEDIR_SHIFT (1 << 0) +// increment the cursor after each byte written: +#define LCD_MOVEDIR_ID (1 << 1) + +// Enable display/cursor: +#define LCD_DISPEN (1 << 3) +// turn cursor blink on: +#define LCD_DISPEN_BLINK (1 << 0) +// turn cursor on: +#define LCD_DISPEN_CURSOR (1 << 1) +// turn display on: +#define LCD_DISPEN_DISP (1 << 2) + +// move cursor/shift display: +#define LCD_MCSD (1 << 4) +// direction of shift (right if set): +#define LCD_MCSD_RL (1 << 2) +// turn on display shift: +#define LCD_MCSD_SC (1 << 3) + +// set interface length: +#define LCD_SETIFLEN (1 << 5) +// set character font 5x10 (1) or 5x7 (0) +#define LCD_SETIFLEN_F (1 << 2) +// set # of display lines 1 if 0, 2 if 1: +#define LCD_SETIFLEN_N (1 << 3) +// set interface length 8 bits if 1, 4 bits if 0 +#define LCD_SETIFLEN_DL (1 << 4) + +// move cursor into CGRAM: +#define LCD_MOVERAM (1 << 6) + +// Move cursor to display: +#define LCD_MOVEDISPLAY (1 << 7) +#define LCD_DATAREAD 0x00 +#define LCD_DATAWRITE 0xFF +#define LCD_READ 1 +#define LCD_WRITE 0 +#define LCD_HIGH 1 +#define LCD_LOW 0 + +#define LCD_RS_COMMANDREGISTERS 0 +#define LCD_RS_DATAREGISTERS 1 + +#define LCD_wakeUp 0x30 // +#define LCD_functionSet 0x28 // Sets the interface data type to 4 bits, 2 lines, and font size 5x8. 0x28 = 0010 1000 +#define LCD_returnHome 0x02 // Sets the cursor to the beginning of the screen. 0x02 = 0000 0010 +#define LCD_setCursor 0x10 // Sets cursor moving and display shift, and direction without changing DDRAM data. 0x10 = 0001 0000 +#define LCD_setDisplayOn 0x0C // Sets Entire Display on, Display on, Cursor on. 0x0C = 0000 1011 +#define LCD_setDisplayEdit 0x0E // Sets Entire Display on, Display on, Cursor on. 0x0C = 0000 1011 +#define LCD_setDisplayBlink 0x0F// Sets Entire Display on, Display on, Cursor on. 0x0C = 0000 1011 +#define LCD_setDisplayOff 0x08 // Sets Entire Display off, Display on, Cursor on. 0x0C = 0000 1000 +#define LCD_entryModeSet 0x06 // Sets Entry Mode. 0x06 = 0000 0110 +#define LCD_cursorModeSet 0x06 // Sets Entry Mode. 0x06 = 0000 0110 +#define LCD_clearDisplay 0x01 // Resets the whole display to blank + + + +class LCD +{ + public: + + LCD(); + virtual ~LCD(); + + + void init(void) ; + + void writeByte1(int value); + void writeByte2(int value); + + void command1(char i) ; + void command2(char i) ; + + void writedata1(char i) ; + void writedata2(char i) ; + + void nextline1(); + void nextline2(); + void display(char *show); + + + int isBusy(int e1,int e2); + + int isBusy1(void); + int isBusy2(void); + + void waitBusy(); + + void cls() { clear (1,1); }; + void clear(int e1,int e2); + void locate(int row, int column); + + void putc(const char c); + void printf(const char* fmt, ...); + + void write(const char* text); + void writeLine(int line, const char* text ); + void writeCharacter(const char c, int row, int column); + void writeCharacters(const char* text, int row, int column); + + void writeCommand(char value,int e1,int e2); + void writeChar (char value,int e1,int e2); + void writeData (char value,int e1,int e2); + + void character (int row, int column, char c); + + int rows() {return 4;} + + int columns() {return 40;} + + int address(int row, int column); + + /* for debugging and development */ + void dump(Serial * pc); + + void setCursorMode (int mode); + + private: + DigitalInOut LCD_E1; + DigitalInOut LCD_E2; + DigitalInOut LCD_RS; + DigitalInOut LCD_RW; + + BusInOut LCD_DATA; + + int _row; + int _column; + char isOutput; + + char displayBuffer[4][40]; + + +}; + +#endif