[175] | 1 | // Versione 1.0 By Mario Mottula
|
---|
| 2 |
|
---|
| 3 | #include "Arduino.h"
|
---|
| 4 | #include "LCD_m0.h"
|
---|
| 5 | #define H HIGH
|
---|
| 6 | #define L LOW
|
---|
| 7 |
|
---|
| 8 |
|
---|
| 9 | //************************************************************
|
---|
| 10 | //* Funzione di inizializzazione display
|
---|
| 11 | //* 4 bit di dati
|
---|
| 12 | //* 2 righe e font Standard 5x8
|
---|
| 13 | //************************************************************
|
---|
| 14 | void LCD_m0::Inizializza_LCD(int pin_RS, int pin_EN,int pin_D4,int pin_D5, int pin_D6, int pin_D7)
|
---|
| 15 |
|
---|
| 16 | {
|
---|
| 17 | _pin_RS = pin_RS;
|
---|
| 18 | _pin_EN = pin_EN;
|
---|
| 19 | _pin_D7 = pin_D7;
|
---|
| 20 | _pin_D6 = pin_D6;
|
---|
| 21 | _pin_D5 = pin_D5;
|
---|
| 22 | _pin_D4 = pin_D4;
|
---|
| 23 |
|
---|
| 24 |
|
---|
| 25 | //ritardo per stabilizzazione Vdc
|
---|
| 26 | delay(250);
|
---|
| 27 | pinMode(pin_RS, OUTPUT);
|
---|
| 28 | pinMode(pin_EN, OUTPUT);
|
---|
| 29 | pinMode(pin_D7, OUTPUT);
|
---|
| 30 | pinMode(pin_D6, OUTPUT);
|
---|
| 31 | pinMode(pin_D5, OUTPUT);
|
---|
| 32 | pinMode(pin_D4, OUTPUT);
|
---|
| 33 |
|
---|
| 34 | delay(50);
|
---|
| 35 | SetCommandPin(0,0,1,1);
|
---|
| 36 | delay(10);
|
---|
| 37 | SetCommandPin(0,0,1,1);
|
---|
| 38 | delay(1);
|
---|
| 39 | SetCommandPin(0,0,1,1);
|
---|
| 40 | delay(50);
|
---|
| 41 | //impostazione interfaccia 4 bit
|
---|
| 42 | SetCommandPin(0,0,1,0);
|
---|
| 43 | delay(5);
|
---|
| 44 |
|
---|
| 45 | //impostazione font e righe (2 righe Font 5x8)
|
---|
| 46 |
|
---|
| 47 | SetCommandPin(0,0,1,0);
|
---|
| 48 | SetCommandPin(1,0,0,0);
|
---|
| 49 | delay(5);
|
---|
| 50 |
|
---|
| 51 | // impostazione Off display
|
---|
| 52 |
|
---|
| 53 | SetCommandPin(0,0,0,0);
|
---|
| 54 | SetCommandPin(1,0,0,0);
|
---|
| 55 | delay(5);
|
---|
| 56 |
|
---|
| 57 |
|
---|
| 58 | // impostazione On display cursore OFF
|
---|
| 59 |
|
---|
| 60 | SetCommandPin(0,0,0,0);
|
---|
| 61 | SetCommandPin(1,1,0,0);
|
---|
| 62 | delay(5);
|
---|
| 63 |
|
---|
| 64 | // pulizia display
|
---|
| 65 |
|
---|
| 66 | SetCommandPin(0,0,0,0);
|
---|
| 67 | SetCommandPin(0,0,0,0);
|
---|
| 68 | delay(5);
|
---|
| 69 |
|
---|
| 70 |
|
---|
| 71 | //shift a sinistra cursore (Entry mode da SX a DX)
|
---|
| 72 |
|
---|
| 73 | SetCommandPin(0,0,0,0);
|
---|
| 74 | SetCommandPin(0,1,1,0);
|
---|
| 75 |
|
---|
| 76 |
|
---|
| 77 |
|
---|
| 78 |
|
---|
| 79 |
|
---|
| 80 | }
|
---|
| 81 |
|
---|
| 82 |
|
---|
| 83 | //************************************************************
|
---|
| 84 | //* Funzione di invio Comandi
|
---|
| 85 | //************************************************************
|
---|
| 86 | void LCD_m0::SetCommandPin(int D7,int D6,int D5, int D4)
|
---|
| 87 | {
|
---|
| 88 | digitalWrite(_pin_RS, L);
|
---|
| 89 |
|
---|
| 90 | digitalWrite(_pin_D7, D7);
|
---|
| 91 | digitalWrite(_pin_D6, D6);
|
---|
| 92 | digitalWrite(_pin_D5, D5);
|
---|
| 93 | digitalWrite(_pin_D4, D4);
|
---|
| 94 | digitalWrite(_pin_EN, H);
|
---|
| 95 | delay(1);
|
---|
| 96 | digitalWrite(_pin_EN, L);
|
---|
| 97 |
|
---|
| 98 |
|
---|
| 99 | }
|
---|
| 100 |
|
---|
| 101 | //************************************************************
|
---|
| 102 | //* Funzione di invio Dati primi 4 bit
|
---|
| 103 | //************************************************************
|
---|
| 104 |
|
---|
| 105 | void LCD_m0::SetDataPin1(int D7,int D6,int D5, int D4)
|
---|
| 106 | {
|
---|
| 107 |
|
---|
| 108 |
|
---|
| 109 | digitalWrite(_pin_EN, H);
|
---|
| 110 | delay(1);
|
---|
| 111 | digitalWrite(_pin_RS , H);
|
---|
| 112 |
|
---|
| 113 | digitalWrite(_pin_D7, D7);
|
---|
| 114 | digitalWrite(_pin_D6, D6);
|
---|
| 115 | digitalWrite(_pin_D5, D5);
|
---|
| 116 | digitalWrite(_pin_D4, D4);
|
---|
| 117 |
|
---|
| 118 |
|
---|
| 119 | digitalWrite(_pin_EN, L);
|
---|
| 120 | delay(1);
|
---|
| 121 | digitalWrite(12, H);
|
---|
| 122 |
|
---|
| 123 | }
|
---|
| 124 | //************************************************************
|
---|
| 125 | //* Funzione di invio Dati secondi 4 bit
|
---|
| 126 | //************************************************************
|
---|
| 127 |
|
---|
| 128 | void LCD_m0::SetDataPin2(int D7,int D6,int D5, int D4)
|
---|
| 129 | {
|
---|
| 130 |
|
---|
| 131 | digitalWrite(_pin_EN, H);
|
---|
| 132 | delay(1);
|
---|
| 133 | digitalWrite(_pin_RS , H);
|
---|
| 134 |
|
---|
| 135 | digitalWrite(_pin_D7, D7);
|
---|
| 136 | digitalWrite(_pin_D6, D6);
|
---|
| 137 | digitalWrite(_pin_D5, D5);
|
---|
| 138 | digitalWrite(_pin_D4, D4);
|
---|
| 139 |
|
---|
| 140 |
|
---|
| 141 | digitalWrite(_pin_EN, L);
|
---|
| 142 | delay(1);
|
---|
| 143 | digitalWrite(_pin_RS , L);
|
---|
| 144 |
|
---|
| 145 |
|
---|
| 146 | }
|
---|
| 147 |
|
---|
| 148 |
|
---|
| 149 |
|
---|
| 150 |
|
---|
| 151 | //************************************************************
|
---|
| 152 | //* Funzione di attivazione Cursore
|
---|
| 153 | //************************************************************
|
---|
| 154 | void LCD_m0::Cursore_ON()
|
---|
| 155 |
|
---|
| 156 | {
|
---|
| 157 | SetCommandPin(0,0,0,0);
|
---|
| 158 | SetCommandPin(1,1,1,0);
|
---|
| 159 | }
|
---|
| 160 |
|
---|
| 161 |
|
---|
| 162 |
|
---|
| 163 | //************************************************************
|
---|
| 164 | //* Funzione di disattivazione Cursore
|
---|
| 165 | //************************************************************
|
---|
| 166 |
|
---|
| 167 | void LCD_m0::Cursore_OFF()
|
---|
| 168 | {
|
---|
| 169 | SetCommandPin(0,0,0,0);
|
---|
| 170 | SetCommandPin(1,1,0,0);
|
---|
| 171 |
|
---|
| 172 | }
|
---|
| 173 |
|
---|
| 174 |
|
---|
| 175 |
|
---|
| 176 | //************************************************************
|
---|
| 177 | //* Funzione di scrittura carattere in posizione corrente
|
---|
| 178 | //* c = carattere da scrivere in posizione corrente
|
---|
| 179 | //************************************************************
|
---|
| 180 |
|
---|
| 181 | void LCD_m0::Scrivi_Car_PC(char c)
|
---|
| 182 | {
|
---|
| 183 | carattere = c;
|
---|
| 184 |
|
---|
| 185 | for(i=0;i<8;i++)
|
---|
| 186 | {
|
---|
| 187 | bin[i]=((c>>i)&1);
|
---|
| 188 | }
|
---|
| 189 |
|
---|
| 190 | for(i=0;i<8;i++)
|
---|
| 191 | {
|
---|
| 192 | bin_inv[i]=bin[7-i];
|
---|
| 193 | }
|
---|
| 194 | SetDataPin1(bin_inv[0],bin_inv[1],bin_inv[2],bin_inv[3]);
|
---|
| 195 | delay(50);
|
---|
| 196 | SetDataPin2(bin_inv[4],bin_inv[5],bin_inv[6],bin_inv[7]);
|
---|
| 197 |
|
---|
| 198 | }
|
---|
| 199 |
|
---|
| 200 |
|
---|
| 201 | //************************************************************
|
---|
| 202 | //* Funzione di scrittura di un carattere su riga e posizione
|
---|
| 203 | //* desiderate.
|
---|
| 204 | //* c = carttere da scrivere
|
---|
| 205 | //* rig = intero con il numero di riga
|
---|
| 206 | //* pos = intero con il numero della posizione
|
---|
| 207 | //************************************************************
|
---|
| 208 | void LCD_m0::Scrivi_Car_PS(char c,int rig,int pos)
|
---|
| 209 | {
|
---|
| 210 | carattere = c;
|
---|
| 211 | //SerialUSB.begin(9600);
|
---|
| 212 | //SerialUSB.println(carattere);
|
---|
| 213 | if(rig==1){
|
---|
| 214 | SetCommandPin(1,0,0,0);//selezione riga1
|
---|
| 215 | Posizione(pos);
|
---|
| 216 | }
|
---|
| 217 | if(rig==2){
|
---|
| 218 | SetCommandPin(1,1,0,0);//selezione riga 2
|
---|
| 219 | Posizione(pos);
|
---|
| 220 | }
|
---|
| 221 |
|
---|
| 222 | for(i=0;i<8;i++)
|
---|
| 223 | {
|
---|
| 224 | bin[i]=((c>>i)&1);
|
---|
| 225 |
|
---|
| 226 | }
|
---|
| 227 | for(i=0;i<8;i++)
|
---|
| 228 | {
|
---|
| 229 |
|
---|
| 230 | bin_inv[i]=bin[7-i];
|
---|
| 231 |
|
---|
| 232 | }
|
---|
| 233 | SetDataPin1(bin_inv[0],bin_inv[1],bin_inv[2],bin_inv[3]);
|
---|
| 234 | delay(50);
|
---|
| 235 | SetDataPin2(bin_inv[4],bin_inv[5],bin_inv[6],bin_inv[7]);
|
---|
| 236 |
|
---|
| 237 | }
|
---|
| 238 |
|
---|
| 239 |
|
---|
| 240 | void LCD_m0::Posizione(int pos)
|
---|
| 241 | {
|
---|
| 242 | switch (pos)
|
---|
| 243 | {
|
---|
| 244 | case 0:
|
---|
| 245 | SetCommandPin(0,0,0,0);
|
---|
| 246 | break;
|
---|
| 247 |
|
---|
| 248 | case 1:
|
---|
| 249 | SetCommandPin(0,0,0,0);
|
---|
| 250 | break;
|
---|
| 251 |
|
---|
| 252 | case 2:
|
---|
| 253 | SetCommandPin(0,0,0,1);
|
---|
| 254 | break;
|
---|
| 255 |
|
---|
| 256 | case 3:
|
---|
| 257 | SetCommandPin(0,0,1,0);
|
---|
| 258 | break;
|
---|
| 259 |
|
---|
| 260 | case 4:
|
---|
| 261 | SetCommandPin(0,0,1,1);
|
---|
| 262 | break;
|
---|
| 263 |
|
---|
| 264 | case 5:
|
---|
| 265 | SetCommandPin(0,1,0,0);
|
---|
| 266 | break;
|
---|
| 267 |
|
---|
| 268 | case 6:
|
---|
| 269 | SetCommandPin(0,1,0,1);
|
---|
| 270 | break;
|
---|
| 271 |
|
---|
| 272 | case 7:
|
---|
| 273 | SetCommandPin(0,1,1,0);
|
---|
| 274 | break;
|
---|
| 275 |
|
---|
| 276 | case 8:
|
---|
| 277 | SetCommandPin(0,1,1,1);
|
---|
| 278 | break;
|
---|
| 279 |
|
---|
| 280 | case 9:
|
---|
| 281 | SetCommandPin(1,0,0,0);
|
---|
| 282 | break;
|
---|
| 283 |
|
---|
| 284 | case 10:
|
---|
| 285 | SetCommandPin(1,0,0,1);
|
---|
| 286 | break;
|
---|
| 287 |
|
---|
| 288 | case 11:
|
---|
| 289 | SetCommandPin(1,0,1,0);
|
---|
| 290 | break;
|
---|
| 291 |
|
---|
| 292 | case 12:
|
---|
| 293 | SetCommandPin(1,0,1,1);
|
---|
| 294 | break;
|
---|
| 295 |
|
---|
| 296 | case 13:
|
---|
| 297 | SetCommandPin(1,1,0,0);
|
---|
| 298 | break;
|
---|
| 299 |
|
---|
| 300 | case 14:
|
---|
| 301 | SetCommandPin(1,1,0,1);
|
---|
| 302 | break;
|
---|
| 303 |
|
---|
| 304 | case 15:
|
---|
| 305 | SetCommandPin(1,1,1,0);
|
---|
| 306 | break;
|
---|
| 307 |
|
---|
| 308 | case 16:
|
---|
| 309 | SetCommandPin(1,1,1,1);
|
---|
| 310 | break;
|
---|
| 311 |
|
---|
| 312 |
|
---|
| 313 | }
|
---|
| 314 | }
|
---|
| 315 |
|
---|
| 316 |
|
---|
| 317 |
|
---|
| 318 | //*********************************************************
|
---|
| 319 | //*Permette di scrivere un 'intera riga di testo
|
---|
| 320 | //*stringa = Testo da scrivere Formato String
|
---|
| 321 | //*rig = riga sulla quale scrivere il testo Formato int
|
---|
| 322 | //*********************************************************
|
---|
| 323 |
|
---|
| 324 | void LCD_m0::Scrivi_Testo(String stringa,int rig)
|
---|
| 325 | {
|
---|
| 326 |
|
---|
| 327 | n = stringa.length();
|
---|
| 328 |
|
---|
| 329 |
|
---|
| 330 | if(rig==1){
|
---|
| 331 | SetCommandPin(1,0,0,0);
|
---|
| 332 | SetCommandPin(0,0,0,0);
|
---|
| 333 |
|
---|
| 334 | for(m=0; m<=n-1; m++){
|
---|
| 335 | c = stringa[m];
|
---|
| 336 |
|
---|
| 337 | Scrivi_Car_PC(c);
|
---|
| 338 | }
|
---|
| 339 | }
|
---|
| 340 |
|
---|
| 341 |
|
---|
| 342 | if(rig==2){
|
---|
| 343 | SetCommandPin(1,1,0,0);//selezione riga1
|
---|
| 344 | SetCommandPin(0,0,0,0);//offset
|
---|
| 345 |
|
---|
| 346 | for(m=0; m<=n-1; m++){
|
---|
| 347 | c = stringa[m];
|
---|
| 348 |
|
---|
| 349 | Scrivi_Car_PC(c);
|
---|
| 350 |
|
---|
| 351 | }
|
---|
| 352 | }
|
---|
| 353 |
|
---|
| 354 | }
|
---|
| 355 |
|
---|
| 356 |
|
---|
| 357 |
|
---|
| 358 | void LCD_m0::Pulisci()
|
---|
| 359 | {
|
---|
| 360 |
|
---|
| 361 | SetCommandPin(0,0,0,0);
|
---|
| 362 | SetCommandPin(0,0,0,1);
|
---|
| 363 |
|
---|
| 364 | }
|
---|
| 365 |
|
---|