4-Line LCD Text Display. This is a simple library that can be used to print a formatted string on a 2 or 4 line Hitachi parallel display. By calling a single Method.
LCD.cpp@0:0e97b0a48eb8, 2013-10-08 (annotated)
- Committer:
- mr63
- Date:
- Tue Oct 08 15:41:55 2013 +0000
- Revision:
- 0:0e97b0a48eb8
LCD 4-Line Text Display. This is a simple library that can be used to print a formatted string on up to a 4 line display. By calling a single Method.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mr63 | 0:0e97b0a48eb8 | 1 | #include "LCD.h" |
mr63 | 0:0e97b0a48eb8 | 2 | |
mr63 | 0:0e97b0a48eb8 | 3 | //LCD Class Constructor for polling A2D using int ADC0848::Poll_A2D(unsigned char Channel) |
mr63 | 0:0e97b0a48eb8 | 4 | LCD::LCD(PinName pin1, PinName pin2, PinName pin3, PinName pin4, PinName pin5, PinName pin6, PinName pin7, PinName pin8, PinName pin9, PinName pin10) |
mr63 | 0:0e97b0a48eb8 | 5 | :_DataBus(pin1,pin2,pin3,pin4,pin5,pin6,pin7,pin8), _RS(pin9), _Enable(pin10) |
mr63 | 0:0e97b0a48eb8 | 6 | { |
mr63 | 0:0e97b0a48eb8 | 7 | Initialize(); |
mr63 | 0:0e97b0a48eb8 | 8 | } |
mr63 | 0:0e97b0a48eb8 | 9 | |
mr63 | 0:0e97b0a48eb8 | 10 | void LCD::Initialize() |
mr63 | 0:0e97b0a48eb8 | 11 | { |
mr63 | 0:0e97b0a48eb8 | 12 | wait(.01); |
mr63 | 0:0e97b0a48eb8 | 13 | _RS = 0; |
mr63 | 0:0e97b0a48eb8 | 14 | _Enable = 0; //EN and RS = 0 |
mr63 | 0:0e97b0a48eb8 | 15 | wait(.001); |
mr63 | 0:0e97b0a48eb8 | 16 | WriteLCDCmd(0x38); //Required for initialization |
mr63 | 0:0e97b0a48eb8 | 17 | wait(.001); |
mr63 | 0:0e97b0a48eb8 | 18 | WriteLCDCmd(0x38); //Required for initialization |
mr63 | 0:0e97b0a48eb8 | 19 | wait(.001); |
mr63 | 0:0e97b0a48eb8 | 20 | WriteLCDCmd(0x38); //Required for initialization |
mr63 | 0:0e97b0a48eb8 | 21 | wait(.001); |
mr63 | 0:0e97b0a48eb8 | 22 | WriteLCDCmd(0x38); //2 rows x 16 cols 5x7 dot char |
mr63 | 0:0e97b0a48eb8 | 23 | wait(.001); |
mr63 | 0:0e97b0a48eb8 | 24 | WriteLCDCmd(0x0C); //Display on, cursor off |
mr63 | 0:0e97b0a48eb8 | 25 | wait(.001); |
mr63 | 0:0e97b0a48eb8 | 26 | WriteLCDCmd(0x01); //Cursor home |
mr63 | 0:0e97b0a48eb8 | 27 | wait(.001); |
mr63 | 0:0e97b0a48eb8 | 28 | WriteLCDCmd(0x06); //incr cursor and shift on |
mr63 | 0:0e97b0a48eb8 | 29 | wait(.001); |
mr63 | 0:0e97b0a48eb8 | 30 | wait(.1); |
mr63 | 0:0e97b0a48eb8 | 31 | return; |
mr63 | 0:0e97b0a48eb8 | 32 | } |
mr63 | 0:0e97b0a48eb8 | 33 | |
mr63 | 0:0e97b0a48eb8 | 34 | void LCD::WriteLCDData(char c, char Pos) |
mr63 | 0:0e97b0a48eb8 | 35 | { |
mr63 | 0:0e97b0a48eb8 | 36 | WriteLCDCmd(Pos); |
mr63 | 0:0e97b0a48eb8 | 37 | _DataBus.output(); |
mr63 | 0:0e97b0a48eb8 | 38 | wait(.001); |
mr63 | 0:0e97b0a48eb8 | 39 | _DataBus = c; //Data to LCD Data |
mr63 | 0:0e97b0a48eb8 | 40 | _RS = 1; |
mr63 | 0:0e97b0a48eb8 | 41 | _Enable = 1;//RS = EN = 1 |
mr63 | 0:0e97b0a48eb8 | 42 | wait(.001); |
mr63 | 0:0e97b0a48eb8 | 43 | _Enable = 0; //EN = 0 |
mr63 | 0:0e97b0a48eb8 | 44 | return; |
mr63 | 0:0e97b0a48eb8 | 45 | } |
mr63 | 0:0e97b0a48eb8 | 46 | |
mr63 | 0:0e97b0a48eb8 | 47 | void LCD::WriteLCDCmd(char c) |
mr63 | 0:0e97b0a48eb8 | 48 | { |
mr63 | 0:0e97b0a48eb8 | 49 | _DataBus.output(); |
mr63 | 0:0e97b0a48eb8 | 50 | _DataBus = c; //Data to LCD data |
mr63 | 0:0e97b0a48eb8 | 51 | _RS = 0; //RS = 0 |
mr63 | 0:0e97b0a48eb8 | 52 | _Enable = 1; //En = 1 |
mr63 | 0:0e97b0a48eb8 | 53 | wait(.010); |
mr63 | 0:0e97b0a48eb8 | 54 | _Enable = 0; //En = 0 |
mr63 | 0:0e97b0a48eb8 | 55 | return; |
mr63 | 0:0e97b0a48eb8 | 56 | } |
mr63 | 0:0e97b0a48eb8 | 57 | |
mr63 | 0:0e97b0a48eb8 | 58 | void LCD::ClearDisplay() |
mr63 | 0:0e97b0a48eb8 | 59 | { |
mr63 | 0:0e97b0a48eb8 | 60 | WriteLCDCmd(0x01); // clear display |
mr63 | 0:0e97b0a48eb8 | 61 | } |
mr63 | 0:0e97b0a48eb8 | 62 | |
mr63 | 0:0e97b0a48eb8 | 63 | |
mr63 | 0:0e97b0a48eb8 | 64 | void LCD::Print_String(char* Pbuffer,char line_num, char offset) |
mr63 | 0:0e97b0a48eb8 | 65 | { |
mr63 | 0:0e97b0a48eb8 | 66 | unsigned int i=0; |
mr63 | 0:0e97b0a48eb8 | 67 | char pos = 0; |
mr63 | 0:0e97b0a48eb8 | 68 | switch (line_num) |
mr63 | 0:0e97b0a48eb8 | 69 | { |
mr63 | 0:0e97b0a48eb8 | 70 | case(1): |
mr63 | 0:0e97b0a48eb8 | 71 | pos = 0x80+offset; |
mr63 | 0:0e97b0a48eb8 | 72 | break; |
mr63 | 0:0e97b0a48eb8 | 73 | case(2): |
mr63 | 0:0e97b0a48eb8 | 74 | pos = 0xC0+offset; |
mr63 | 0:0e97b0a48eb8 | 75 | break; |
mr63 | 0:0e97b0a48eb8 | 76 | case(3): |
mr63 | 0:0e97b0a48eb8 | 77 | pos = 0x94+offset; |
mr63 | 0:0e97b0a48eb8 | 78 | break; |
mr63 | 0:0e97b0a48eb8 | 79 | case(4): |
mr63 | 0:0e97b0a48eb8 | 80 | pos = 0xD4+offset; |
mr63 | 0:0e97b0a48eb8 | 81 | break; |
mr63 | 0:0e97b0a48eb8 | 82 | default: |
mr63 | 0:0e97b0a48eb8 | 83 | break; |
mr63 | 0:0e97b0a48eb8 | 84 | } |
mr63 | 0:0e97b0a48eb8 | 85 | while (Pbuffer[i] != 0) |
mr63 | 0:0e97b0a48eb8 | 86 | { |
mr63 | 0:0e97b0a48eb8 | 87 | WriteLCDData(Pbuffer[i], pos+i); |
mr63 | 0:0e97b0a48eb8 | 88 | i++; |
mr63 | 0:0e97b0a48eb8 | 89 | } |
mr63 | 0:0e97b0a48eb8 | 90 | } |
mr63 | 0:0e97b0a48eb8 | 91 |