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.
Dependents: ACC_LCD_341_all_axies LCD_punch_mtr_8_v7
Fork of SLCD_minus_mod 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;
+}
+
