Dni Przedsiebierczosci Demo

Dependencies:   mbed

Committer:
ketjow
Date:
Fri Apr 21 08:25:54 2017 +0000
Revision:
0:eb5dfc6d9eae
Initial

Who changed what in which revision?

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