KBrat-SSD645-HW-8_1_SLCD

Fork of SLCD by Erik -

Revision:
7:0e084b33d730
Parent:
6:f4773221794b
Child:
10:ef2b3b7f1b01
--- a/SLCD.cpp	Fri Mar 14 15:13:15 2014 +0000
+++ b/SLCD.cpp	Fri Mar 14 15:22:09 2014 +0000
@@ -153,6 +153,15 @@
 
 void SLCD::Write_Char (char lbValue)
 {
+    if (CharPosition >= _CHARNUM)
+        CharPosition = 0;
+
+    if (lbValue == '.') {
+        // Use built-in dot
+        DP(CharPosition-1, true);
+        return;
+    }
+
     uint8_t char_val;
     uint8_t temp;
     uint8_t *lbpLCDWF;
@@ -160,8 +169,6 @@
     uint16_t arrayOffset;
     uint8_t position;
 
-    if (CharPosition >= _CHARNUM)
-        CharPosition = 0;
     lbpLCDWF = (uint8_t *)&LCD->WF8B[0];
     /* only ascii character if value not writeable write as @ */
     if (lbValue>='a' && lbValue<='z') {
@@ -199,6 +206,11 @@
     LCD->GCR |= LCD_GCR_RVTRIM(lbContrast);
 }
 
+void SLCD::clear()
+{
+    All_Segments(0);
+}
+
 void SLCD::All_Segments (int mode)
 {
     uint8_t lbTotalBytes = _CHARNUM * _LCDTYPE;
@@ -215,37 +227,44 @@
     }
 }
 
-void SLCD::DP1 (int mode)
+void SLCD::DP(int pos, bool on)
 {
     uint8_t *lbpLCDWF;
+    int tableLoc;
+    switch (pos) {
+        case 0:
+            tableLoc = 1;
+            break;
+        case 1:
+            tableLoc = 3;
+            break;
+        case 2:
+            tableLoc = 5;
+            break;
+        default:
+            return; // Bad position
+    }
     lbpLCDWF = (uint8_t *)&LCD->WF8B[0];
-    if (mode==1) {
-        lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[1]]|=1;
+    if (on) {
+        lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[tableLoc]]|=1;
     } else {
-        lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[1]]&=~1;
+        lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[tableLoc]]&=~1;
     }
 }
 
+void SLCD::DP1 (int mode)
+{
+    DP(0, mode==1);
+}
+
 void SLCD::DP2 (int mode)
 {
-    uint8_t *lbpLCDWF;
-    lbpLCDWF = (uint8_t *)&LCD->WF8B[0];
-    if (mode==1) {
-        lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[3]]|=1;
-    } else {
-        lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[3]]&=~1;
-    }
+    DP(1, mode==1);
 }
 
 void SLCD::DP3 (int mode)
 {
-    uint8_t *lbpLCDWF;
-    lbpLCDWF = (uint8_t *)&LCD->WF8B[0];
-    if (mode==1) {
-        lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[5]]|=1;
-    } else {
-        lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[5]]&=~1;
-    }
+    DP(2, mode==1);
 }
 
 void SLCD::Colon (int mode)