Ben Parkes
/
Thread_Communication_V5
V4
Fork of Thread_Communication_V4_fortest by
Diff: LCD.cpp
- Revision:
- 0:cb3a5c15b01e
- Child:
- 8:ab6322afa341
diff -r 000000000000 -r cb3a5c15b01e LCD.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LCD.cpp Tue Dec 12 17:05:59 2017 +0000 @@ -0,0 +1,150 @@ +#include "mbed.h" + +#include "LCD.h" +#define busy_mask 0x8000 + + +LCD::LCD(PinName RS, PinName E, PinName d4, PinName d5, + PinName d6, PinName d7) : _RS(RS), + _E(E), _DBUS(d4, d5, d6, d7) { + + _E = 0; + _RS = 0; // command mode + + wait(0.015); // Wait 15ms to ensure powered up + + // send "Display Settings" 3 times (Only top nibble of 0x30 as we've got 4-bit bus) + + wait(0.015); // Wait 15ms to ensure powered up + + for (int i=0; i<3; i++) { + DATA(0x30, CMD); + wait(0.00164); // this command takes 1.64ms, so wait for it + } + DATA(0x02, CMD); // 4-bit mode + wait(0.000040f); // most instructions take 40us + + DATA(0x28,CMD); // Function set 001 BW N F - - + DATA(0x0C,CMD); + DATA(0x06,CMD); // Cursor Direction and Display Shift : 0000 01 CD S (CD 0-left, 1-right S(hift) 0-no, 1-yes + Clear(); + DATA(0x01,CMD); // cls, and set cursor to 0 + wait(0.00164f); // This command takes 1.64 ms + Write("Constructed"); +} + + + + +/*int main(){ + //(PF_13, PE_9, PF_14, PF_15) + //(PF_15, PF_14, PE_9,PF_13) + LCD_DBUS = new BusInOut(PF_13, PE_9, PF_14, PF_15) ; + LCD_Init(); + while(1){ + write_string("Hi"); + wait(0.1); + } + } +*/ +// Initialise LCD Pins // +/*void LCD_Init(void){ + LCD_E = 0;; //clear enable + LCD_RW = 0; // write + LCD_RS = 0; // command + + wait_ms(3); //delay for LCD to initialise. + + LCD_DATA(0x28,CMD); //set to 4 bit interface, 2 line and 5*8 font + LCD_DATA(0x0f,CMD); //cursor on, cursor position blink + LCD_DATA(0x10,CMD); + LCD_CLR; //clear display + LCD_DATA(0x06,CMD); //move cursor right after write + LCD_HOME; //return home + + LCD_E = 1; + LCD_RS = 0; // command mode + LCD_RW = 0; + wait(0.015); // Wait 15ms to ensure powered up + + for (int i=0; i<3; i++) { + LCD_DATA(0x03, TXT); + wait(0.00164); // this command takes 1.64ms, so wait for it + } + LCD_DATA(0x02, TXT); // 4-bit mode + wait(0.000040f); // most instructions take 40us + + LCD_DATA(0x28,CMD); // Function set 001 BW N F - - + LCD_DATA(0x0C,CMD); + LCD_DATA(0x06,CMD); // Cursor Direction and Display Shift : 0000 01 CD S (CD 0-left, 1-right S(hift) 0-no, 1-yes + LCD_DATA(0x01,CMD); // cls, and set cursor to 0 + wait(0.00164f); // This command takes 1.64 ms +}*/ +/*---------------------------------------------------------------------*/ +void LCD::Clear(void){ + DATA(CLEAR,CMD); + } + +void LCD::RowSelect(int row){ + switch(row){ + case 0: + DATA(LINE1,CMD); + break; + case 1: + DATA(LINE2,CMD); + break; + default: + DATA(LINE1,CMD); + break; + } + } + +void LCD::Busy(void) +{ + wait_ms(1); +} +/*---------------------------------------------------------------------*/ +void LCD::DATA(char data,char type){ + + Busy(); //TEST LCD FOR BUSY + + _DBUS = (data>>4); + + wait(0.00040f); // most instructions take 40us + + if(type == CMD) + { + _RS = 0; //COMMAND MODE + } + else + { + _RS = 1; //CHARACTER/DATA MODE + } + wait(0.00040f); + + _E = 1; //ENABLE LCD DATA LINE + wait(0.00040f); // most instructions take 40us + _E = 0; //DISABLE LCD DATA LINE + + _DBUS = 0; + + _DBUS = (data); + + _E = 1; //ENABLE LCD DATA LINE + wait(0.00040f); // most instructions take 40us + _E = 0; //DISABLE LCD DATA LINE +} +/*---------------------------------------------------------------------*/ +void LCD::Write(char text[16]){ + int i = 0; + + + while((text[i] != 0)) + { + + char character = text[i]; + DATA (character,TXT); // Write text "a" to the LCD + + i++; + } +}