KBrat-SSD645-HW-8_1_SLCD
Fork of SLCD by
Diff: SLCD.cpp
- Revision:
- 1:1579bcd31410
- Parent:
- 0:d04758e76d5b
- Child:
- 2:6a5095c98da1
- Child:
- 3:f70873bc6121
diff -r d04758e76d5b -r 1579bcd31410 SLCD.cpp --- 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; +} +