Wojciech Rynczuk
/
DP_Demo
Dni Przedsiebierczosci Demo
SLCD-/SLCD.cpp@0:eb5dfc6d9eae, 2017-04-21 (annotated)
- Committer:
- ketjow
- Date:
- Fri Apr 21 08:25:54 2017 +0000
- Revision:
- 0:eb5dfc6d9eae
Initial
Who changed what in which revision?
User | Revision | Line number | New 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 | } |