liamgrazier lcd library 16x02

Fork of LGLCD by Liam Grazier

lglcd.cpp

Committer:
liam_grazier
Date:
2018-01-05
Revision:
0:ef052de2d7d0
Child:
1:9020af47a312

File content as of revision 0:ef052de2d7d0:

#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)
{
    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
    _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(0x0C,CMD);         //cursor on, cursor position blink
    wait(0.000004);
    writedata(0x10,CMD);
    wait(0.000004);
    LCD_CLR;                        //clear display
    wait(0.000004);
    writedata(0x06,CMD);         //move cursor right after write
    wait(0.000004);
    LCD_HOME;                                   //return home

}
/*---------------------------------------------------------------------*/
void lglcd::clear(void)//set a function to clear the lcd since just calling LCD_CLR can throw error if called to quickly
{
    LCD_CLR;
    wait(0.002); //2ms delay to stop timing error
}

/*---------------------------------------------------------------------*/
void lglcd::writedata(unsigned char info, unsigned char type)
{
    if(type == CMD) {
        _lcdrs=0;              //COMMAND MODE
    } else {
        _lcdrs=1;          //CHARACTER/DATA MODE
    }
    
    _lcdinfo = info >> 4;
    wait(0.000040f); // most instructions take 40us
    _lcde = 0;
    wait(0.000040f);
    _lcde = 1;
    _lcdinfo = info >> 0;
    wait(0.000040f);
    _lcde = 0;
    wait(0.000040f);  // most instructions take 40us
    _lcde = 1;
}

void lglcd::write(char charq[])
{ 
 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);
   }
  }
}