-nil-

Dependents:   FRDM-KL46Z_Debug

Fork of SLCD by Erik -

Committer:
salemtang
Date:
Thu Oct 02 13:14:49 2014 +0000
Revision:
13:30f772d89c50
Parent:
12:2470cab680b7
20141002_2215 modified

Who changed what in which revision?

UserRevisionLine numberNew contents of line
salemtang 12:2470cab680b7 1 /**
salemtang 12:2470cab680b7 2 * @file SLCD.cpp
salemtang 12:2470cab680b7 3 * @brief Abstract
salemtang 12:2470cab680b7 4 * @copyright (c)
salemtang 12:2470cab680b7 5 */
salemtang 12:2470cab680b7 6 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 7 // note
salemtang 12:2470cab680b7 8 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 9
salemtang 12:2470cab680b7 10 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 11 // include files
salemtang 12:2470cab680b7 12 // -----------------------------------------------------------------------------
Sissors 0:d04758e76d5b 13 #include "SLCD.h"
star297 1:1579bcd31410 14 #include "LCDconfig.h"
Sissors 0:d04758e76d5b 15
salemtang 12:2470cab680b7 16 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 17 // general define
salemtang 12:2470cab680b7 18 // -----------------------------------------------------------------------------
Sissors 0:d04758e76d5b 19
salemtang 12:2470cab680b7 20 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 21 // struct define
salemtang 12:2470cab680b7 22 // -----------------------------------------------------------------------------
Tomo2k 6:f4773221794b 23 const uint8_t WF_ORDERING_TABLE[ ] = {
Tomo2k 6:f4773221794b 24 CHAR1a, // LCD81 --- Pin:5 LCDnAddress=51
Tomo2k 6:f4773221794b 25 CHAR1b, // LCD82 --- Pin:6 LCDnAddress=52
Tomo2k 6:f4773221794b 26 CHAR2a, // LCD83 --- Pin:7 LCDnAddress=53
Tomo2k 6:f4773221794b 27 CHAR2b, // LCD84 --- Pin:8 LCDnAddress=54
Tomo2k 6:f4773221794b 28 CHAR3a, // LCD85 --- Pin:9 LCDnAddress=55
Tomo2k 6:f4773221794b 29 CHAR3b, // LCD86 --- Pin:10 LCDnAddress=56
Tomo2k 6:f4773221794b 30 CHAR4a, // LCD87 --- Pin:11 LCDnAddress=57
Tomo2k 6:f4773221794b 31 CHAR4b, // LCD88 --- Pin:12 LCDnAddress=58
Tomo2k 6:f4773221794b 32 CHARCOM0, // LCD77 --- Pin:1 LCDnAddress=4D
Tomo2k 6:f4773221794b 33 CHARCOM1, // LCD78 --- Pin:2 LCDnAddress=4E
Tomo2k 6:f4773221794b 34 CHARCOM2, // LCD79 --- Pin:3 LCDnAddress=4F
Tomo2k 6:f4773221794b 35 CHARCOM3, // LCD80 --- Pin:4 LCDnAddress=50
Sissors 0:d04758e76d5b 36 };
Sissors 0:d04758e76d5b 37
Tomo2k 6:f4773221794b 38 const char ASCII_TO_WF_CODIFICATION_TABLE [ ] = {
Tomo2k 6:f4773221794b 39
Tomo2k 6:f4773221794b 40 /*
Tomo2k 6:f4773221794b 41 segA
Tomo2k 6:f4773221794b 42 ________
Tomo2k 6:f4773221794b 43 | |
Tomo2k 6:f4773221794b 44 segF | | segB
Tomo2k 6:f4773221794b 45 | |
Tomo2k 6:f4773221794b 46 -segG--
Tomo2k 6:f4773221794b 47 | |
Tomo2k 6:f4773221794b 48 segE | | segC
Tomo2k 6:f4773221794b 49 |________|
Tomo2k 6:f4773221794b 50 segD
Tomo2k 6:f4773221794b 51 */
Tomo2k 6:f4773221794b 52
Tomo2k 6:f4773221794b 53 ( SEGD+ SEGE+ SEGF+!SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = 0, offset=0
Tomo2k 6:f4773221794b 54 (!SEGD+!SEGE+!SEGF+!SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = 1, offset=4
Tomo2k 6:f4773221794b 55 ( SEGD+ SEGE+!SEGF+ SEGG) , (!SEGC+ SEGB+ SEGA) ,//Char = 2, offset=8
Tomo2k 6:f4773221794b 56 ( SEGD+!SEGE+!SEGF+ SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = 3, offset=12
Tomo2k 6:f4773221794b 57 (!SEGD+!SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = 4, offset=16
Tomo2k 6:f4773221794b 58 ( SEGD+!SEGE+ SEGF+ SEGG) , ( SEGC+!SEGB+ SEGA) ,//Char = 5, offset=20
Tomo2k 6:f4773221794b 59 ( SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+!SEGB+ SEGA) ,//Char = 6, offset=24
Tomo2k 6:f4773221794b 60 (!SEGD+!SEGE+!SEGF+!SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = 7, offset=28
Tomo2k 6:f4773221794b 61 ( SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = 8, offset=32
Tomo2k 6:f4773221794b 62 ( SEGD+!SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = 9, offset=36
Tomo2k 6:f4773221794b 63 (!SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = :, offset=40
Tomo2k 6:f4773221794b 64 (!SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = ;, offset=44
Tomo2k 6:f4773221794b 65 (!SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = <, offset=48
Tomo2k 6:f4773221794b 66 ( SEGD+!SEGE+!SEGF+ SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = =, offset=52
Tomo2k 6:f4773221794b 67 (!SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = >, offset=56
Tomo2k 6:f4773221794b 68 (!SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = ?, offset=60
Tomo2k 6:f4773221794b 69 ( SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = @, offset=64
Tomo2k 6:f4773221794b 70 (!SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = A, offset=68
Tomo2k 6:f4773221794b 71 ( SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+!SEGB+!SEGA) ,//Char = B, offset=72
Tomo2k 6:f4773221794b 72 ( SEGD+ SEGE+ SEGF+!SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = C, offset=76
Tomo2k 6:f4773221794b 73 ( SEGD+ SEGE+!SEGF+ SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = D, offset=80
Tomo2k 6:f4773221794b 74 ( SEGD+ SEGE+ SEGF+ SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = E, offset=84
Tomo2k 6:f4773221794b 75 (!SEGD+ SEGE+ SEGF+ SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = F, offset=88
Tomo2k 6:f4773221794b 76 ( SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+!SEGB+ SEGA) ,//Char = G, offset=92
Tomo2k 6:f4773221794b 77 (!SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = H, offset=96
Tomo2k 6:f4773221794b 78 (!SEGD+!SEGE+!SEGF+!SEGG) , ( SEGC+!SEGB+!SEGA) ,//Char = I, offset=100
Tomo2k 6:f4773221794b 79 ( SEGD+ SEGE+!SEGF+!SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = J, offset=104
Tomo2k 6:f4773221794b 80 (!SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+!SEGB+ SEGA) ,//Char = K, offset=108
Tomo2k 6:f4773221794b 81 ( SEGD+ SEGE+ SEGF+!SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = L, offset=112
Tomo2k 6:f4773221794b 82 (!SEGD+ SEGE+ SEGF+!SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = M, offset=116
Tomo2k 6:f4773221794b 83 (!SEGD+ SEGE+!SEGF+ SEGG) , ( SEGC+!SEGB+!SEGA) ,//Char = N, offset=120
Tomo2k 6:f4773221794b 84 ( SEGD+ SEGE+!SEGF+ SEGG) , ( SEGC+!SEGB+!SEGA) ,//Char = O, offset=124
Tomo2k 6:f4773221794b 85 (!SEGD+ SEGE+ SEGF+ SEGG) , (!SEGC+ SEGB+ SEGA) ,//Char = P, offset=128
Tomo2k 6:f4773221794b 86 ( SEGD+!SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+ SEGA) ,//Char = Q, offset=132
Tomo2k 6:f4773221794b 87 (!SEGD+ SEGE+!SEGF+ SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = R, offset=136
Tomo2k 6:f4773221794b 88 ( SEGD+!SEGE+ SEGF+ SEGG) , ( SEGC+!SEGB+ SEGA) ,//Char = S, offset=140
Tomo2k 6:f4773221794b 89 ( SEGD+ SEGE+ SEGF+ SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = T, offset=144
Tomo2k 6:f4773221794b 90 ( SEGD+ SEGE+ SEGF+!SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = U, offset=148
Tomo2k 6:f4773221794b 91 ( SEGD+ SEGE+!SEGF+!SEGG) , ( SEGC+!SEGB+!SEGA) ,//Char = V, offset=152
Tomo2k 6:f4773221794b 92 ( SEGD+ SEGE+ SEGF+!SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = W, offset=156
Tomo2k 6:f4773221794b 93 (!SEGD+ SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = X, offset=160
Tomo2k 6:f4773221794b 94 ( SEGD+!SEGE+ SEGF+ SEGG) , ( SEGC+ SEGB+!SEGA) ,//Char = Y, offset=164
Tomo2k 6:f4773221794b 95 ( SEGD+!SEGE+!SEGF+ SEGG) , (!SEGC+!SEGB+!SEGA) ,//Char = Z, offset=168
Tomo2k 6:f4773221794b 96 ( SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = [, offset=172
Tomo2k 6:f4773221794b 97 ( SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = \, offset=176
Tomo2k 6:f4773221794b 98 ( SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = ], offset=180
Tomo2k 6:f4773221794b 99 ( SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = ^, offset=184
Tomo2k 6:f4773221794b 100 ( SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = _, offset=188
Tomo2k 6:f4773221794b 101 ( SEGD+!SEGE+!SEGF+!SEGG) , (!SEGC+!SEGB+ SEGA) ,//Char = `, offset=192
Sissors 0:d04758e76d5b 102 };
Sissors 0:d04758e76d5b 103
salemtang 12:2470cab680b7 104 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 105 // external function
salemtang 12:2470cab680b7 106 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 107
salemtang 12:2470cab680b7 108 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 109 // function prototype
salemtang 12:2470cab680b7 110 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 111
salemtang 12:2470cab680b7 112 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 113 // external variable
salemtang 12:2470cab680b7 114 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 115
salemtang 12:2470cab680b7 116 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 117 // global variable
salemtang 12:2470cab680b7 118 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 119
salemtang 12:2470cab680b7 120 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 121 // function
salemtang 12:2470cab680b7 122 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 123 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 124 //! @brief SLCD Main Function
salemtang 12:2470cab680b7 125 //! @param [in] nil
salemtang 12:2470cab680b7 126 //! @retval nil
salemtang 12:2470cab680b7 127 // -----------------------------------------------------------------------------
Tomo2k 6:f4773221794b 128 SLCD::SLCD()
Tomo2k 6:f4773221794b 129 {
Sissors 0:d04758e76d5b 130 init();
Tomo2k 6:f4773221794b 131 CharPosition = 0;
star297 1:1579bcd31410 132 }
Sissors 0:d04758e76d5b 133
salemtang 12:2470cab680b7 134 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 135 //! @brief Initialize Setting
salemtang 12:2470cab680b7 136 //! @param [in] nil
salemtang 12:2470cab680b7 137 //! @retval nil
salemtang 12:2470cab680b7 138 // -----------------------------------------------------------------------------
Tomo2k 6:f4773221794b 139 void SLCD::init()
Tomo2k 6:f4773221794b 140 {
Sissors 0:d04758e76d5b 141 SIM->SCGC5 |= SIM_SCGC5_SLCD_MASK | SIM_SCGC5_PORTB_MASK | SIM_SCGC5_PORTC_MASK | SIM_SCGC5_PORTD_MASK | SIM_SCGC5_PORTE_MASK;
Tomo2k 6:f4773221794b 142
Tomo2k 6:f4773221794b 143 // configure pins for LCD operation
Tomo2k 6:f4773221794b 144 PORTC->PCR[20] = 0x00000000; //VLL2
Tomo2k 6:f4773221794b 145 PORTC->PCR[21] = 0x00000000; //VLL1
Tomo2k 6:f4773221794b 146 PORTC->PCR[22] = 0x00000000; //VCAP2
Tomo2k 6:f4773221794b 147 PORTC->PCR[23] = 0x00000000; //VCAP1
Tomo2k 6:f4773221794b 148 // Enable IRCLK
Tomo2k 6:f4773221794b 149 MCG->C1 |= MCG_C1_IRCLKEN_MASK | MCG_C1_IREFSTEN_MASK;
Tomo2k 6:f4773221794b 150 MCG->C2 |= MCG_C2_IRCS_MASK ; //0 32KHZ internal reference clock; 1= 4MHz irc
Sissors 4:ec7b3c9b2aeb 151
Tomo2k 6:f4773221794b 152 //Check if the Fast reference has its divide by 2 enabled (default):
Tomo2k 6:f4773221794b 153 if ((MCG->SC & MCG_SC_FCRDIV_MASK) != 1<<1)
Tomo2k 6:f4773221794b 154 error("Invalid clock configuration for SLCD\n");
Tomo2k 6:f4773221794b 155 LCD->GCR = 0x0;
Tomo2k 6:f4773221794b 156 LCD->AR = 0x0;
Tomo2k 6:f4773221794b 157
Tomo2k 6:f4773221794b 158 // LCD configurartion
Tomo2k 6:f4773221794b 159 LCD->GCR = ( LCD_GCR_RVEN_MASK*_LCDRVEN
star297 1:1579bcd31410 160 | LCD_GCR_RVTRIM(_LCDRVTRIM) //0-15
Tomo2k 6:f4773221794b 161 | LCD_GCR_CPSEL_MASK*_LCDCPSEL
star297 1:1579bcd31410 162 | LCD_GCR_LADJ(_LCDLOADADJUST) //0-3
star297 1:1579bcd31410 163 | LCD_GCR_VSUPPLY_MASK*_LCDSUPPLY //0-1
Sissors 0:d04758e76d5b 164 |!LCD_GCR_FDCIEN_MASK
Sissors 4:ec7b3c9b2aeb 165 | LCD_GCR_ALTDIV(1) //divide by something
Tomo2k 6:f4773221794b 166 |!LCD_GCR_LCDDOZE_MASK
Sissors 0:d04758e76d5b 167 |!LCD_GCR_LCDSTP_MASK
star297 1:1579bcd31410 168 |!LCD_GCR_LCDEN_MASK //WILL BE ENABLE ON SUBSEQUENT STEP
Sissors 4:ec7b3c9b2aeb 169 | LCD_GCR_SOURCE_MASK*1
Tomo2k 6:f4773221794b 170 | LCD_GCR_ALTSOURCE_MASK*0
Sissors 4:ec7b3c9b2aeb 171 | LCD_GCR_LCLK(0) //0-7
Sissors 0:d04758e76d5b 172 | LCD_GCR_DUTY(_LCDDUTY) //0-7
Tomo2k 6:f4773221794b 173 );
Tomo2k 6:f4773221794b 174 uint8_t i;
Tomo2k 6:f4773221794b 175 uint32_t *p_pen;
Tomo2k 6:f4773221794b 176 uint8_t pen_offset; // 0 or 1
Tomo2k 6:f4773221794b 177 uint8_t pen_bit; // 0 to 31
Tomo2k 6:f4773221794b 178 LCD->PEN[0] = 0x0;
Tomo2k 6:f4773221794b 179 LCD->PEN[1] = 0x0;
Tomo2k 6:f4773221794b 180 LCD->BPEN[0] = 0x0;
Tomo2k 6:f4773221794b 181 LCD->BPEN[1] = 0x0;
Tomo2k 6:f4773221794b 182 p_pen = (uint32_t *)&LCD->PEN[0];
Tomo2k 6:f4773221794b 183 for (i=0; i<_LCDUSEDPINS; i++) {
Tomo2k 6:f4773221794b 184 pen_offset = WF_ORDERING_TABLE[i]/32;
Tomo2k 6:f4773221794b 185 pen_bit = WF_ORDERING_TABLE[i]%32;
Tomo2k 6:f4773221794b 186 p_pen[pen_offset] |= 1 << pen_bit;
Tomo2k 6:f4773221794b 187 if (i>= _LCDFRONTPLANES) { // Pin is a backplane
Tomo2k 6:f4773221794b 188 p_pen[pen_offset+2] |= 1 << pen_bit; // Enable BPEN
Tomo2k 6:f4773221794b 189 LCD->WF8B[(uint8_t)WF_ORDERING_TABLE[i]] = 1 << (i - _LCDFRONTPLANES); // fill with 0x01, 0x02, etc
Tomo2k 6:f4773221794b 190 }
Tomo2k 6:f4773221794b 191 }
Tomo2k 6:f4773221794b 192 LCD->GCR |= LCD_GCR_LCDEN_MASK;
star297 3:f70873bc6121 193 }
Sissors 0:d04758e76d5b 194
salemtang 12:2470cab680b7 195 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 196 //! @brief Put Characters
salemtang 12:2470cab680b7 197 //! @param [in] c integer
salemtang 12:2470cab680b7 198 //! @retval int
salemtang 12:2470cab680b7 199 // -----------------------------------------------------------------------------
Tomo2k 6:f4773221794b 200 int SLCD::_putc(int c)
Tomo2k 6:f4773221794b 201 {
star297 3:f70873bc6121 202 Write_Char(c);
star297 3:f70873bc6121 203 return 0;
star297 3:f70873bc6121 204 }
Sissors 0:d04758e76d5b 205
salemtang 12:2470cab680b7 206 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 207 //! @brief Write Characters
salemtang 12:2470cab680b7 208 //! @param [in] lbValue characters
salemtang 12:2470cab680b7 209 //! @retval nil
salemtang 12:2470cab680b7 210 // -----------------------------------------------------------------------------
Tomo2k 6:f4773221794b 211 void SLCD::Write_Char (char lbValue)
Tomo2k 6:f4773221794b 212 {
Tomo2k 7:0e084b33d730 213 if (CharPosition >= _CHARNUM)
Tomo2k 7:0e084b33d730 214 CharPosition = 0;
Tomo2k 7:0e084b33d730 215
Tomo2k 7:0e084b33d730 216 if (lbValue == '.') {
Tomo2k 7:0e084b33d730 217 // Use built-in dot
Tomo2k 7:0e084b33d730 218 DP(CharPosition-1, true);
Tomo2k 7:0e084b33d730 219 return;
Tomo2k 7:0e084b33d730 220 }
Tomo2k 7:0e084b33d730 221
Tomo2k 6:f4773221794b 222 uint8_t char_val;
Tomo2k 6:f4773221794b 223 uint8_t temp;
Tomo2k 6:f4773221794b 224 uint8_t *lbpLCDWF;
Tomo2k 6:f4773221794b 225 uint8_t lbCounter;
Tomo2k 6:f4773221794b 226 uint16_t arrayOffset;
Tomo2k 6:f4773221794b 227 uint8_t position;
Tomo2k 6:f4773221794b 228
Tomo2k 6:f4773221794b 229 lbpLCDWF = (uint8_t *)&LCD->WF8B[0];
Tomo2k 6:f4773221794b 230 /* only ascii character if value not writeable write as @ */
Tomo2k 6:f4773221794b 231 if (lbValue>='a' && lbValue<='z') {
Tomo2k 6:f4773221794b 232 lbValue -= 32; // UpperCase
Tomo2k 6:f4773221794b 233 }
Tomo2k 6:f4773221794b 234 if (lbValue<ASCCI_TABLE_START || lbValue >ASCCI_TABLE_END) {
Tomo2k 6:f4773221794b 235 lbValue = BLANK_CHARACTER; // default value as space
Tomo2k 6:f4773221794b 236 }
Tomo2k 6:f4773221794b 237 lbValue -=ASCCI_TABLE_START; // Remove the offset to search in the ascci table
Tomo2k 6:f4773221794b 238 arrayOffset = (lbValue * _CHAR_SIZE); // Compensate matrix offset
Tomo2k 6:f4773221794b 239 // ensure bLCD position is in valid limit
Tomo2k 6:f4773221794b 240 lbCounter = 0; //number of writings to complete one char
Tomo2k 6:f4773221794b 241 while (lbCounter<_CHAR_SIZE) {
Tomo2k 6:f4773221794b 242 position = (CharPosition) *_LCDTYPE + lbCounter;
Tomo2k 6:f4773221794b 243 temp=0;
Tomo2k 6:f4773221794b 244 if (lbCounter==1) {
Tomo2k 6:f4773221794b 245 temp = lbpLCDWF[WF_ORDERING_TABLE[position]] & 0x01;//bit 0 has the special symbol information
Tomo2k 6:f4773221794b 246 }
Tomo2k 6:f4773221794b 247 char_val = ASCII_TO_WF_CODIFICATION_TABLE[arrayOffset + lbCounter];
Tomo2k 6:f4773221794b 248 lbpLCDWF[WF_ORDERING_TABLE[position]] = char_val | temp;
Tomo2k 6:f4773221794b 249 // if (char_val==0) lbCounter = _CHAR_SIZE; //end of this character
Tomo2k 6:f4773221794b 250 lbCounter++;
Tomo2k 6:f4773221794b 251 }
Tomo2k 6:f4773221794b 252 CharPosition++;
Sissors 0:d04758e76d5b 253 }
Sissors 0:d04758e76d5b 254
salemtang 12:2470cab680b7 255 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 256 //! @brief Set Home Position
salemtang 12:2470cab680b7 257 //! @param [in] nil
salemtang 12:2470cab680b7 258 //! @retval nil
salemtang 12:2470cab680b7 259 // -----------------------------------------------------------------------------
Tomo2k 10:ef2b3b7f1b01 260 void SLCD::Home()
Tomo2k 6:f4773221794b 261 {
Tomo2k 6:f4773221794b 262 CharPosition = 0;
Tomo2k 6:f4773221794b 263 }
star297 1:1579bcd31410 264
salemtang 12:2470cab680b7 265 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 266 //! @brief Set Contrast
salemtang 12:2470cab680b7 267 //! @param [in] lbContrast contrast
salemtang 12:2470cab680b7 268 //! @retval nil
salemtang 12:2470cab680b7 269 // -----------------------------------------------------------------------------
star297 3:f70873bc6121 270 void SLCD::Contrast (uint8_t lbContrast)
Tomo2k 6:f4773221794b 271 {
Tomo2k 6:f4773221794b 272 lbContrast &= 0x0F; //Forced to the only values accepted
Tomo2k 6:f4773221794b 273 LCD->GCR |= LCD_GCR_RVTRIM(lbContrast);
star297 1:1579bcd31410 274 }
Tomo2k 6:f4773221794b 275
salemtang 12:2470cab680b7 276 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 277 //! @brief Clear Segments
salemtang 12:2470cab680b7 278 //! @param [in] nil
salemtang 12:2470cab680b7 279 //! @retval nil
salemtang 12:2470cab680b7 280 // -----------------------------------------------------------------------------
Tomo2k 7:0e084b33d730 281 void SLCD::clear()
Tomo2k 7:0e084b33d730 282 {
Tomo2k 7:0e084b33d730 283 All_Segments(0);
Tomo2k 7:0e084b33d730 284 }
Tomo2k 7:0e084b33d730 285
salemtang 12:2470cab680b7 286 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 287 //! @brief Set Segments
salemtang 12:2470cab680b7 288 //! @param [in] mode mode
salemtang 12:2470cab680b7 289 //! @retval nil
salemtang 12:2470cab680b7 290 // -----------------------------------------------------------------------------
star297 3:f70873bc6121 291 void SLCD::All_Segments (int mode)
star297 1:1579bcd31410 292 {
Tomo2k 6:f4773221794b 293 uint8_t lbTotalBytes = _CHARNUM * _LCDTYPE;
Tomo2k 6:f4773221794b 294 uint8_t lbCounter=0;
Tomo2k 6:f4773221794b 295 uint8_t *lbpLCDWF;
Tomo2k 6:f4773221794b 296
Tomo2k 6:f4773221794b 297 lbpLCDWF = (uint8_t *)&LCD->WF8B[0];
Tomo2k 6:f4773221794b 298 while (lbCounter < lbTotalBytes) {
Tomo2k 6:f4773221794b 299 if (mode==1) {
Tomo2k 6:f4773221794b 300 lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[lbCounter++]]=_ALLON;
Tomo2k 6:f4773221794b 301 } else {
Tomo2k 6:f4773221794b 302 lbpLCDWF[WF_ORDERING_TABLE[lbCounter++]]=0;
Tomo2k 6:f4773221794b 303 }
Tomo2k 6:f4773221794b 304 }
star297 1:1579bcd31410 305 }
star297 1:1579bcd31410 306
salemtang 12:2470cab680b7 307 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 308 //! @brief Set DP
salemtang 12:2470cab680b7 309 //! @param [in] pos position
salemtang 12:2470cab680b7 310 //! @param [in] on on
salemtang 12:2470cab680b7 311 //! @retval nil
salemtang 12:2470cab680b7 312 // -----------------------------------------------------------------------------
Tomo2k 7:0e084b33d730 313 void SLCD::DP(int pos, bool on)
star297 1:1579bcd31410 314 {
Tomo2k 6:f4773221794b 315 uint8_t *lbpLCDWF;
Tomo2k 7:0e084b33d730 316 int tableLoc;
Tomo2k 7:0e084b33d730 317 switch (pos) {
Tomo2k 7:0e084b33d730 318 case 0:
Tomo2k 7:0e084b33d730 319 tableLoc = 1;
Tomo2k 7:0e084b33d730 320 break;
Tomo2k 7:0e084b33d730 321 case 1:
Tomo2k 7:0e084b33d730 322 tableLoc = 3;
Tomo2k 7:0e084b33d730 323 break;
Tomo2k 7:0e084b33d730 324 case 2:
Tomo2k 7:0e084b33d730 325 tableLoc = 5;
Tomo2k 7:0e084b33d730 326 break;
Tomo2k 7:0e084b33d730 327 default:
Tomo2k 7:0e084b33d730 328 return; // Bad position
Tomo2k 7:0e084b33d730 329 }
Tomo2k 6:f4773221794b 330 lbpLCDWF = (uint8_t *)&LCD->WF8B[0];
Tomo2k 7:0e084b33d730 331 if (on) {
Tomo2k 7:0e084b33d730 332 lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[tableLoc]]|=1;
Tomo2k 6:f4773221794b 333 } else {
Tomo2k 7:0e084b33d730 334 lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[tableLoc]]&=~1;
Tomo2k 6:f4773221794b 335 }
star297 1:1579bcd31410 336 }
Tomo2k 6:f4773221794b 337
salemtang 12:2470cab680b7 338 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 339 //! @brief Set DP1
salemtang 12:2470cab680b7 340 //! @param [in] mode mode
salemtang 12:2470cab680b7 341 //! @retval nil
salemtang 12:2470cab680b7 342 // -----------------------------------------------------------------------------
Tomo2k 7:0e084b33d730 343 void SLCD::DP1 (int mode)
Tomo2k 7:0e084b33d730 344 {
Tomo2k 7:0e084b33d730 345 DP(0, mode==1);
Tomo2k 7:0e084b33d730 346 }
Tomo2k 7:0e084b33d730 347
salemtang 12:2470cab680b7 348 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 349 //! @brief Set DP2
salemtang 12:2470cab680b7 350 //! @param [in] mode mode
salemtang 12:2470cab680b7 351 //! @retval nil
salemtang 12:2470cab680b7 352 // -----------------------------------------------------------------------------
star297 3:f70873bc6121 353 void SLCD::DP2 (int mode)
star297 1:1579bcd31410 354 {
Tomo2k 7:0e084b33d730 355 DP(1, mode==1);
Tomo2k 6:f4773221794b 356 }
star297 1:1579bcd31410 357
salemtang 12:2470cab680b7 358 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 359 //! @brief Set DP3
salemtang 12:2470cab680b7 360 //! @param [in] mode mode
salemtang 12:2470cab680b7 361 //! @retval nil
salemtang 12:2470cab680b7 362 // -----------------------------------------------------------------------------
star297 3:f70873bc6121 363 void SLCD::DP3 (int mode)
star297 1:1579bcd31410 364 {
Tomo2k 7:0e084b33d730 365 DP(2, mode==1);
star297 1:1579bcd31410 366 }
Tomo2k 6:f4773221794b 367
salemtang 12:2470cab680b7 368 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 369 //! @brief Set Colon
salemtang 12:2470cab680b7 370 //! @param [in] on on
salemtang 12:2470cab680b7 371 //! @retval nil
salemtang 12:2470cab680b7 372 // -----------------------------------------------------------------------------
Tomo2k 10:ef2b3b7f1b01 373 void SLCD::Colon (bool on)
star297 1:1579bcd31410 374 {
Tomo2k 6:f4773221794b 375 uint8_t *lbpLCDWF;
Tomo2k 6:f4773221794b 376 lbpLCDWF = (uint8_t *)&LCD->WF8B[0];
Tomo2k 10:ef2b3b7f1b01 377 if (on) {
Tomo2k 6:f4773221794b 378 lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[7]]|=1;
Tomo2k 6:f4773221794b 379 } else {
Tomo2k 6:f4773221794b 380 lbpLCDWF[(uint8_t)WF_ORDERING_TABLE[7]]&=~1;
Tomo2k 6:f4773221794b 381 }
star297 1:1579bcd31410 382 }
Tomo2k 6:f4773221794b 383
salemtang 12:2470cab680b7 384 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 385 //! @brief Set Blink
salemtang 12:2470cab680b7 386 //! @param [in] blink blink
salemtang 12:2470cab680b7 387 //! @retval nil
salemtang 12:2470cab680b7 388 // -----------------------------------------------------------------------------
Tomo2k 6:f4773221794b 389 void SLCD::blink(int blink)
Tomo2k 6:f4773221794b 390 {
Sissors 4:ec7b3c9b2aeb 391 if (( blink > 7) || (blink < 0))
Sissors 4:ec7b3c9b2aeb 392 LCD->AR &= ~LCD_AR_BLINK_MASK;
Sissors 4:ec7b3c9b2aeb 393 else
Sissors 4:ec7b3c9b2aeb 394 LCD->AR |= LCD_AR_BLINK_MASK | blink;
Sissors 4:ec7b3c9b2aeb 395 }
Tomo2k 6:f4773221794b 396
salemtang 12:2470cab680b7 397 // -----------------------------------------------------------------------------
salemtang 12:2470cab680b7 398 //! @brief Deep Sleep Enable
salemtang 12:2470cab680b7 399 //! @param [in] enable enable
salemtang 12:2470cab680b7 400 //! @retval nil
salemtang 12:2470cab680b7 401 // -----------------------------------------------------------------------------
Tomo2k 6:f4773221794b 402 void SLCD::deepsleepEnable(bool enable)
Tomo2k 6:f4773221794b 403 {
Sissors 4:ec7b3c9b2aeb 404 MCG->C1 &= ~MCG_C1_IREFSTEN_MASK;
Sissors 4:ec7b3c9b2aeb 405 MCG->C1 |= enable << MCG_C1_IREFSTEN_SHIFT;
Sissors 4:ec7b3c9b2aeb 406 LCD->GCR &= ~LCD_GCR_LCDSTP_MASK;
Sissors 4:ec7b3c9b2aeb 407 LCD->GCR |= (!enable) << LCD_GCR_LCDSTP_SHIFT;
Sissors 4:ec7b3c9b2aeb 408 }