Buffer working with LCD, Serial and SD Card

Dependencies:   BMP280

Fork of Thread_Communication by BDG

Revision:
0:cb3a5c15b01e
Child:
8:ab6322afa341
--- /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++;
+    }
+}