temp

LCD.cpp

Committer:
BenRJG
Date:
2018-12-06
Revision:
0:2a4af0cb6e8d

File content as of revision 0:2a4af0cb6e8d:

#include "LCD.hpp"
#include "General.hpp"

//LCD data sheet: https://www.rapidonline.com/pdf/57-2224.pdf

void LCD::INIT()
{
    //All lines default low
    _LCD_RS = 0;
    _LCD_E  = 0;
    
    //LCD Initialise
    wait_ms(45); //Wait for LCD startup
    /*Step 1*/
        wait_us(40);      //Wait whilst LCD busy
        _LCD_RS = control;   
        LCD_DDRAM = 0;  //Clear data line
        LCD_DDRAM = (FUNC|bit8)>>4;  //Put data on line
        LCD_strobe();
    
    /*Step 2*/ cmdLCD(FUNC|lines2);  //Function Set 0x20|0x08 = 0x28
    /*Step 3*/ cmdLCD(FUNC|lines2);  //Function Set 0x20|0x08 = 0x28
    /*Step 4*/ cmdLCD(DISPLAY|on);    //Display Control 0x08|0x0x04 = 0x0c
    /*Step 5*/ cmdLCD(CLEAR);         //Clear Display 0x01
    /*Step 6*/ cmdLCD(ENTRYMODE|I);   //Set entry mode 0x04|0x02 = 0x06

    cmdLCD(RETURN); //return home location
}

void LCD::clear()
{
    cmdLCD(CLEAR);   
}

void LCD::display(BYTE* str, UINT_16 location)
{
    if(location != NULL)
    {
        pos(location);
    }
    U_BYTE p = 0;
    while((str[p]!= NULL)&&(p<16))
    {
        putt(str[p]);
        p++; 
    }
}

void LCD::pos(UINT_16 location)
{
    cmdLCD(0x80|location);   
}

void LCD::putt(U_BYTE c)
{
    wait_us(3000);
    _LCD_RS = text;
    set_LCD_data(c);
}

void LCD::cmdLCD(U_BYTE cmd)
{
    wait_us(3000);      //Wait whilst LCD busy
    _LCD_RS = control;   
    set_LCD_data(cmd);  //set data on bus
}

void LCD::LCD_strobe(void)
{
    wait_us(10);
    _LCD_E = 1;
    wait_us(10);
    _LCD_E = 0;
}

void LCD::set_LCD_data(U_BYTE d)
{
    // Send upper 4 bits then lower for bits
    // e.g. 11110000 => 1111 -> 0000
    
    LCD_DDRAM = 0;  //Clear data line
    LCD_DDRAM = d>>4;  //Put data on line
    LCD_strobe();
    wait_us(1000);
    LCD_DDRAM = 0;  //Clear
    LCD_DDRAM = d; //Put remaining data on line
    LCD_strobe();   
}

void LCD::enableCursor()
{
    cmdLCD(DISPLAY|on|cursor);
}

void LCD::disableCursor()
{
    cmdLCD(DISPLAY|on);
}