Dependents: vmConfort_v6 Programski_zadatak_23 Projektni_zadatak_23 tempivolt
Display1602.cpp@1:fc4c861451e1, 2012-04-08 (annotated)
- Committer:
- RichardUK
- Date:
- Sun Apr 08 12:51:51 2012 +0000
- Revision:
- 1:fc4c861451e1
- Parent:
- 0:6c0e68e0d876
Fixed a bug in the printf func.
Added comments.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
RichardUK | 0:6c0e68e0d876 | 1 | |
RichardUK | 0:6c0e68e0d876 | 2 | #include "Display1602.h" |
RichardUK | 0:6c0e68e0d876 | 3 | |
RichardUK | 0:6c0e68e0d876 | 4 | Display1602::Display1602(PinName registerSelect,PinName readWriteSelect,PinName readWriteEnable,PinName d0,PinName d1,PinName d2,PinName d3,PinName d4,PinName d5,PinName d6,PinName d7) |
RichardUK | 1:fc4c861451e1 | 5 | : rs(registerSelect), rw(readWriteSelect), e(readWriteEnable), data(d0,d1,d2,d3,d4,d5,d6,d7) |
RichardUK | 0:6c0e68e0d876 | 6 | { |
RichardUK | 0:6c0e68e0d876 | 7 | //To ensure we have waited 15ms after power up and VDD > 4.5v (don't know how to test VDD) |
RichardUK | 0:6c0e68e0d876 | 8 | wait_ms(20); |
RichardUK | 0:6c0e68e0d876 | 9 | |
RichardUK | 0:6c0e68e0d876 | 10 | //The init commands always sent using the 4bit interface. |
RichardUK | 0:6c0e68e0d876 | 11 | e = true; |
RichardUK | 0:6c0e68e0d876 | 12 | |
RichardUK | 0:6c0e68e0d876 | 13 | //Set interface to 8 bit mode |
RichardUK | 0:6c0e68e0d876 | 14 | SendCommand(0x38); |
RichardUK | 1:fc4c861451e1 | 15 | wait_ms(1); |
RichardUK | 0:6c0e68e0d876 | 16 | |
RichardUK | 0:6c0e68e0d876 | 17 | //Display off |
RichardUK | 0:6c0e68e0d876 | 18 | SendCommand(0x08); |
RichardUK | 0:6c0e68e0d876 | 19 | wait_ms(1); |
RichardUK | 0:6c0e68e0d876 | 20 | |
RichardUK | 0:6c0e68e0d876 | 21 | Clear(); |
RichardUK | 0:6c0e68e0d876 | 22 | |
RichardUK | 0:6c0e68e0d876 | 23 | //Set the display to 2 line and 5x11 font. |
RichardUK | 0:6c0e68e0d876 | 24 | SendCommand(0x06); |
RichardUK | 0:6c0e68e0d876 | 25 | wait_ms(1); |
RichardUK | 0:6c0e68e0d876 | 26 | |
RichardUK | 0:6c0e68e0d876 | 27 | //Init done, turn display on. |
RichardUK | 0:6c0e68e0d876 | 28 | SendCommand(0x0c); //No with no cursor. |
RichardUK | 0:6c0e68e0d876 | 29 | wait_ms(10); |
RichardUK | 0:6c0e68e0d876 | 30 | } |
RichardUK | 0:6c0e68e0d876 | 31 | |
RichardUK | 0:6c0e68e0d876 | 32 | void Display1602::Clear() |
RichardUK | 0:6c0e68e0d876 | 33 | { |
RichardUK | 0:6c0e68e0d876 | 34 | SendCommand(0x01); |
RichardUK | 0:6c0e68e0d876 | 35 | wait_ms(2);//Docs say have to wait more than 1.53 milliseconds after clearing display. |
RichardUK | 0:6c0e68e0d876 | 36 | } |
RichardUK | 0:6c0e68e0d876 | 37 | |
RichardUK | 0:6c0e68e0d876 | 38 | void Display1602::Print(const char *text) |
RichardUK | 0:6c0e68e0d876 | 39 | { |
RichardUK | 1:fc4c861451e1 | 40 | int n = 16; |
RichardUK | 1:fc4c861451e1 | 41 | while (*text && n--) |
RichardUK | 1:fc4c861451e1 | 42 | { |
RichardUK | 1:fc4c861451e1 | 43 | SendChar(*text); |
RichardUK | 1:fc4c861451e1 | 44 | text++; |
RichardUK | 1:fc4c861451e1 | 45 | } |
RichardUK | 0:6c0e68e0d876 | 46 | } |
RichardUK | 0:6c0e68e0d876 | 47 | |
RichardUK | 0:6c0e68e0d876 | 48 | void Display1602::printf(const char *format,...) |
RichardUK | 0:6c0e68e0d876 | 49 | { |
RichardUK | 0:6c0e68e0d876 | 50 | va_list args; |
RichardUK | 1:fc4c861451e1 | 51 | char buf[17]; |
RichardUK | 0:6c0e68e0d876 | 52 | |
RichardUK | 0:6c0e68e0d876 | 53 | va_start(args, format); |
RichardUK | 1:fc4c861451e1 | 54 | vsnprintf(buf,17,format, args); |
RichardUK | 0:6c0e68e0d876 | 55 | va_end(args); |
RichardUK | 0:6c0e68e0d876 | 56 | |
RichardUK | 0:6c0e68e0d876 | 57 | Print(buf); |
RichardUK | 0:6c0e68e0d876 | 58 | } |
RichardUK | 0:6c0e68e0d876 | 59 | |
RichardUK | 0:6c0e68e0d876 | 60 | void Display1602::SetXY(int x,int y) |
RichardUK | 0:6c0e68e0d876 | 61 | { |
RichardUK | 1:fc4c861451e1 | 62 | if (y == 0) |
RichardUK | 1:fc4c861451e1 | 63 | { |
RichardUK | 1:fc4c861451e1 | 64 | SendCommand (0x80 | x); |
RichardUK | 1:fc4c861451e1 | 65 | } |
RichardUK | 1:fc4c861451e1 | 66 | else |
RichardUK | 1:fc4c861451e1 | 67 | { |
RichardUK | 1:fc4c861451e1 | 68 | SendCommand (0xC0 | x); |
RichardUK | 1:fc4c861451e1 | 69 | } |
RichardUK | 0:6c0e68e0d876 | 70 | } |
RichardUK | 0:6c0e68e0d876 | 71 | |
RichardUK | 0:6c0e68e0d876 | 72 | void Display1602::SendCommand(int cmd) |
RichardUK | 0:6c0e68e0d876 | 73 | { |
RichardUK | 0:6c0e68e0d876 | 74 | rs = false;//read register |
RichardUK | 0:6c0e68e0d876 | 75 | rw = false;//Write mode |
RichardUK | 0:6c0e68e0d876 | 76 | e = true; |
RichardUK | 0:6c0e68e0d876 | 77 | data = cmd; |
RichardUK | 0:6c0e68e0d876 | 78 | wait_us(40);//Have to wait this time before we then drop the e line. Data sent on rising edge so has to be dropped. |
RichardUK | 0:6c0e68e0d876 | 79 | e = false; |
RichardUK | 0:6c0e68e0d876 | 80 | } |
RichardUK | 0:6c0e68e0d876 | 81 | |
RichardUK | 0:6c0e68e0d876 | 82 | void Display1602::SendChar(char c) |
RichardUK | 0:6c0e68e0d876 | 83 | { |
RichardUK | 0:6c0e68e0d876 | 84 | rs = true;//Writing data. |
RichardUK | 0:6c0e68e0d876 | 85 | rw = false;//Write mode |
RichardUK | 0:6c0e68e0d876 | 86 | e = true; |
RichardUK | 0:6c0e68e0d876 | 87 | data = c; |
RichardUK | 0:6c0e68e0d876 | 88 | wait_us(40);//Have to wait this time before we then drop the e line. Data sent on rising edge so has to be dropped. |
RichardUK | 0:6c0e68e0d876 | 89 | e = false; |
RichardUK | 0:6c0e68e0d876 | 90 | } |
RichardUK | 0:6c0e68e0d876 | 91 |