Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of SLCD by
Diff: SLCD.cpp
- 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;
+}
+
