A TextLCD interface for driving 4-bit 16x2 KS0066U LCD

Dependents:   KS0066U4_16x2 LAB05_Oppgave4 LAB05_Oppgave2 LAB05_Oppgave3 ... more

Import program

00001  #include "mbed.h"
00002  #include "TextLCD.h"
00003  
00004  TextLCD lcd(D11,D10,D9,D5,D4,D3,D2);
00005  int main()
00006  {    
00007     lcd.gotoxy(1,1);
00008     lcd.printf("Hello");
00009  
00010     lcd.gotoxy(4,2);
00011     lcd.printf("World");
00012     
00013     while(1) {
00014         wait_ms(300);
00015     }
00016  }

Import library

Public Member Functions

TextLCD (PinName rs, PinName rw, PinName e, PinName d4, PinName d5, PinName d6, PinName d7, const char *name=NULL)
Create a TextLCD interface and initiated 16x2 char mode.
void lcdComand (unsigned char cmd)
Writes a Command to the LCD-module.
void lcdData (unsigned char data)
Writes charecters to the LCD display.
void gotoxy (int, int)
moves text cursor to a screen column and row
int putc (int c)
Write a character to the LCD.
int printf (const char *format,...)
Write a formatted string to the LCD.

Protected Member Functions

void writeLcdBitD4toD7 (char data)
Writes the low nible of data to the LCD-module.
void pulseEn ()
Causes the LCD-module to read the data on the data input pins EN = 1 for L-to-H / EN = 0 for H-to-L.
void init_4BitMode2LinesDisplayOn ()
Enable 4 bit mode From KS0066U Documentation.

/media/uploads/rlanghbv/lcdmoduletop.jpg /media/uploads/rlanghbv/lcdmodulebottom.jpg

Committer:
rlanghbv
Date:
Sun Sep 20 11:06:45 2015 +0000
Revision:
3:d2f70de20dbe
Parent:
2:f0a520c95838
Child:
4:264d9b06bf60
Added constutcor width pin-names

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rlanghbv 1:8902f6be12a5 1 /*
rlanghbv 1:8902f6be12a5 2 * LCD.c
rlanghbv 1:8902f6be12a5 3 *
rlanghbv 1:8902f6be12a5 4 * Created: 20.01.2012 13:05:38
rlanghbv 1:8902f6be12a5 5 * Author: rul
rlanghbv 1:8902f6be12a5 6 */
rlanghbv 1:8902f6be12a5 7
rlanghbv 1:8902f6be12a5 8 #include "mbed.h"
rlanghbv 1:8902f6be12a5 9 #include "TextLCD.h"
rlanghbv 1:8902f6be12a5 10
rlanghbv 1:8902f6be12a5 11 #define SET_EN() (LCD_EN=1)
rlanghbv 1:8902f6be12a5 12 #define SET_RS() (LCD_RS=1)
rlanghbv 1:8902f6be12a5 13 #define SET_RW() (LCD_RW=1)
rlanghbv 1:8902f6be12a5 14
rlanghbv 1:8902f6be12a5 15 #define CLEAR_EN() (LCD_EN=0)
rlanghbv 1:8902f6be12a5 16 #define CLEAR_RS() (LCD_RS=0)
rlanghbv 1:8902f6be12a5 17 #define CLEAR_RW() (LCD_RW=0)
rlanghbv 1:8902f6be12a5 18
rlanghbv 1:8902f6be12a5 19
rlanghbv 1:8902f6be12a5 20 //Enables the LCD Module for use 2-Lines...
rlanghbv 3:d2f70de20dbe 21 /*TextLCD::TextLCD()
rlanghbv 3:d2f70de20dbe 22 {
rlanghbv 3:d2f70de20dbe 23 CLEAR_EN(); //EN =0
rlanghbv 3:d2f70de20dbe 24 wait_ms(500);
rlanghbv 3:d2f70de20dbe 25
rlanghbv 3:d2f70de20dbe 26 init_4BitMode2LinesDisplayOn(); //enabler 4 bit mode
rlanghbv 3:d2f70de20dbe 27 wait_us(100);
rlanghbv 3:d2f70de20dbe 28
rlanghbv 3:d2f70de20dbe 29 lcdComand(0x28);//(0b0010 1000); // 4- bit mode LCD 2 line 5x7 Matrix
rlanghbv 3:d2f70de20dbe 30 wait_us(100);
rlanghbv 3:d2f70de20dbe 31 lcdComand(0xE);//(0b0000 1110); //Hva gjør vi her ?
rlanghbv 3:d2f70de20dbe 32 wait_us(100);
rlanghbv 3:d2f70de20dbe 33 lcdComand(0x01); //(0b00000001); //Hva gjør vi her ?
rlanghbv 3:d2f70de20dbe 34 wait_us(100);
rlanghbv 3:d2f70de20dbe 35 lcdComand(0x06);//(0b00000110); //Hva gjør vi her ?
rlanghbv 3:d2f70de20dbe 36 wait_us(100);
rlanghbv 3:d2f70de20dbe 37 }*/
rlanghbv 3:d2f70de20dbe 38
rlanghbv 3:d2f70de20dbe 39 TextLCD::TextLCD(PinName rs,PinName rw, PinName e, PinName d4, PinName d5,
rlanghbv 3:d2f70de20dbe 40 PinName d6, PinName d7) : LCD_RS(rs),LCD_RW(rw),
rlanghbv 3:d2f70de20dbe 41 LCD_EN(e), LCD_D4(d4), LCD_D5(d5), LCD_D6(d6), LCD_D7(d7)
rlanghbv 1:8902f6be12a5 42 {
rlanghbv 1:8902f6be12a5 43 CLEAR_EN(); //EN =0
rlanghbv 1:8902f6be12a5 44 wait_ms(500);
rlanghbv 1:8902f6be12a5 45
rlanghbv 1:8902f6be12a5 46 init_4BitMode2LinesDisplayOn(); //enabler 4 bit mode
rlanghbv 1:8902f6be12a5 47 wait_us(100);
rlanghbv 1:8902f6be12a5 48
rlanghbv 1:8902f6be12a5 49 lcdComand(0x28);//(0b0010 1000); // 4- bit mode LCD 2 line 5x7 Matrix
rlanghbv 1:8902f6be12a5 50 wait_us(100);
rlanghbv 2:f0a520c95838 51 lcdComand(0xE);//(0b0000 1110); //Hva gjør vi her ?
rlanghbv 1:8902f6be12a5 52 wait_us(100);
rlanghbv 2:f0a520c95838 53 lcdComand(0x01); //(0b00000001); //Hva gjør vi her ?
rlanghbv 1:8902f6be12a5 54 wait_us(100);
rlanghbv 2:f0a520c95838 55 lcdComand(0x06);//(0b00000110); //Hva gjør vi her ?
rlanghbv 1:8902f6be12a5 56 wait_us(100);
rlanghbv 1:8902f6be12a5 57 }
rlanghbv 1:8902f6be12a5 58
rlanghbv 1:8902f6be12a5 59
rlanghbv 3:d2f70de20dbe 60
rlanghbv 3:d2f70de20dbe 61
rlanghbv 3:d2f70de20dbe 62
rlanghbv 3:d2f70de20dbe 63
rlanghbv 1:8902f6be12a5 64 // Causes the LCD-module to read the data on the data input pins
rlanghbv 1:8902f6be12a5 65 void TextLCD::pulseEn()
rlanghbv 1:8902f6be12a5 66 {
rlanghbv 1:8902f6be12a5 67 SET_EN(); // EN = 1 for L-to-H /
rlanghbv 1:8902f6be12a5 68 wait_us(200);
rlanghbv 1:8902f6be12a5 69 CLEAR_EN(); // EN = 0 for H-to-L
rlanghbv 1:8902f6be12a5 70 }
rlanghbv 1:8902f6be12a5 71
rlanghbv 1:8902f6be12a5 72 //Writes the low lible of data to the LCD-module data pins D4 to D7
rlanghbv 1:8902f6be12a5 73 void TextLCD::writeLcdBitD4toD7(char data)
rlanghbv 1:8902f6be12a5 74 {
rlanghbv 1:8902f6be12a5 75 if ( ( data >> 3) & 0x01) LCD_D7=1;
rlanghbv 1:8902f6be12a5 76 else LCD_D7=0;
rlanghbv 1:8902f6be12a5 77 if ( ( data >> 2) & 0x01) LCD_D6=1;
rlanghbv 1:8902f6be12a5 78 else LCD_D6=0;
rlanghbv 1:8902f6be12a5 79 if ( ( data >> 1) & 0x01) LCD_D5=1;
rlanghbv 1:8902f6be12a5 80 else LCD_D5=0;
rlanghbv 1:8902f6be12a5 81 if ( data & 0x01) LCD_D4=1;
rlanghbv 1:8902f6be12a5 82 else LCD_D4=0;
rlanghbv 1:8902f6be12a5 83 }
rlanghbv 1:8902f6be12a5 84
rlanghbv 1:8902f6be12a5 85 //Enable 4 bit mode From KS0066U Documentation
rlanghbv 1:8902f6be12a5 86 void TextLCD::init_4BitMode2LinesDisplayOn()
rlanghbv 1:8902f6be12a5 87 {
rlanghbv 1:8902f6be12a5 88 //Start by selecting configuration mode
rlanghbv 1:8902f6be12a5 89 CLEAR_RS();
rlanghbv 1:8902f6be12a5 90 CLEAR_RW();
rlanghbv 1:8902f6be12a5 91
rlanghbv 1:8902f6be12a5 92 //Enable 4 bit mode From KS0066U Documentation
rlanghbv 1:8902f6be12a5 93 writeLcdBitD4toD7(0x2);//(0b0010); // Select 4- bit start
rlanghbv 1:8902f6be12a5 94 pulseEn(); //LCD exec function
rlanghbv 1:8902f6be12a5 95 wait_us(100);
rlanghbv 1:8902f6be12a5 96
rlanghbv 1:8902f6be12a5 97 writeLcdBitD4toD7(0x2);////(0b0010); // Select 4- bit start (Already on the out port no need to write once more )
rlanghbv 1:8902f6be12a5 98 pulseEn(); //LCD exec function
rlanghbv 1:8902f6be12a5 99 wait_us(100);
rlanghbv 1:8902f6be12a5 100
rlanghbv 1:8902f6be12a5 101 writeLcdBitD4toD7(0xC);//(0b1100); // 2 Lines + Disp On
rlanghbv 1:8902f6be12a5 102 pulseEn(); //LCD exec function
rlanghbv 1:8902f6be12a5 103 wait_us(100);
rlanghbv 1:8902f6be12a5 104 }
rlanghbv 1:8902f6be12a5 105
rlanghbv 1:8902f6be12a5 106
rlanghbv 1:8902f6be12a5 107 //Writes the byte comand to the LCD-module using 4 bits mode
rlanghbv 1:8902f6be12a5 108 void TextLCD::lcdComand(unsigned char cmd)
rlanghbv 1:8902f6be12a5 109 {
rlanghbv 1:8902f6be12a5 110 writeLcdBitD4toD7(cmd>>4); //Write the first high cmd nibble
rlanghbv 1:8902f6be12a5 111
rlanghbv 1:8902f6be12a5 112 CLEAR_RS(); // RS = 0 for command
rlanghbv 1:8902f6be12a5 113 CLEAR_RW(); // RW = 0 for write
rlanghbv 1:8902f6be12a5 114
rlanghbv 1:8902f6be12a5 115 pulseEn(); //EN Hi-Lo
rlanghbv 1:8902f6be12a5 116
rlanghbv 1:8902f6be12a5 117 writeLcdBitD4toD7(cmd); //Write the second low cmd nibble
rlanghbv 1:8902f6be12a5 118
rlanghbv 1:8902f6be12a5 119 pulseEn(); //EN H to Lo
rlanghbv 1:8902f6be12a5 120
rlanghbv 1:8902f6be12a5 121 wait_us(100); //wait
rlanghbv 1:8902f6be12a5 122 }
rlanghbv 1:8902f6be12a5 123
rlanghbv 1:8902f6be12a5 124 void TextLCD::lcdData(unsigned char data)
rlanghbv 1:8902f6be12a5 125 {
rlanghbv 1:8902f6be12a5 126 writeLcdBitD4toD7(data>>4); //Write the first high data nibble
rlanghbv 1:8902f6be12a5 127
rlanghbv 1:8902f6be12a5 128 SET_RS(); // RS = 1 for data
rlanghbv 1:8902f6be12a5 129 CLEAR_RW(); // RW = 0 for write
rlanghbv 1:8902f6be12a5 130 pulseEn(); // EN H to Lo
rlanghbv 1:8902f6be12a5 131 wait_us(100); //wait
rlanghbv 1:8902f6be12a5 132
rlanghbv 1:8902f6be12a5 133 writeLcdBitD4toD7(data);
rlanghbv 1:8902f6be12a5 134
rlanghbv 1:8902f6be12a5 135 pulseEn(); //EN H to Lo
rlanghbv 1:8902f6be12a5 136 wait_us(100); //wait
rlanghbv 1:8902f6be12a5 137 }
rlanghbv 1:8902f6be12a5 138
rlanghbv 1:8902f6be12a5 139
rlanghbv 1:8902f6be12a5 140
rlanghbv 1:8902f6be12a5 141 //Moves cursor to the X,Y position
rlanghbv 2:f0a520c95838 142 void TextLCD::gotoxy(int x, int y)
rlanghbv 1:8902f6be12a5 143 {
rlanghbv 1:8902f6be12a5 144 unsigned char firstCharAdr[]= { 0x80,0xc0,0x94,0xD4};
rlanghbv 1:8902f6be12a5 145 lcdComand(firstCharAdr[y-1]+ x -1);
rlanghbv 1:8902f6be12a5 146
rlanghbv 1:8902f6be12a5 147 wait_us(100);
rlanghbv 1:8902f6be12a5 148 }
rlanghbv 1:8902f6be12a5 149
rlanghbv 1:8902f6be12a5 150 int TextLCD::_putc(int value)
rlanghbv 1:8902f6be12a5 151 {
rlanghbv 1:8902f6be12a5 152 lcdData(value);
rlanghbv 1:8902f6be12a5 153 return value;
rlanghbv 1:8902f6be12a5 154 }
rlanghbv 1:8902f6be12a5 155
rlanghbv 1:8902f6be12a5 156 int TextLCD::_getc() {
rlanghbv 1:8902f6be12a5 157 return -1;
rlanghbv 1:8902f6be12a5 158 }
rlanghbv 1:8902f6be12a5 159
rlanghbv 1:8902f6be12a5 160 //Writes a string to the LCD Display
rlanghbv 1:8902f6be12a5 161 void TextLCD::lcd_print(char *str)
rlanghbv 1:8902f6be12a5 162 {
rlanghbv 1:8902f6be12a5 163 unsigned char i =0;
rlanghbv 1:8902f6be12a5 164 while(str[i] !=0) {
rlanghbv 1:8902f6be12a5 165 lcdData(str[i]);
rlanghbv 1:8902f6be12a5 166 i++;
rlanghbv 1:8902f6be12a5 167 }
rlanghbv 1:8902f6be12a5 168 }