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:
- 3:f70873bc6121
- Parent:
- 1:1579bcd31410
- Child:
- 4:ec7b3c9b2aeb
--- a/SLCD.cpp Mon Jan 20 21:08:32 2014 +0000 +++ b/SLCD.cpp Mon Jan 27 21:57:38 2014 +0000 @@ -63,7 +63,7 @@ ( 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 = L, offset=112 -(!SEGD+ SEGE+ SEGF+!SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = M, offset=116 +(!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 @@ -87,33 +87,23 @@ SLCD::SLCD() { init(); - bLCD_CharPosition = 0; -} - -int SLCD::_putc(int c) { - LCD_Write_Char(c); - return 0; + CharPosition = 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 - PORTC->PCR[23] = 0x00000000; //VCAP1 - - - - // Enable IRCLK + PORTC->PCR[23] = 0x00000000; //VCAP1 + // Enable IRCLK MCG->C1 = MCG_C1_IRCLKEN_MASK | MCG_C1_IREFSTEN_MASK; - MCG->C2 &= ~MCG_C2_IRCS_MASK ; //0 32KHZ internal reference clock; 1= 4MHz irc - + MCG->C2 &= ~MCG_C2_IRCS_MASK ; //0 32KHZ internal reference clock; 1= 4MHz irc LCD->GCR = 0x0; - LCD->AR = 0x0; - -// LCD configurartion according to */ + LCD->AR = 0x0; + // LCD configurartion LCD->GCR = ( LCD_GCR_RVEN_MASK*_LCDRVEN | LCD_GCR_RVTRIM(_LCDRVTRIM) //0-15 | LCD_GCR_CPSEL_MASK*_LCDCPSEL @@ -126,28 +116,18 @@ |!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_LCLK(_LCDLCK) //0-7 | LCD_GCR_DUTY(_LCDDUTY) //0-7 ); - - EnablePins(); // Enable LCD pins and Configure BackPlanes - LCD->GCR |= LCD_GCR_LCDEN_MASK; -} - -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 - LCD->PEN[0] = 0x0; LCD->PEN[1] = 0x0; LCD->BPEN[0] = 0x0; - LCD->BPEN[1] = 0x0; - + LCD->BPEN[1] = 0x0; p_pen = (uint32_t *)&LCD->PEN[0]; - for (i=0;i<_LCDUSEDPINS;i++) { pen_offset = WF_ORDERING_TABLE[i]/32; @@ -158,11 +138,16 @@ p_pen[pen_offset+2] |= 1 << pen_bit; // Enable BPEN LCD->WF8B[(uint8_t)WF_ORDERING_TABLE[i]] = 1 << (i - _LCDFRONTPLANES); // fill with 0x01, 0x02, etc } - } - } + } + LCD->GCR |= LCD_GCR_LCDEN_MASK; +} +int SLCD::_putc(int c) { + Write_Char(c); + return 0; +} -void SLCD::LCD_Write_Char (char lbValue) { +void SLCD::Write_Char (char lbValue) { uint8_t char_val; uint8_t temp; uint8_t *lbpLCDWF; @@ -170,9 +155,8 @@ uint16_t arrayOffset; uint8_t position; - if (bLCD_CharPosition >= _CHARNUM) - bLCD_CharPosition = 0; - + 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') { @@ -186,7 +170,7 @@ // ensure bLCD position is in valid limit lbCounter = 0; //number of writings to complete one char while (lbCounter<_CHAR_SIZE) { - position = (bLCD_CharPosition) *_LCDTYPE + lbCounter; + position = (CharPosition) *_LCDTYPE + lbCounter; temp=0; if (lbCounter==1) { temp = lbpLCDWF[WF_ORDERING_TABLE[position]] & 0x01;//bit 0 has the special symbol information @@ -195,33 +179,22 @@ lbpLCDWF[WF_ORDERING_TABLE[position]] = char_val | temp; // if (char_val==0) lbCounter = _CHAR_SIZE; //end of this character lbCounter++; - } - - bLCD_CharPosition++; + } + CharPosition++; } -/* Fill Backplanes with normal mask for 0x01, 0x02, according to BP_ORDERING_TABLE;*/ -void SLCD::SetBackplanes(void) +void SLCD::Home (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; + CharPosition = 0; } -void SLCD::LCD_Contrast (uint8_t lbContrast) -{ +void SLCD::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) +void SLCD::All_Segments (int mode) { uint8_t lbTotalBytes = _CHARNUM * _LCDTYPE; uint8_t lbCounter=0; @@ -230,77 +203,41 @@ lbpLCDWF = (uint8_t *)&LCD->WF8B[0]; while (lbCounter < lbTotalBytes) { - lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[lbCounter++]]=_ALLON; + if (mode==1){lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[lbCounter++]]=_ALLON;} + else {lbpLCDWF[WF_ORDERING_TABLE[lbCounter++]]=0;} } } -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; - } -} - -void SLCD::DP1_ON (void) +void SLCD::DP1 (int mode) { uint8_t *lbpLCDWF; lbpLCDWF = (uint8_t *)&LCD->WF8B[0]; - lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[1]]=1; + if (mode==1){lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[1]]|=1;} + else {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) + +void SLCD::DP2 (int mode) { uint8_t *lbpLCDWF; lbpLCDWF = (uint8_t *)&LCD->WF8B[0]; - lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[3]]=1; -} + if (mode==1){lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[3]]|=1;} + else {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) +void SLCD::DP3 (int mode) { uint8_t *lbpLCDWF; - lbpLCDWF = (uint8_t *)&LCD->WF8B[0]; - lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[5]]=14; + 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;} } - -void SLCD::COLON_ON (void) + +void SLCD::Colon (int mode) { uint8_t *lbpLCDWF; - lbpLCDWF = (uint8_t *)&LCD->WF8B[0]; - lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[7]]=1; + lbpLCDWF = (uint8_t *)&LCD->WF8B[0]; + if (mode==1){lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[7]]|=1;} + else {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; -} -