LCD display

Dependents:   LAB05_Oppgave4

Fork of LCDLib by Rune Langoy

Committer:
madmonkeyman82
Date:
Thu Oct 15 15:59:36 2015 +0000
Revision:
20:5ab883d81a20
Parent:
17:5ffb16966db2
LCD

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rlanghbv 1:8902f6be12a5 1
rlanghbv 1:8902f6be12a5 2 #include "mbed.h"
rlanghbv 1:8902f6be12a5 3 #include "TextLCD.h"
rlanghbv 1:8902f6be12a5 4
rlanghbv 1:8902f6be12a5 5 #define SET_EN() (LCD_EN=1)
rlanghbv 1:8902f6be12a5 6 #define SET_RS() (LCD_RS=1)
rlanghbv 1:8902f6be12a5 7 #define SET_RW() (LCD_RW=1)
rlanghbv 1:8902f6be12a5 8
rlanghbv 1:8902f6be12a5 9 #define CLEAR_EN() (LCD_EN=0)
rlanghbv 1:8902f6be12a5 10 #define CLEAR_RS() (LCD_RS=0)
rlanghbv 1:8902f6be12a5 11 #define CLEAR_RW() (LCD_RW=0)
rlanghbv 1:8902f6be12a5 12
rlanghbv 1:8902f6be12a5 13
rlanghbv 4:264d9b06bf60 14 TextLCD::TextLCD(PinName rs,PinName rw, PinName e, PinName d4, PinName d5,
rlanghbv 15:dc4f024fd1aa 15 PinName d6, PinName d7, const char* name) : Stream(name), LCD_RS(rs),LCD_RW(rw), LCD_EN(e),
rlanghbv 10:8d5383e2546e 16 LCD_D4to7(d4,d5,d6,d7)
rlanghbv 10:8d5383e2546e 17 {
rlanghbv 4:264d9b06bf60 18 CLEAR_RW();
rlanghbv 4:264d9b06bf60 19 wait_ms(50); // Wait for disp to turn on
rlanghbv 4:264d9b06bf60 20
rlanghbv 3:d2f70de20dbe 21 CLEAR_EN(); //EN =0
rlanghbv 4:264d9b06bf60 22 CLEAR_RS();
rlanghbv 3:d2f70de20dbe 23
rlanghbv 4:264d9b06bf60 24 init_4BitMode2LinesDisplayOn(); //enabler 4 bit mode
rlanghbv 4:264d9b06bf60 25 wait_ms(1);
rlanghbv 4:264d9b06bf60 26
madmonkeyman82 20:5ab883d81a20 27 lcdCommand(0x00);
rlanghbv 3:d2f70de20dbe 28 wait_us(100);
rlanghbv 3:d2f70de20dbe 29
madmonkeyman82 20:5ab883d81a20 30 lcdCommand(0x28);//(0b0010 1000); // 4- bit mode LCD 2 line 16x2 Matrix
rlanghbv 3:d2f70de20dbe 31 wait_us(100);
rlanghbv 4:264d9b06bf60 32
madmonkeyman82 20:5ab883d81a20 33 lcdCommand(0x01); //(0b00000001);
rlanghbv 3:d2f70de20dbe 34 wait_us(100);
madmonkeyman82 20:5ab883d81a20 35 lcdCommand(0x06);//(0b00000110);
rlanghbv 3:d2f70de20dbe 36 wait_us(100);
madmonkeyman82 20:5ab883d81a20 37 lcdCommand(0xC);//(0b0000 1100);
rlanghbv 17:5ffb16966db2 38 wait_us(100);
rlanghbv 1:8902f6be12a5 39 }
rlanghbv 1:8902f6be12a5 40
rlanghbv 1:8902f6be12a5 41 // Causes the LCD-module to read the data on the data input pins
rlanghbv 1:8902f6be12a5 42 void TextLCD::pulseEn()
rlanghbv 1:8902f6be12a5 43 {
rlanghbv 1:8902f6be12a5 44 SET_EN(); // EN = 1 for L-to-H /
rlanghbv 1:8902f6be12a5 45 wait_us(200);
rlanghbv 1:8902f6be12a5 46 CLEAR_EN(); // EN = 0 for H-to-L
rlanghbv 1:8902f6be12a5 47 }
rlanghbv 1:8902f6be12a5 48
rlanghbv 1:8902f6be12a5 49 //Writes the low lible of data to the LCD-module data pins D4 to D7
rlanghbv 1:8902f6be12a5 50 void TextLCD::writeLcdBitD4toD7(char data)
rlanghbv 1:8902f6be12a5 51 {
rlanghbv 8:b12188ddd403 52 LCD_D4to7=data;
rlanghbv 1:8902f6be12a5 53 }
rlanghbv 1:8902f6be12a5 54
rlanghbv 1:8902f6be12a5 55 //Enable 4 bit mode From KS0066U Documentation
rlanghbv 1:8902f6be12a5 56 void TextLCD::init_4BitMode2LinesDisplayOn()
rlanghbv 1:8902f6be12a5 57 {
rlanghbv 16:ca413e232eaa 58
rlanghbv 1:8902f6be12a5 59 //Start by selecting configuration mode
rlanghbv 1:8902f6be12a5 60 CLEAR_RS();
rlanghbv 1:8902f6be12a5 61 CLEAR_RW();
rlanghbv 1:8902f6be12a5 62
rlanghbv 16:ca413e232eaa 63 wait(.015); // Wait 150ms to ensure powered up
rlanghbv 16:ca413e232eaa 64
rlanghbv 4:264d9b06bf60 65 // send "Display Settings" 3 times (Only top nibble of 0x30 as we've got 4-bit bus)
rlanghbv 4:264d9b06bf60 66 writeLcdBitD4toD7(0x3);
rlanghbv 4:264d9b06bf60 67 pulseEn();
rlanghbv 4:264d9b06bf60 68 wait_ms(2);
rlanghbv 4:264d9b06bf60 69 writeLcdBitD4toD7(0x3);
rlanghbv 4:264d9b06bf60 70 pulseEn();
rlanghbv 4:264d9b06bf60 71 wait_ms(2);
rlanghbv 4:264d9b06bf60 72 writeLcdBitD4toD7(0x3);
rlanghbv 4:264d9b06bf60 73 pulseEn();
rlanghbv 4:264d9b06bf60 74 wait_ms(2);
rlanghbv 4:264d9b06bf60 75
rlanghbv 1:8902f6be12a5 76 //Enable 4 bit mode From KS0066U Documentation
rlanghbv 16:ca413e232eaa 77 writeLcdBitD4toD7(0x2);// (0b0010) 4- bit start / 4-bit mode
rlanghbv 1:8902f6be12a5 78 wait_us(100);
rlanghbv 16:ca413e232eaa 79 writeLcdBitD4toD7(0x2);
rlanghbv 16:ca413e232eaa 80 pulseEn();
rlanghbv 16:ca413e232eaa 81 wait_us(100);
rlanghbv 1:8902f6be12a5 82 writeLcdBitD4toD7(0x2);////(0b0010); // Select 4- bit start (Already on the out port no need to write once more )
rlanghbv 1:8902f6be12a5 83 pulseEn(); //LCD exec function
rlanghbv 16:ca413e232eaa 84 wait_us(50);
rlanghbv 1:8902f6be12a5 85
rlanghbv 1:8902f6be12a5 86 writeLcdBitD4toD7(0xC);//(0b1100); // 2 Lines + Disp On
rlanghbv 1:8902f6be12a5 87 pulseEn(); //LCD exec function
rlanghbv 16:ca413e232eaa 88
madmonkeyman82 20:5ab883d81a20 89 lcdCommand(0x01); // Clear Display
rlanghbv 16:ca413e232eaa 90 wait_ms(3);
madmonkeyman82 20:5ab883d81a20 91 lcdCommand(0x28); // Function set 001 BW N F - -
madmonkeyman82 20:5ab883d81a20 92 lcdCommand(0x06); // Cursor Direction and Display Shift : 0000 01 CD S (CD 0-left, 1-right S(hift) 0-no, 1-yes
madmonkeyman82 20:5ab883d81a20 93 lcdCommand(0x0C); // Dispon + Hide cursor
rlanghbv 1:8902f6be12a5 94 wait_us(100);
rlanghbv 1:8902f6be12a5 95 }
rlanghbv 1:8902f6be12a5 96
rlanghbv 1:8902f6be12a5 97
rlanghbv 1:8902f6be12a5 98 //Writes the byte comand to the LCD-module using 4 bits mode
madmonkeyman82 20:5ab883d81a20 99 void TextLCD::lcdCommand(unsigned char cmd)
rlanghbv 1:8902f6be12a5 100 {
rlanghbv 1:8902f6be12a5 101 writeLcdBitD4toD7(cmd>>4); //Write the first high cmd nibble
rlanghbv 1:8902f6be12a5 102
rlanghbv 1:8902f6be12a5 103 CLEAR_RS(); // RS = 0 for command
rlanghbv 1:8902f6be12a5 104 CLEAR_RW(); // RW = 0 for write
rlanghbv 1:8902f6be12a5 105
rlanghbv 1:8902f6be12a5 106 pulseEn(); //EN Hi-Lo
rlanghbv 1:8902f6be12a5 107
rlanghbv 1:8902f6be12a5 108 writeLcdBitD4toD7(cmd); //Write the second low cmd nibble
rlanghbv 1:8902f6be12a5 109
rlanghbv 1:8902f6be12a5 110 pulseEn(); //EN H to Lo
rlanghbv 1:8902f6be12a5 111
rlanghbv 1:8902f6be12a5 112 wait_us(100); //wait
rlanghbv 1:8902f6be12a5 113 }
rlanghbv 1:8902f6be12a5 114
rlanghbv 1:8902f6be12a5 115 void TextLCD::lcdData(unsigned char data)
rlanghbv 1:8902f6be12a5 116 {
rlanghbv 1:8902f6be12a5 117 writeLcdBitD4toD7(data>>4); //Write the first high data nibble
rlanghbv 1:8902f6be12a5 118
rlanghbv 1:8902f6be12a5 119 SET_RS(); // RS = 1 for data
rlanghbv 1:8902f6be12a5 120 CLEAR_RW(); // RW = 0 for write
rlanghbv 1:8902f6be12a5 121 pulseEn(); // EN H to Lo
rlanghbv 1:8902f6be12a5 122 wait_us(100); //wait
rlanghbv 1:8902f6be12a5 123
rlanghbv 1:8902f6be12a5 124 writeLcdBitD4toD7(data);
rlanghbv 1:8902f6be12a5 125
rlanghbv 1:8902f6be12a5 126 pulseEn(); //EN H to Lo
rlanghbv 1:8902f6be12a5 127 wait_us(100); //wait
rlanghbv 1:8902f6be12a5 128 }
rlanghbv 1:8902f6be12a5 129
rlanghbv 1:8902f6be12a5 130 //Moves cursor to the X,Y position
rlanghbv 2:f0a520c95838 131 void TextLCD::gotoxy(int x, int y)
rlanghbv 1:8902f6be12a5 132 {
rlanghbv 1:8902f6be12a5 133 unsigned char firstCharAdr[]= { 0x80,0xc0,0x94,0xD4};
madmonkeyman82 20:5ab883d81a20 134 lcdCommand(firstCharAdr[y-1]+ x -1);
rlanghbv 1:8902f6be12a5 135
rlanghbv 1:8902f6be12a5 136 wait_us(100);
rlanghbv 1:8902f6be12a5 137 }
rlanghbv 1:8902f6be12a5 138
rlanghbv 1:8902f6be12a5 139 int TextLCD::_putc(int value)
rlanghbv 1:8902f6be12a5 140 {
rlanghbv 1:8902f6be12a5 141 lcdData(value);
rlanghbv 1:8902f6be12a5 142 return value;
rlanghbv 1:8902f6be12a5 143 }
rlanghbv 1:8902f6be12a5 144
rlanghbv 4:264d9b06bf60 145 int TextLCD::_getc()
rlanghbv 1:8902f6be12a5 146 {
rlanghbv 4:264d9b06bf60 147 return -1;
rlanghbv 1:8902f6be12a5 148 }