KBrat-SSD645-HW-8_1_SLCD

Fork of SLCD by Erik -

Revision:
1:1579bcd31410
Parent:
0:d04758e76d5b
Child:
2:6a5095c98da1
Child:
3:f70873bc6121
--- a/SLCD.cpp	Tue Jan 14 07:00:15 2014 +0000
+++ b/SLCD.cpp	Mon Jan 20 21:08:32 2014 +0000
@@ -1,5 +1,5 @@
 #include "SLCD.h"
-#include "LCD_config.h"
+#include "LCDconfig.h"
 
 
 const uint8_t WF_ORDERING_TABLE[ ] =
@@ -9,17 +9,31 @@
    CHAR2a,   // LCD83 --- Pin:7  LCDnAddress=53
    CHAR2b,   // LCD84 --- Pin:8  LCDnAddress=54
    CHAR3a,   // LCD85 --- Pin:9  LCDnAddress=55
-   CHAR3b,   // LCD86 --- Pin:10  LCDnAddress=56
-   CHAR4a,   // LCD87 --- Pin:11  LCDnAddress=57
-   CHAR4b,   // LCD88 --- Pin:12  LCDnAddress=58
-   CHARCOM0,   // LCD77 --- Pin:1  LCDnAddress=4D
-   CHARCOM1,   // LCD78 --- Pin:2  LCDnAddress=4E
-   CHARCOM2,   // LCD79 --- Pin:3  LCDnAddress=4F
-   CHARCOM3,   // LCD80 --- Pin:4  LCDnAddress=50
+   CHAR3b,   // LCD86 --- Pin:10 LCDnAddress=56
+   CHAR4a,   // LCD87 --- Pin:11 LCDnAddress=57
+   CHAR4b,   // LCD88 --- Pin:12 LCDnAddress=58
+   CHARCOM0, // LCD77 --- Pin:1  LCDnAddress=4D
+   CHARCOM1, // LCD78 --- Pin:2  LCDnAddress=4E
+   CHARCOM2, // LCD79 --- Pin:3  LCDnAddress=4F
+   CHARCOM3, // LCD80 --- Pin:4  LCDnAddress=50
 };
 
 const char ASCII_TO_WF_CODIFICATION_TABLE [ ] =
 {
+ 
+ /*
+                segA
+              ________  
+             |        | 
+        segF |        | segB
+             |        |
+              -segG--
+             |        |
+        segE |        | segC
+             |________|
+                segD
+ */   
+    
 ( SEGD+ SEGE+ SEGF+!SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = 0,   offset=0
 (!SEGD+!SEGE+!SEGF+!SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = 1,   offset=4
 ( SEGD+ SEGE+!SEGF+ SEGG) , (!SEGC+ SEGB+ SEGA) ,//Char = 2,   offset=8
@@ -40,29 +54,29 @@
 (!SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = A,   offset=68
 ( SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+!SEGB+!SEGA) ,//Char = B,   offset=72
 ( SEGD+ SEGE+ SEGF+!SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = C,   offset=76
-( SEGD+ SEGE+!SEGF+ SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = D,   offset=80
+( SEGD+ SEGE+!SEGF+ SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = D,   offset=80
 ( SEGD+ SEGE+ SEGF+ SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = E,   offset=84
 (!SEGD+ SEGE+ SEGF+ SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = F,   offset=88
 ( SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+!SEGB+ SEGA) ,//Char = G,   offset=92
 (!SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = H,   offset=96
 (!SEGD+!SEGE+!SEGF+!SEGG) , ( SEGC+!SEGB+!SEGA) ,//Char = I,   offset=100
 ( SEGD+ SEGE+!SEGF+!SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = J,   offset=104
-(!SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = K,   offset=108
+(!SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+!SEGB+ SEGA) ,//Char = K,   offset=108
 ( SEGD+ SEGE+ SEGF+!SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = L,   offset=112
 (!SEGD+ SEGE+ SEGF+!SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = M,   offset=116
 (!SEGD+ SEGE+!SEGF+ SEGG) , ( SEGC+!SEGB+!SEGA) ,//Char = N,   offset=120
 ( SEGD+ SEGE+!SEGF+ SEGG) , ( SEGC+!SEGB+!SEGA) ,//Char = O,   offset=124
-(!SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = P,   offset=128
+(!SEGD+ SEGE+ SEGF+ SEGG) , (!SEGC+ SEGB+ SEGA) ,//Char = P,   offset=128
 ( SEGD+!SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = Q,   offset=132
-(!SEGD+ SEGE+ SEGF+ SEGG) , (!SEGC+ SEGB+ SEGA) ,//Char = R,   offset=136
+(!SEGD+ SEGE+!SEGF+ SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = R,   offset=136
 ( SEGD+!SEGE+ SEGF+ SEGG) , ( SEGC+!SEGB+ SEGA) ,//Char = S,   offset=140
 ( SEGD+ SEGE+ SEGF+ SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = T,   offset=144
 ( SEGD+ SEGE+ SEGF+!SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = U,   offset=148
-(!SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = V,   offset=152
-(!SEGD+ SEGE+ SEGF+!SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = W,   offset=156
-(!SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = X,   offset=160
-(!SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = Y,   offset=164
-( SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = Z,   offset=168
+( SEGD+ SEGE+!SEGF+!SEGG) , ( SEGC+!SEGB+!SEGA) ,//Char = V,   offset=152
+( SEGD+ SEGE+ SEGF+!SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = W,   offset=156
+(!SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = X,   offset=160
+( SEGD+!SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = Y,   offset=164
+( SEGD+!SEGE+!SEGF+ SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = Z,   offset=168
 ( SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = [,   offset=172
 ( SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = \,   offset=176
 ( SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = ],   offset=180
@@ -73,15 +87,18 @@
 
 SLCD::SLCD() {
     init();
-    bLCD_CharPosition = 0;
-    
+    bLCD_CharPosition = 0;    
 }
 
+int SLCD::_putc(int c) {
+    LCD_Write_Char(c);
+    return 0;
+}
 
 void SLCD::init(){
     SIM->SCGC5 |= SIM_SCGC5_SLCD_MASK | SIM_SCGC5_PORTB_MASK | SIM_SCGC5_PORTC_MASK | SIM_SCGC5_PORTD_MASK | SIM_SCGC5_PORTE_MASK;
      
-     //* configure pins for LCD operation    
+     // configure pins for LCD operation    
   PORTC->PCR[20] = 0x00000000;     //VLL2
   PORTC->PCR[21] = 0x00000000;     //VLL1
   PORTC->PCR[22] = 0x00000000;     //VCAP2
@@ -96,33 +113,33 @@
      LCD->GCR = 0x0;
      LCD->AR  = 0x0;
      
-/* LCD configurartion according to */     
-      LCD->GCR =  (   LCD_GCR_RVEN_MASK*_LCDRVEN  
-                   | LCD_GCR_RVTRIM(_LCDRVTRIM)    //0-15
+// LCD configurartion according to */     
+      LCD->GCR =   ( LCD_GCR_RVEN_MASK*_LCDRVEN  
+                   | LCD_GCR_RVTRIM(_LCDRVTRIM)         //0-15
                    | LCD_GCR_CPSEL_MASK*_LCDCPSEL 
-                   | LCD_GCR_LADJ(_LCDLOADADJUST)     //0-3*/
-                   | LCD_GCR_VSUPPLY_MASK*_LCDSUPPLY  //0-1*/
+                   | LCD_GCR_LADJ(_LCDLOADADJUST)       //0-3
+                   | LCD_GCR_VSUPPLY_MASK*_LCDSUPPLY    //0-1
                    |!LCD_GCR_FDCIEN_MASK
-                   | LCD_GCR_ALTDIV(_LCDALTDIV)  //0-3
+                   | LCD_GCR_ALTDIV(_LCDALTDIV)         //0-3
                    |!LCD_GCR_LCDDOZE_MASK  
                    |!LCD_GCR_LCDSTP_MASK
-                   |!LCD_GCR_LCDEN_MASK    //WILL BE ENABLE ON SUBSEQUENT STEP
+                   |!LCD_GCR_LCDEN_MASK                 //WILL BE ENABLE ON SUBSEQUENT STEP
                    | LCD_GCR_SOURCE_MASK*_LCDCLKSOURCE
                    | LCD_GCR_ALTSOURCE_MASK*_LCDALRCLKSOURCE  
                    | LCD_GCR_LCLK(_LCDLCK)   //0-7
                    | LCD_GCR_DUTY(_LCDDUTY)   //0-7
                  );    
      
-      vfnEnablePins();         // Enable LCD pins and Configure BackPlanes
+      EnablePins();         // Enable LCD pins and Configure BackPlanes
       LCD->GCR |= LCD_GCR_LCDEN_MASK;
 }
 
-void SLCD::vfnEnablePins (void)
+void SLCD::EnablePins (void)
   {
    uint8_t i;
    uint32_t *p_pen;
    uint8_t pen_offset;   // 0 or 1   
-   uint8_t pen_bit;      //0 to 31
+   uint8_t pen_bit;      // 0 to 31
 
    LCD->PEN[0] = 0x0;
    LCD->PEN[1] = 0x0;
@@ -145,7 +162,7 @@
   }
 
 
-void SLCD::vfnLCD_Write_Char (char lbValue) {
+void SLCD::LCD_Write_Char (char lbValue) {
   uint8_t char_val;
   uint8_t temp;
   uint8_t *lbpLCDWF;
@@ -183,8 +200,107 @@
   bLCD_CharPosition++;
 }
 
-int SLCD::_putc(int c) {
-    vfnLCD_Write_Char(c);
-    return 0;
+/*  Fill Backplanes with normal mask for  0x01, 0x02,  according to BP_ORDERING_TABLE;*/
+void SLCD::SetBackplanes(void)
+ {
+   uint8_t i;
+   for (i=0;i<_LCDBACKPLANES;i++)
+   {
+       LCD->WF8B[(uint8_t)WF_ORDERING_TABLE[i+_LCDFRONTPLANES]] = 0x01<<i;
+   }  
+  }
+  
+void SLCD::LCD_Home (void)
+ {
+      bLCD_CharPosition =  0;
+ }
+
+void SLCD::LCD_Contrast (uint8_t lbContrast)
+{
+       lbContrast &= 0x0F;              //Forced to the only values accepted 
+       LCD->GCR |= LCD_GCR_RVTRIM(lbContrast);
+}
+ 
+void SLCD::LCD_All_Segments_ON (void)
+{
+ uint8_t lbTotalBytes = _CHARNUM * _LCDTYPE;              
+ uint8_t lbCounter=0;
+ uint8_t *lbpLCDWF;
+ 
+    lbpLCDWF = (uint8_t *)&LCD->WF8B[0];      
+        while (lbCounter < lbTotalBytes)
+          {
+              lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[lbCounter++]]=_ALLON;
+          }         
+}
+
+void SLCD::LCD_All_Segments_OFF (void)
+{              
+ uint8_t lbTotalBytes = _CHARNUM * _LCDTYPE;              
+ uint8_t lbCounter=0;
+ uint8_t *lbpLCDWF;
+ 
+    lbpLCDWF = (uint8_t *)&LCD->WF8B[0];
+        while (lbCounter < lbTotalBytes)
+          {
+              lbpLCDWF[WF_ORDERING_TABLE[lbCounter++]]=0;
+          }
 }
-    
\ No newline at end of file
+
+void SLCD::DP1_ON (void)
+{
+  uint8_t *lbpLCDWF; 
+    lbpLCDWF = (uint8_t *)&LCD->WF8B[0];       
+              lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[1]]=1;                 
+}
+
+void SLCD::DP1_OFF (void)
+{
+  uint8_t *lbpLCDWF; 
+    lbpLCDWF = (uint8_t *)&LCD->WF8B[0];       
+              lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[1]]=14;                 
+}
+
+void SLCD::DP2_ON (void)
+{
+  uint8_t *lbpLCDWF; 
+    lbpLCDWF = (uint8_t *)&LCD->WF8B[0];       
+              lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[3]]=1;                 
+}
+
+void SLCD::DP2_OFF (void)
+{
+  uint8_t *lbpLCDWF; 
+    lbpLCDWF = (uint8_t *)&LCD->WF8B[0];       
+              lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[3]]=14;                 
+}
+
+void SLCD::DP3_ON (void)
+{
+  uint8_t *lbpLCDWF; 
+    lbpLCDWF = (uint8_t *)&LCD->WF8B[0];       
+              lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[5]]=1;                 
+}
+
+void SLCD::DP3_OFF (void)
+{
+  uint8_t *lbpLCDWF; 
+    lbpLCDWF = (uint8_t *)&LCD->WF8B[0];       
+              lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[5]]=14;                 
+}
+
+void SLCD::COLON_ON (void)
+{
+  uint8_t *lbpLCDWF; 
+    lbpLCDWF = (uint8_t *)&LCD->WF8B[0];      
+              lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[7]]=1;                 
+}
+
+void SLCD::COLON_OFF (void)
+{
+  
+  uint8_t *lbpLCDWF; 
+    lbpLCDWF = (uint8_t *)&LCD->WF8B[0];       
+              lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[7]]=14;                 
+}
+