Dependencies:   mbed

LCD.cpp

Committer:
BenRJG
Date:
2018-04-05
Revision:
5:11489c0bd020
Parent:
4:bcef9164776e
Child:
8:462ce856429b

File content as of revision 5:11489c0bd020:

#include "LCD.h"

void LCD_INIT(void)
{
    
// Preload some arrays
//  char hello_world[]   ="Hello World";
    char splash_screen1[]="Martin Simpson";
    char splash_screen2[]="Plymouth UNI";
    char DVM[]           ="Voltage=";
    
    lcd_cls();
    lcd_locate(1,1);
    lcd_display(splash_screen1);    //Credit line 1
    lcd_locate(2,2);
    lcd_display(splash_screen2);    //Credit line 2
    wait(2);
    lcd_cls();  
    lcd_locate(1,0);
    lcd_display(DVM);   //Type Voltage display
    lcd_locate(1,13);
    lcd_display("V");   //Units display
}

int lcd_cls(void){
    spi_write_data(CS_LCD,0x0001);
    wait_us(CD);    //Clear Screen
    return 0;
}

int lcd_locate(uint8_t line, uint8_t column){
    uint8_t line_addr;
    uint8_t column_addr;
    switch(line){
        case 1: line_addr=0x80; break;
        case 2: line_addr=0xC0; break;
        default: return -1; //return code !=0 is error
        }
    if(column<16){column_addr=column;}
    else{return -1;}
    spi_write_data(CS_LCD,(line_addr+column_addr));
    wait_us(CD); //DDRAM location Second line is 0x00C0 first line starts at 0x0080
    return 0;
}

int lcd_display(char* str){
    
    if (strlen(str)>16){return -1;} //return code !=0 is error
    
    uint8_t command_data=1;
    uint32_t wait_time;
 
    switch(command_data){
        case 0: wait_time=DD; break;
        case 1: wait_time=CD; break;
        default: return -1;
        }

    for (int i=0; i<strlen(str);i++){
        spi_write_data(CS_LCD,((command_data<<8)+str[i]));
        wait_us(wait_time);
    }
    return 0;
}

int bar_graph(uint8_t level){
    if (level>16){return -1;} //return code !=0 is error
    spi_write_data(CS_LCD,0x00C0);
    wait_us(CD); //DDRAM location Second line is 0x00C0 first line starts at 0x0080
    for (int i=1; i<=level ;i++)
    {
        if(level>0){spi_write_data(CS_LCD,0x01FF);wait_us(DD);}   // BLACK SPACE
        else{spi_write_data(CS_LCD,0x0120);wait_us(DD);}          // WHITE SPACE
    }
    for (int i=level; i<=16 ;i++)
    {
        spi_write_data(CS_LCD,0x0120);wait_us(DD); // SPACE
    }
    return 0; // return code ==0 is OK
}