Troubleshooting

Revision:
0:f8fe58d43763
Child:
1:1f9ea120f8a9
Child:
6:f3d1ab8a9e99
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LCD.cpp	Sat Nov 03 21:55:11 2018 +0000
@@ -0,0 +1,134 @@
+#include "LCD.hpp"
+
+void LCD::INIT()
+{
+    //All lines default low
+    _LCD_RS = 0;
+    _LCD_E  = 0;
+    
+    //LCD Initialise
+    wait_ms(45); //Wait for LCD startup
+    /*Step 1*/ cmdLCD(DDRAM|0x08);
+    /*Step 2*/ cmdLCD(DDRAM|lines2);  //Function Set 0x20|0x08 = 0x28
+    /*Step 3*/ cmdLCD(DDRAM|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(0x20);
+}
+
+void LCD::clear()
+{
+    cmdLCD(CLEAR);   
+}
+
+void LCD::display(char* str, int line, int position)
+{
+    unsigned int length  = strlen(str);
+    unsigned int line1 = length;
+    unsigned int line2 = 0;
+    
+    //if((line != NULL)&&(position != NULL))
+    //{
+        cmdLCD(line|position);
+    //}
+    unsigned int p;
+    if(line == LINE1)
+    {
+        if(position + length > 16)
+        {
+            line1 = findSpace(str);
+            line2 = length - line1;
+        }
+        
+        for(p=0; p<line1; p++)
+        {
+            putt(str[p]);   
+        }
+        
+        cmdLCD(LINE2);
+    }
+    
+    if(line == LINE2){line2 = length;}
+    
+    if((line2 <= 16)&&(line != 2))
+    {
+        for(p=0; p<line2; p++)
+        {
+            putt(str[line1 + p]);
+        }
+    }
+    else
+    {
+        for(p=0; p<(13); p++)
+        {
+            putt(str[line1 + p]);
+        }
+        
+        for(p=0; p<3; p++)
+        {
+            putt('.');
+        }  
+    }
+}
+
+void LCD::putt(char c)
+{
+    wait_us(50);
+    _LCD_RS = text;
+    set_LCD_data(c);
+}
+
+void LCD::cmdLCD(unsigned char cmd)
+{
+    wait_us(50);      //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(unsigned char 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();   
+}
+
+unsigned int LCD::findSpace(char* str)
+{
+    unsigned int space = 0;
+    int n = 16;
+    while(!space & (n != -1))
+    {
+        n--;
+        switch(str[n])
+        {
+            case ' ':
+            case '.':
+            case ',':
+            case ':':
+            case ';':
+            case '-':
+            case '/':
+                space = 1;
+            break;
+        }
+    }
+    if(n == -1){ return 16; }
+    else{ return n+1; }
+}
\ No newline at end of file