liamgrazier lcd library 16x02
Fork of LGLCDv2 by
Revision 2:d812a2a643bc, committed 2018-01-09
- Comitter:
- liam_grazier
- Date:
- Tue Jan 09 11:32:39 2018 +0000
- Parent:
- 1:9020af47a312
- Commit message:
- V9.9
Changed in this revision
lglcd.cpp | Show annotated file Show diff for this revision Revisions of this file |
lglcd.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 9020af47a312 -r d812a2a643bc lglcd.cpp --- a/lglcd.cpp Fri Jan 05 17:56:27 2018 +0000 +++ b/lglcd.cpp Tue Jan 09 11:32:39 2018 +0000 @@ -1,84 +1,81 @@ +/* ELEC351 COURSEWORK 2018 +DESIGNED USING MBED ONLINE COMPILER IMPORTED TO KEIL +LIAM GRAZIER // DOUG TILLEY // ALEX BARON + */ #include "mbed.h" #include "lglcd.h" - -lglcd::lglcd(PinName rs, PinName e, PinName d4, PinName d5,PinName d6, PinName d7) : _lcdrs(rs),_lcde(e), _lcdinfo(d4, d5, d6, d7) +lglcd::lglcd(PinName RS, PinName E, PinName D4, PinName D5,PinName D6, PinName D7) : _lcdrs(RS),_lcde(E), _lcdinfo(D4, D5, D6, D7) { - cline=1; //set the current line to the top line - cpos=0; //sets the current position to the left most CHARACTER - _lcde=1; //clear enable + _lcde=1; //clear enable _lcdrs=0; // command - l = 0; writedata(_lcde,CMD); - wait(0.000004); //delay for LCD to initialise. - writedata(0x28,CMD); //set to 4 bit interface, 2 line and 5*8 font + wait(0.000004); + writedata(0x28,CMD); wait(0.000004); - writedata(0x0C,CMD); //cursor on, cursor position blink + writedata(0x0C,CMD); //turnoncursor and blink wait(0.000004); writedata(0x10,CMD); wait(0.000004); - LCD_CLR; //clear display + LCD_CLR; //clearlcd wait(0.000004); - writedata(0x06,CMD); //move cursor right after write + writedata(0x06,CMD); //movecursor right wait(0.000004); - LCD_HOME; //return home - + LCD_HOME; //Return to the 0,0 } -/*---------------------------------------------------------------------*/ -void lglcd::clear(void)//set a function to clear the lcd since just calling LCD_CLR can throw error if called to quickly +void lglcd::clear(void)//lcd clear command with a tiny wait to ensure commadn finishes { - LCD_CLR; - wait(0.002); //2ms delay to stop timing error + LCD_CLR; //clearcommandwitha small wait + wait(0.002); } -void lglcd::setline(int row,int column) +void lglcd::setline(int row,int column) //set lu=ine and column function { - if(row == 1) { // switch statement for placing the cursor - writedata(LINE1|column,CMD); //set lcd to line one and correct position - wait(0.005); //2ms delay to stop empty screen timing error + if(row == 1) + { + writedata(LINE1|column,CMD); //line1 included + wait(0.005); } - if(row == 2){ - writedata(LINE2|column,CMD); //set lcd to line two and correct position - wait(0.005); //2ms delay to stop empty screen timing error - } + if(row == 2) + { + writedata(LINE2|column,CMD); + wait(0.005); } - -/*---------------------------------------------------------------------*/ -void lglcd::writedata(unsigned char info, unsigned char type) +} +void lglcd::writedata(unsigned char data, unsigned char type) //manual write data wherever the pointer is , requires the line to be set first . { if(type == CMD) { - _lcdrs=0; //COMMAND MODE - } - else - { - _lcdrs=1; //CHARACTER/DATA MODE + _lcdrs=0; //COMMAND MODE } - - _lcdinfo = info >> 4; - wait(0.000040f); // most instructions take 40us + else + { + _lcdrs=1; //CHARACTER/DATA MODE + } + _lcdinfo = data >> 4; + wait(0.000050f); _lcde = 0; - wait(0.000040f); + wait(0.000050f); _lcde = 1; - _lcdinfo = info >> 0; - wait(0.000040f); + _lcdinfo = data >> 0; + wait(0.000050f); _lcde = 0; - wait(0.000040f); // most instructions take 40us + wait(0.000050f); _lcde = 1; } - -void lglcd::write(char charq[]) +void lglcd::write(char charq[]) //write character, not used, used writedata mainly, this works well if need to write along string to 2 lines (FOR LOOP FOR CHANING LINE AUTO) { - for (int i = 0; i < strlen(charq); i++) - { - wait(0.003); - int count = 0; - count++; - writedata(charq[i], TXT); - if (i == 15) { - writedata(LINE2 | 0, CMD); - } - if (i == 32) { - clear(); - writedata(LINE1, CMD); - } - } + for (int n = 0; n < strlen(charq); n++) + { + int count = 0; + count++; + writedata(charq[n], TXT); + if (n == 15) + { + writedata(LINE2 | 0, CMD); + } + if (n == 32) + { + clear(); + writedata(LINE1, CMD); + } + } }
diff -r 9020af47a312 -r d812a2a643bc lglcd.h --- a/lglcd.h Fri Jan 05 17:56:27 2018 +0000 +++ b/lglcd.h Tue Jan 09 11:32:39 2018 +0000 @@ -1,37 +1,35 @@ -#ifndef __LGLCD_H +/* ELEC351 COURSEWORK 2018 +DESIGNED USING MBED ONLINE COMPILER IMPORTED TO KEIL +LIAM GRAZIER // DOUG TILLEY // ALEX BARON + */ +#ifndef __LGLCD_H #define __LGLCD_H - -#define CMD 0 -#define TXT 1 -#define CLEAR 1 -#define HOME 2 -#define READ 1 +#define CMD 0 //adapted from 2nd year code +#define TXT 1 +#define CLEAR 1 +#define HOME 2 +#define READ 1 #define WRITE 0 -#define LEFT 0 +#define LEFT 0 #define RIGHT 1 - #define LINE1 0x80 // Start address of first line #define LINE2 0xC0 // Start address of second line - #define LCD_CLR (writedata(CLEAR,CMD)) #define LCD_HOME (writedata(HOME,CMD)) #define LCD_BUSYBIT 0x8000 //correct value for the lcd BUSYBIT - - +//mylcdclass class lglcd { public: -lglcd(PinName rs, PinName e, PinName d4, PinName d5,PinName d6, PinName d7); -void clear(void); -void writedata(unsigned char info, unsigned char type); -void lglcd::setline(int row,int column); -void write(char charq[]); -int l; +lglcd(PinName RS, PinName E, PinName D4, PinName D5,PinName D6, PinName D7); //statement for pin enables +void clear(void); //function for clearlcd +void writedata(unsigned char info, unsigned char type); //function forwiring data on the screen +void lglcd::setline(int row,int column); //setline command row/column +void write(char charq[]); //wirint char/str on mylcd. +int l; protected: -BusOut _lcdinfo; -DigitalOut _lcdrs; -DigitalOut _lcde; -int cline; -int cpos; +BusOut _lcdinfo; //output define for D4-D7 +DigitalOut _lcdrs; //output define for RS Pin +DigitalOut _lcde; //output define for E pin }; #endif \ No newline at end of file