Dependents:   vmConfort_v6 Programski_zadatak_23 Projektni_zadatak_23 tempivolt

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?

UserRevisionLine numberNew 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