Sensor reporting over USB CDC

Dependencies:   MAG3110 MMA8451Q SLCD- TSI USBDevice mbed

Committer:
wue
Date:
Wed Apr 16 12:20:12 2014 +0000
Revision:
0:7b58cdacf811
Sensor reporting over USB CDC

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wue 0:7b58cdacf811 1 #include "SLCD.h"
wue 0:7b58cdacf811 2 #include "LCDconfig.h"
wue 0:7b58cdacf811 3
wue 0:7b58cdacf811 4
wue 0:7b58cdacf811 5 const uint8_t WF_ORDERING_TABLE[ ] = {
wue 0:7b58cdacf811 6 CHAR1a, // LCD81 --- Pin:5 LCDnAddress=51
wue 0:7b58cdacf811 7 CHAR1b, // LCD82 --- Pin:6 LCDnAddress=52
wue 0:7b58cdacf811 8 CHAR2a, // LCD83 --- Pin:7 LCDnAddress=53
wue 0:7b58cdacf811 9 CHAR2b, // LCD84 --- Pin:8 LCDnAddress=54
wue 0:7b58cdacf811 10 CHAR3a, // LCD85 --- Pin:9 LCDnAddress=55
wue 0:7b58cdacf811 11 CHAR3b, // LCD86 --- Pin:10 LCDnAddress=56
wue 0:7b58cdacf811 12 CHAR4a, // LCD87 --- Pin:11 LCDnAddress=57
wue 0:7b58cdacf811 13 CHAR4b, // LCD88 --- Pin:12 LCDnAddress=58
wue 0:7b58cdacf811 14 CHARCOM0, // LCD77 --- Pin:1 LCDnAddress=4D
wue 0:7b58cdacf811 15 CHARCOM1, // LCD78 --- Pin:2 LCDnAddress=4E
wue 0:7b58cdacf811 16 CHARCOM2, // LCD79 --- Pin:3 LCDnAddress=4F
wue 0:7b58cdacf811 17 CHARCOM3, // LCD80 --- Pin:4 LCDnAddress=50
wue 0:7b58cdacf811 18 };
wue 0:7b58cdacf811 19
wue 0:7b58cdacf811 20 const char ASCII_TO_WF_CODIFICATION_TABLE [ ] = {
wue 0:7b58cdacf811 21
wue 0:7b58cdacf811 22 /*
wue 0:7b58cdacf811 23 segA
wue 0:7b58cdacf811 24 ________
wue 0:7b58cdacf811 25 | |
wue 0:7b58cdacf811 26 segF | | segB
wue 0:7b58cdacf811 27 | |
wue 0:7b58cdacf811 28 -segG--
wue 0:7b58cdacf811 29 | |
wue 0:7b58cdacf811 30 segE | | segC
wue 0:7b58cdacf811 31 |________|
wue 0:7b58cdacf811 32 segD
wue 0:7b58cdacf811 33 */
wue 0:7b58cdacf811 34
wue 0:7b58cdacf811 35 ( SEGD+ SEGE+ SEGF+!SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = 0, offset=0
wue 0:7b58cdacf811 36 (!SEGD+!SEGE+!SEGF+!SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = 1, offset=4
wue 0:7b58cdacf811 37 ( SEGD+ SEGE+!SEGF+ SEGG) , (!SEGC+ SEGB+ SEGA) ,//Char = 2, offset=8
wue 0:7b58cdacf811 38 ( SEGD+!SEGE+!SEGF+ SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = 3, offset=12
wue 0:7b58cdacf811 39 (!SEGD+!SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = 4, offset=16
wue 0:7b58cdacf811 40 ( SEGD+!SEGE+ SEGF+ SEGG) , ( SEGC+!SEGB+ SEGA) ,//Char = 5, offset=20
wue 0:7b58cdacf811 41 ( SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+!SEGB+ SEGA) ,//Char = 6, offset=24
wue 0:7b58cdacf811 42 (!SEGD+!SEGE+!SEGF+!SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = 7, offset=28
wue 0:7b58cdacf811 43 ( SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = 8, offset=32
wue 0:7b58cdacf811 44 ( SEGD+!SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = 9, offset=36
wue 0:7b58cdacf811 45 (!SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = :, offset=40
wue 0:7b58cdacf811 46 (!SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = ;, offset=44
wue 0:7b58cdacf811 47 (!SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = <, offset=48
wue 0:7b58cdacf811 48 ( SEGD+!SEGE+!SEGF+ SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = =, offset=52
wue 0:7b58cdacf811 49 (!SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = >, offset=56
wue 0:7b58cdacf811 50 (!SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = ?, offset=60
wue 0:7b58cdacf811 51 ( SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = @, offset=64
wue 0:7b58cdacf811 52 (!SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = A, offset=68
wue 0:7b58cdacf811 53 ( SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+!SEGB+!SEGA) ,//Char = B, offset=72
wue 0:7b58cdacf811 54 ( SEGD+ SEGE+ SEGF+!SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = C, offset=76
wue 0:7b58cdacf811 55 ( SEGD+ SEGE+!SEGF+ SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = D, offset=80
wue 0:7b58cdacf811 56 ( SEGD+ SEGE+ SEGF+ SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = E, offset=84
wue 0:7b58cdacf811 57 (!SEGD+ SEGE+ SEGF+ SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = F, offset=88
wue 0:7b58cdacf811 58 ( SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+!SEGB+ SEGA) ,//Char = G, offset=92
wue 0:7b58cdacf811 59 (!SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = H, offset=96
wue 0:7b58cdacf811 60 (!SEGD+!SEGE+!SEGF+!SEGG) , ( SEGC+!SEGB+!SEGA) ,//Char = I, offset=100
wue 0:7b58cdacf811 61 ( SEGD+ SEGE+!SEGF+!SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = J, offset=104
wue 0:7b58cdacf811 62 (!SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+!SEGB+ SEGA) ,//Char = K, offset=108
wue 0:7b58cdacf811 63 ( SEGD+ SEGE+ SEGF+!SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = L, offset=112
wue 0:7b58cdacf811 64 (!SEGD+ SEGE+ SEGF+!SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = M, offset=116
wue 0:7b58cdacf811 65 (!SEGD+ SEGE+!SEGF+ SEGG) , ( SEGC+!SEGB+!SEGA) ,//Char = N, offset=120
wue 0:7b58cdacf811 66 ( SEGD+ SEGE+!SEGF+ SEGG) , ( SEGC+!SEGB+!SEGA) ,//Char = O, offset=124
wue 0:7b58cdacf811 67 (!SEGD+ SEGE+ SEGF+ SEGG) , (!SEGC+ SEGB+ SEGA) ,//Char = P, offset=128
wue 0:7b58cdacf811 68 ( SEGD+!SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = Q, offset=132
wue 0:7b58cdacf811 69 (!SEGD+ SEGE+!SEGF+ SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = R, offset=136
wue 0:7b58cdacf811 70 ( SEGD+!SEGE+ SEGF+ SEGG) , ( SEGC+!SEGB+ SEGA) ,//Char = S, offset=140
wue 0:7b58cdacf811 71 ( SEGD+ SEGE+ SEGF+ SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = T, offset=144
wue 0:7b58cdacf811 72 ( SEGD+ SEGE+ SEGF+!SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = U, offset=148
wue 0:7b58cdacf811 73 ( SEGD+ SEGE+!SEGF+!SEGG) , ( SEGC+!SEGB+!SEGA) ,//Char = V, offset=152
wue 0:7b58cdacf811 74 ( SEGD+ SEGE+ SEGF+!SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = W, offset=156
wue 0:7b58cdacf811 75 (!SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = X, offset=160
wue 0:7b58cdacf811 76 ( SEGD+!SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = Y, offset=164
wue 0:7b58cdacf811 77 ( SEGD+!SEGE+!SEGF+ SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = Z, offset=168
wue 0:7b58cdacf811 78 ( SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = [, offset=172
wue 0:7b58cdacf811 79 ( SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = \, offset=176
wue 0:7b58cdacf811 80 ( SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = ], offset=180
wue 0:7b58cdacf811 81 ( SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = ^, offset=184
wue 0:7b58cdacf811 82 ( SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = _, offset=188
wue 0:7b58cdacf811 83 ( SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = `, offset=192
wue 0:7b58cdacf811 84 (!SEGD+!SEGE+!SEGF+ SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = -, offset=196 //LG+ added '-'
wue 0:7b58cdacf811 85 };
wue 0:7b58cdacf811 86
wue 0:7b58cdacf811 87 SLCD::SLCD()
wue 0:7b58cdacf811 88 {
wue 0:7b58cdacf811 89 init();
wue 0:7b58cdacf811 90 CharPosition = 0;
wue 0:7b58cdacf811 91 }
wue 0:7b58cdacf811 92
wue 0:7b58cdacf811 93 void SLCD::init()
wue 0:7b58cdacf811 94 {
wue 0:7b58cdacf811 95 SIM->SCGC5 |= SIM_SCGC5_SLCD_MASK | SIM_SCGC5_PORTB_MASK | SIM_SCGC5_PORTC_MASK | SIM_SCGC5_PORTD_MASK | SIM_SCGC5_PORTE_MASK;
wue 0:7b58cdacf811 96
wue 0:7b58cdacf811 97 // configure pins for LCD operation
wue 0:7b58cdacf811 98 PORTC->PCR[20] = 0x00000000; //VLL2
wue 0:7b58cdacf811 99 PORTC->PCR[21] = 0x00000000; //VLL1
wue 0:7b58cdacf811 100 PORTC->PCR[22] = 0x00000000; //VCAP2
wue 0:7b58cdacf811 101 PORTC->PCR[23] = 0x00000000; //VCAP1
wue 0:7b58cdacf811 102 // Enable IRCLK
wue 0:7b58cdacf811 103 MCG->C1 |= MCG_C1_IRCLKEN_MASK | MCG_C1_IREFSTEN_MASK;
wue 0:7b58cdacf811 104 MCG->C2 |= MCG_C2_IRCS_MASK ; //0 32KHZ internal reference clock; 1= 4MHz irc
wue 0:7b58cdacf811 105
wue 0:7b58cdacf811 106 //Check if the Fast reference has its divide by 2 enabled (default):
wue 0:7b58cdacf811 107 if ((MCG->SC & MCG_SC_FCRDIV_MASK) != 1<<1)
wue 0:7b58cdacf811 108 error("Invalid clock configuration for SLCD\n");
wue 0:7b58cdacf811 109 LCD->GCR = 0x0;
wue 0:7b58cdacf811 110 LCD->AR = 0x0;
wue 0:7b58cdacf811 111
wue 0:7b58cdacf811 112 // LCD configurartion
wue 0:7b58cdacf811 113 LCD->GCR = ( LCD_GCR_RVEN_MASK*_LCDRVEN
wue 0:7b58cdacf811 114 | LCD_GCR_RVTRIM(_LCDRVTRIM) //0-15
wue 0:7b58cdacf811 115 | LCD_GCR_CPSEL_MASK*_LCDCPSEL
wue 0:7b58cdacf811 116 | LCD_GCR_LADJ(_LCDLOADADJUST) //0-3
wue 0:7b58cdacf811 117 | LCD_GCR_VSUPPLY_MASK*_LCDSUPPLY //0-1
wue 0:7b58cdacf811 118 |!LCD_GCR_FDCIEN_MASK
wue 0:7b58cdacf811 119 | LCD_GCR_ALTDIV(1) //divide by something
wue 0:7b58cdacf811 120 |!LCD_GCR_LCDDOZE_MASK
wue 0:7b58cdacf811 121 |!LCD_GCR_LCDSTP_MASK
wue 0:7b58cdacf811 122 |!LCD_GCR_LCDEN_MASK //WILL BE ENABLE ON SUBSEQUENT STEP
wue 0:7b58cdacf811 123 | LCD_GCR_SOURCE_MASK*1
wue 0:7b58cdacf811 124 | LCD_GCR_ALTSOURCE_MASK*0
wue 0:7b58cdacf811 125 | LCD_GCR_LCLK(0) //0-7
wue 0:7b58cdacf811 126 | LCD_GCR_DUTY(_LCDDUTY) //0-7
wue 0:7b58cdacf811 127 );
wue 0:7b58cdacf811 128 uint8_t i;
wue 0:7b58cdacf811 129 uint32_t *p_pen;
wue 0:7b58cdacf811 130 uint8_t pen_offset; // 0 or 1
wue 0:7b58cdacf811 131 uint8_t pen_bit; // 0 to 31
wue 0:7b58cdacf811 132 LCD->PEN[0] = 0x0;
wue 0:7b58cdacf811 133 LCD->PEN[1] = 0x0;
wue 0:7b58cdacf811 134 LCD->BPEN[0] = 0x0;
wue 0:7b58cdacf811 135 LCD->BPEN[1] = 0x0;
wue 0:7b58cdacf811 136 p_pen = (uint32_t *)&LCD->PEN[0];
wue 0:7b58cdacf811 137 for (i=0; i<_LCDUSEDPINS; i++) {
wue 0:7b58cdacf811 138 pen_offset = WF_ORDERING_TABLE[i]/32;
wue 0:7b58cdacf811 139 pen_bit = WF_ORDERING_TABLE[i]%32;
wue 0:7b58cdacf811 140 p_pen[pen_offset] |= 1 << pen_bit;
wue 0:7b58cdacf811 141 if (i>= _LCDFRONTPLANES) { // Pin is a backplane
wue 0:7b58cdacf811 142 p_pen[pen_offset+2] |= 1 << pen_bit; // Enable BPEN
wue 0:7b58cdacf811 143 LCD->WF8B[(uint8_t)WF_ORDERING_TABLE[i]] = 1 << (i - _LCDFRONTPLANES); // fill with 0x01, 0x02, etc
wue 0:7b58cdacf811 144 }
wue 0:7b58cdacf811 145 }
wue 0:7b58cdacf811 146 LCD->GCR |= LCD_GCR_LCDEN_MASK;
wue 0:7b58cdacf811 147 }
wue 0:7b58cdacf811 148
wue 0:7b58cdacf811 149 int SLCD::_putc(int c)
wue 0:7b58cdacf811 150 {
wue 0:7b58cdacf811 151 Write_Char(c);
wue 0:7b58cdacf811 152 return 0;
wue 0:7b58cdacf811 153 }
wue 0:7b58cdacf811 154
wue 0:7b58cdacf811 155 void SLCD::Write_Char (char lbValue)
wue 0:7b58cdacf811 156 {
wue 0:7b58cdacf811 157 if (CharPosition >= _CHARNUM)
wue 0:7b58cdacf811 158 CharPosition = 0;
wue 0:7b58cdacf811 159
wue 0:7b58cdacf811 160 if (lbValue == '.') {
wue 0:7b58cdacf811 161 // Use built-in dot
wue 0:7b58cdacf811 162 DP(CharPosition-1, true);
wue 0:7b58cdacf811 163 return;
wue 0:7b58cdacf811 164 }
wue 0:7b58cdacf811 165
wue 0:7b58cdacf811 166 uint8_t char_val;
wue 0:7b58cdacf811 167 uint8_t temp;
wue 0:7b58cdacf811 168 uint8_t *lbpLCDWF;
wue 0:7b58cdacf811 169 uint8_t lbCounter;
wue 0:7b58cdacf811 170 uint16_t arrayOffset;
wue 0:7b58cdacf811 171 uint8_t position;
wue 0:7b58cdacf811 172
wue 0:7b58cdacf811 173 lbpLCDWF = (uint8_t *)&LCD->WF8B[0];
wue 0:7b58cdacf811 174 /* only ascii character if value not writeable write as @ */
wue 0:7b58cdacf811 175 if (lbValue>='a' && lbValue<='z') {
wue 0:7b58cdacf811 176 lbValue -= 32; // UpperCase
wue 0:7b58cdacf811 177 }
wue 0:7b58cdacf811 178 if (lbValue<ASCCI_TABLE_START || lbValue >ASCCI_TABLE_END) {
wue 0:7b58cdacf811 179 if (lbValue!='-') //LG+
wue 0:7b58cdacf811 180 lbValue = BLANK_CHARACTER; // default value as space
wue 0:7b58cdacf811 181 }
wue 0:7b58cdacf811 182 //if(lbValue=='-') lbValue += (-ASCCI_TABLE_START+3+(196)/4); else //LG+
wue 0:7b58cdacf811 183 if(lbValue=='-') lbValue = 196/4; else //LG+
wue 0:7b58cdacf811 184 lbValue -=ASCCI_TABLE_START; // Remove the offset to search in the ascci table
wue 0:7b58cdacf811 185 arrayOffset = (lbValue * _CHAR_SIZE); // Compensate matrix offset
wue 0:7b58cdacf811 186 // ensure bLCD position is in valid limit
wue 0:7b58cdacf811 187 lbCounter = 0; //number of writings to complete one char
wue 0:7b58cdacf811 188 while (lbCounter<_CHAR_SIZE) {
wue 0:7b58cdacf811 189 position = (CharPosition) *_LCDTYPE + lbCounter;
wue 0:7b58cdacf811 190 temp=0;
wue 0:7b58cdacf811 191 if (lbCounter==1) {
wue 0:7b58cdacf811 192 temp = lbpLCDWF[WF_ORDERING_TABLE[position]] & 0x01;//bit 0 has the special symbol information
wue 0:7b58cdacf811 193 }
wue 0:7b58cdacf811 194 char_val = ASCII_TO_WF_CODIFICATION_TABLE[arrayOffset + lbCounter];
wue 0:7b58cdacf811 195 lbpLCDWF[WF_ORDERING_TABLE[position]] = char_val | temp;
wue 0:7b58cdacf811 196 // if (char_val==0) lbCounter = _CHAR_SIZE; //end of this character
wue 0:7b58cdacf811 197 lbCounter++;
wue 0:7b58cdacf811 198 }
wue 0:7b58cdacf811 199 CharPosition++;
wue 0:7b58cdacf811 200 }
wue 0:7b58cdacf811 201
wue 0:7b58cdacf811 202 void SLCD::Home (void)
wue 0:7b58cdacf811 203 {
wue 0:7b58cdacf811 204 CharPosition = 0;
wue 0:7b58cdacf811 205 }
wue 0:7b58cdacf811 206
wue 0:7b58cdacf811 207 void SLCD::Contrast (uint8_t lbContrast)
wue 0:7b58cdacf811 208 {
wue 0:7b58cdacf811 209 lbContrast &= 0x0F; //Forced to the only values accepted
wue 0:7b58cdacf811 210 LCD->GCR |= LCD_GCR_RVTRIM(lbContrast);
wue 0:7b58cdacf811 211 }
wue 0:7b58cdacf811 212
wue 0:7b58cdacf811 213 void SLCD::clear()
wue 0:7b58cdacf811 214 {
wue 0:7b58cdacf811 215 All_Segments(0);
wue 0:7b58cdacf811 216 }
wue 0:7b58cdacf811 217
wue 0:7b58cdacf811 218 void SLCD::All_Segments (int mode)
wue 0:7b58cdacf811 219 {
wue 0:7b58cdacf811 220 uint8_t lbTotalBytes = _CHARNUM * _LCDTYPE;
wue 0:7b58cdacf811 221 uint8_t lbCounter=0;
wue 0:7b58cdacf811 222 uint8_t *lbpLCDWF;
wue 0:7b58cdacf811 223
wue 0:7b58cdacf811 224 lbpLCDWF = (uint8_t *)&LCD->WF8B[0];
wue 0:7b58cdacf811 225 while (lbCounter < lbTotalBytes) {
wue 0:7b58cdacf811 226 if (mode==1) {
wue 0:7b58cdacf811 227 lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[lbCounter++]]=_ALLON;
wue 0:7b58cdacf811 228 } else {
wue 0:7b58cdacf811 229 lbpLCDWF[WF_ORDERING_TABLE[lbCounter++]]=0;
wue 0:7b58cdacf811 230 }
wue 0:7b58cdacf811 231 }
wue 0:7b58cdacf811 232 }
wue 0:7b58cdacf811 233
wue 0:7b58cdacf811 234 void SLCD::DP(int pos, bool on)
wue 0:7b58cdacf811 235 {
wue 0:7b58cdacf811 236 uint8_t *lbpLCDWF;
wue 0:7b58cdacf811 237 int tableLoc;
wue 0:7b58cdacf811 238 switch (pos) {
wue 0:7b58cdacf811 239 case 0:
wue 0:7b58cdacf811 240 tableLoc = 1;
wue 0:7b58cdacf811 241 break;
wue 0:7b58cdacf811 242 case 1:
wue 0:7b58cdacf811 243 tableLoc = 3;
wue 0:7b58cdacf811 244 break;
wue 0:7b58cdacf811 245 case 2:
wue 0:7b58cdacf811 246 tableLoc = 5;
wue 0:7b58cdacf811 247 break;
wue 0:7b58cdacf811 248 default:
wue 0:7b58cdacf811 249 return; // Bad position
wue 0:7b58cdacf811 250 }
wue 0:7b58cdacf811 251 lbpLCDWF = (uint8_t *)&LCD->WF8B[0];
wue 0:7b58cdacf811 252 if (on) {
wue 0:7b58cdacf811 253 lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[tableLoc]]|=1;
wue 0:7b58cdacf811 254 } else {
wue 0:7b58cdacf811 255 lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[tableLoc]]&=~1;
wue 0:7b58cdacf811 256 }
wue 0:7b58cdacf811 257 }
wue 0:7b58cdacf811 258
wue 0:7b58cdacf811 259 void SLCD::DP1 (int mode)
wue 0:7b58cdacf811 260 {
wue 0:7b58cdacf811 261 DP(0, mode==1);
wue 0:7b58cdacf811 262 }
wue 0:7b58cdacf811 263
wue 0:7b58cdacf811 264 void SLCD::DP2 (int mode)
wue 0:7b58cdacf811 265 {
wue 0:7b58cdacf811 266 DP(1, mode==1);
wue 0:7b58cdacf811 267 }
wue 0:7b58cdacf811 268
wue 0:7b58cdacf811 269 void SLCD::DP3 (int mode)
wue 0:7b58cdacf811 270 {
wue 0:7b58cdacf811 271 DP(2, mode==1);
wue 0:7b58cdacf811 272 }
wue 0:7b58cdacf811 273
wue 0:7b58cdacf811 274 void SLCD::Colon (int mode)
wue 0:7b58cdacf811 275 {
wue 0:7b58cdacf811 276 uint8_t *lbpLCDWF;
wue 0:7b58cdacf811 277 lbpLCDWF = (uint8_t *)&LCD->WF8B[0];
wue 0:7b58cdacf811 278 if (mode==1) {
wue 0:7b58cdacf811 279 lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[7]]|=1;
wue 0:7b58cdacf811 280 } else {
wue 0:7b58cdacf811 281 lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[7]]&=~1;
wue 0:7b58cdacf811 282 }
wue 0:7b58cdacf811 283 }
wue 0:7b58cdacf811 284
wue 0:7b58cdacf811 285 void SLCD::blink(int blink)
wue 0:7b58cdacf811 286 {
wue 0:7b58cdacf811 287 if (( blink > 7) || (blink < 0))
wue 0:7b58cdacf811 288 LCD->AR &= ~LCD_AR_BLINK_MASK;
wue 0:7b58cdacf811 289 else
wue 0:7b58cdacf811 290 LCD->AR |= LCD_AR_BLINK_MASK | blink;
wue 0:7b58cdacf811 291 }
wue 0:7b58cdacf811 292
wue 0:7b58cdacf811 293 void SLCD::deepsleepEnable(bool enable)
wue 0:7b58cdacf811 294 {
wue 0:7b58cdacf811 295 MCG->C1 &= ~MCG_C1_IREFSTEN_MASK;
wue 0:7b58cdacf811 296 MCG->C1 |= enable << MCG_C1_IREFSTEN_SHIFT;
wue 0:7b58cdacf811 297 LCD->GCR &= ~LCD_GCR_LCDSTP_MASK;
wue 0:7b58cdacf811 298 LCD->GCR |= (!enable) << LCD_GCR_LCDSTP_SHIFT;
wue 0:7b58cdacf811 299 }