KAIQUE DOGNANI
/
LCD_Aula_25_03_2020
faf
LCD_ka.cpp@2:edc5d3177f86, 2020-05-27 (annotated)
- Committer:
- kaiquedog
- Date:
- Wed May 27 15:16:45 2020 +0000
- Revision:
- 2:edc5d3177f86
- Parent:
- 1:d5b85bc9e87b
Classe_LCD
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kaiquedog | 0:4a5c6f06b26c | 1 | #include "LCD_ka.h" |
kaiquedog | 0:4a5c6f06b26c | 2 | |
kaiquedog | 1:d5b85bc9e87b | 3 | //**** Define as portas que o LCD lê: **** |
kaiquedog | 2:edc5d3177f86 | 4 | LCD::LCD(PinName rs, PinName e, PinName d4, PinName d5, PinName d6, PinName d7) : RS(rs), E(e), dados(d4,d5,d6,d7){ |
kaiquedog | 2:edc5d3177f86 | 5 | Inicia_LCD(); |
kaiquedog | 2:edc5d3177f86 | 6 | } |
kaiquedog | 0:4a5c6f06b26c | 7 | |
kaiquedog | 2:edc5d3177f86 | 8 | |
kaiquedog | 1:d5b85bc9e87b | 9 | int _coluna = 1; |
kaiquedog | 1:d5b85bc9e87b | 10 | int _linha = 1; |
kaiquedog | 1:d5b85bc9e87b | 11 | |
kaiquedog | 2:edc5d3177f86 | 12 | string LCD::Lepos(void){ |
kaiquedog | 2:edc5d3177f86 | 13 | string buffer; |
kaiquedog | 2:edc5d3177f86 | 14 | char li[6]; |
kaiquedog | 2:edc5d3177f86 | 15 | sprintf(li,"(%d,%d)", _linha, _coluna); |
kaiquedog | 2:edc5d3177f86 | 16 | buffer.append(li); |
kaiquedog | 2:edc5d3177f86 | 17 | return buffer; |
kaiquedog | 2:edc5d3177f86 | 18 | |
kaiquedog | 2:edc5d3177f86 | 19 | } |
kaiquedog | 2:edc5d3177f86 | 20 | |
kaiquedog | 1:d5b85bc9e87b | 21 | //**** Comando que indica para o LCD que metade dos bits foram enviados: **** |
kaiquedog | 2:edc5d3177f86 | 22 | void LCD::bate_enable(void){ |
kaiquedog | 0:4a5c6f06b26c | 23 | E = 1; |
kaiquedog | 1:d5b85bc9e87b | 24 | wait(0.000040f); |
kaiquedog | 0:4a5c6f06b26c | 25 | E=0; |
kaiquedog | 1:d5b85bc9e87b | 26 | wait(0.000040f); |
kaiquedog | 0:4a5c6f06b26c | 27 | } |
kaiquedog | 0:4a5c6f06b26c | 28 | |
kaiquedog | 2:edc5d3177f86 | 29 | |
kaiquedog | 1:d5b85bc9e87b | 30 | //**** Função de inicialização do LCD: **** |
kaiquedog | 2:edc5d3177f86 | 31 | void LCD::Inicia_LCD(void){ |
kaiquedog | 0:4a5c6f06b26c | 32 | RS = 0; |
kaiquedog | 0:4a5c6f06b26c | 33 | E = 0; |
kaiquedog | 0:4a5c6f06b26c | 34 | dados = 0x0; |
kaiquedog | 1:d5b85bc9e87b | 35 | |
kaiquedog | 1:d5b85bc9e87b | 36 | wait(0.05); |
kaiquedog | 1:d5b85bc9e87b | 37 | for (int i=0; i<3; i++){ |
kaiquedog | 1:d5b85bc9e87b | 38 | // Define como 4 bits |
kaiquedog | 1:d5b85bc9e87b | 39 | dados = 0x2; |
kaiquedog | 1:d5b85bc9e87b | 40 | bate_enable(); |
kaiquedog | 1:d5b85bc9e87b | 41 | |
kaiquedog | 1:d5b85bc9e87b | 42 | // Define 0 0 1 DL - N F _ _ |
kaiquedog | 1:d5b85bc9e87b | 43 | //(DL = Data Lengh: 0 --> 4 Bits |
kaiquedog | 1:d5b85bc9e87b | 44 | // 1 --> 8 Bits) |
kaiquedog | 1:d5b85bc9e87b | 45 | //(N = n° de linhas:0 --> 1 linha |
kaiquedog | 1:d5b85bc9e87b | 46 | // 1 --> 2 linhas) |
kaiquedog | 1:d5b85bc9e87b | 47 | //(F = n° de pontos:0 --> 5 x 8 pontos |
kaiquedog | 1:d5b85bc9e87b | 48 | // 1 --> 5 x 10 pontos) |
kaiquedog | 1:d5b85bc9e87b | 49 | dados = 0x2; |
kaiquedog | 1:d5b85bc9e87b | 50 | bate_enable(); |
kaiquedog | 1:d5b85bc9e87b | 51 | dados = 0x8; |
kaiquedog | 1:d5b85bc9e87b | 52 | bate_enable(); |
kaiquedog | 1:d5b85bc9e87b | 53 | |
kaiquedog | 1:d5b85bc9e87b | 54 | wait(0.02); |
kaiquedog | 1:d5b85bc9e87b | 55 | |
kaiquedog | 1:d5b85bc9e87b | 56 | // Define 0 0 0 0 - 1 D C B |
kaiquedog | 1:d5b85bc9e87b | 57 | //(D = Display on/off: 0 --> off |
kaiquedog | 1:d5b85bc9e87b | 58 | // 1 --> on) |
kaiquedog | 1:d5b85bc9e87b | 59 | //(C = Cursor on/off : 0 --> off |
kaiquedog | 1:d5b85bc9e87b | 60 | // 1 --> on) |
kaiquedog | 1:d5b85bc9e87b | 61 | //(B = Blink on/off : 0 --> off |
kaiquedog | 1:d5b85bc9e87b | 62 | // 1 --> on) |
kaiquedog | 1:d5b85bc9e87b | 63 | dados = 0x0; |
kaiquedog | 1:d5b85bc9e87b | 64 | bate_enable(); |
kaiquedog | 1:d5b85bc9e87b | 65 | dados = 0xE; |
kaiquedog | 1:d5b85bc9e87b | 66 | bate_enable(); |
kaiquedog | 1:d5b85bc9e87b | 67 | |
kaiquedog | 1:d5b85bc9e87b | 68 | wait(0.02); |
kaiquedog | 1:d5b85bc9e87b | 69 | |
kaiquedog | 1:d5b85bc9e87b | 70 | // Define 0 0 0 0 - 0 1 I/D S |
kaiquedog | 1:d5b85bc9e87b | 71 | //(I/D = Direção de escrita: 0 --> Direita |
kaiquedog | 1:d5b85bc9e87b | 72 | // 1 --> Esquerda) |
kaiquedog | 1:d5b85bc9e87b | 73 | //(S = Display shift : 0 --> Não |
kaiquedog | 1:d5b85bc9e87b | 74 | // 1 --> Sim) |
kaiquedog | 1:d5b85bc9e87b | 75 | dados = 0x0; |
kaiquedog | 1:d5b85bc9e87b | 76 | bate_enable(); |
kaiquedog | 1:d5b85bc9e87b | 77 | dados = 0x6; |
kaiquedog | 1:d5b85bc9e87b | 78 | bate_enable(); |
kaiquedog | 1:d5b85bc9e87b | 79 | } |
kaiquedog | 1:d5b85bc9e87b | 80 | |
kaiquedog | 1:d5b85bc9e87b | 81 | // Limpa o diplay |
kaiquedog | 1:d5b85bc9e87b | 82 | clc(); |
kaiquedog | 1:d5b85bc9e87b | 83 | } |
kaiquedog | 1:d5b85bc9e87b | 84 | |
kaiquedog | 2:edc5d3177f86 | 85 | |
kaiquedog | 1:d5b85bc9e87b | 86 | |
kaiquedog | 1:d5b85bc9e87b | 87 | //**** Função que limpa o display e volta o cursor para (1,1): **** |
kaiquedog | 2:edc5d3177f86 | 88 | void LCD::clc(void){ |
kaiquedog | 1:d5b85bc9e87b | 89 | wait(0.02); |
kaiquedog | 0:4a5c6f06b26c | 90 | |
kaiquedog | 0:4a5c6f06b26c | 91 | dados = 0x0; |
kaiquedog | 0:4a5c6f06b26c | 92 | bate_enable(); |
kaiquedog | 0:4a5c6f06b26c | 93 | dados = 0x1; |
kaiquedog | 0:4a5c6f06b26c | 94 | bate_enable(); |
kaiquedog | 1:d5b85bc9e87b | 95 | |
kaiquedog | 1:d5b85bc9e87b | 96 | wait(0.02); |
kaiquedog | 1:d5b85bc9e87b | 97 | |
kaiquedog | 1:d5b85bc9e87b | 98 | _coluna = 1; |
kaiquedog | 1:d5b85bc9e87b | 99 | _linha = 1; |
kaiquedog | 1:d5b85bc9e87b | 100 | } |
kaiquedog | 1:d5b85bc9e87b | 101 | |
kaiquedog | 2:edc5d3177f86 | 102 | |
kaiquedog | 1:d5b85bc9e87b | 103 | //**** Função que volta o cursor para (1,1): **** |
kaiquedog | 2:edc5d3177f86 | 104 | void LCD::home(void){ |
kaiquedog | 1:d5b85bc9e87b | 105 | wait(0.002); |
kaiquedog | 1:d5b85bc9e87b | 106 | |
kaiquedog | 1:d5b85bc9e87b | 107 | dados = 0x0; |
kaiquedog | 1:d5b85bc9e87b | 108 | bate_enable(); |
kaiquedog | 1:d5b85bc9e87b | 109 | dados = 0x2; |
kaiquedog | 1:d5b85bc9e87b | 110 | bate_enable(); |
kaiquedog | 1:d5b85bc9e87b | 111 | |
kaiquedog | 1:d5b85bc9e87b | 112 | wait(0.002); |
kaiquedog | 1:d5b85bc9e87b | 113 | |
kaiquedog | 1:d5b85bc9e87b | 114 | _coluna = 1; |
kaiquedog | 1:d5b85bc9e87b | 115 | _linha = 1; |
kaiquedog | 1:d5b85bc9e87b | 116 | } |
kaiquedog | 1:d5b85bc9e87b | 117 | |
kaiquedog | 2:edc5d3177f86 | 118 | |
kaiquedog | 1:d5b85bc9e87b | 119 | //**** Função que manda o cursor para a direita: **** |
kaiquedog | 2:edc5d3177f86 | 120 | void LCD::direita(void){ |
kaiquedog | 1:d5b85bc9e87b | 121 | wait(0.0002); |
kaiquedog | 1:d5b85bc9e87b | 122 | |
kaiquedog | 1:d5b85bc9e87b | 123 | dados = 0x1; |
kaiquedog | 1:d5b85bc9e87b | 124 | bate_enable(); |
kaiquedog | 1:d5b85bc9e87b | 125 | dados = 0x4; |
kaiquedog | 1:d5b85bc9e87b | 126 | bate_enable(); |
kaiquedog | 1:d5b85bc9e87b | 127 | |
kaiquedog | 1:d5b85bc9e87b | 128 | wait(0.0002); |
kaiquedog | 1:d5b85bc9e87b | 129 | |
kaiquedog | 1:d5b85bc9e87b | 130 | _coluna = _coluna+1; |
kaiquedog | 1:d5b85bc9e87b | 131 | |
kaiquedog | 1:d5b85bc9e87b | 132 | fim_de_curso(); |
kaiquedog | 1:d5b85bc9e87b | 133 | } |
kaiquedog | 1:d5b85bc9e87b | 134 | |
kaiquedog | 2:edc5d3177f86 | 135 | |
kaiquedog | 1:d5b85bc9e87b | 136 | //**** Função quem manda o cursor para a esquerda: **** |
kaiquedog | 2:edc5d3177f86 | 137 | void LCD::esquerda(void){ |
kaiquedog | 1:d5b85bc9e87b | 138 | wait(0.0002); |
kaiquedog | 1:d5b85bc9e87b | 139 | |
kaiquedog | 1:d5b85bc9e87b | 140 | dados = 0x1; |
kaiquedog | 1:d5b85bc9e87b | 141 | bate_enable(); |
kaiquedog | 1:d5b85bc9e87b | 142 | dados = 0x0; |
kaiquedog | 1:d5b85bc9e87b | 143 | bate_enable(); |
kaiquedog | 1:d5b85bc9e87b | 144 | |
kaiquedog | 1:d5b85bc9e87b | 145 | wait(0.0002); |
kaiquedog | 1:d5b85bc9e87b | 146 | |
kaiquedog | 1:d5b85bc9e87b | 147 | _coluna = _coluna - 1; |
kaiquedog | 1:d5b85bc9e87b | 148 | |
kaiquedog | 1:d5b85bc9e87b | 149 | fim_de_curso(); |
kaiquedog | 0:4a5c6f06b26c | 150 | } |
kaiquedog | 0:4a5c6f06b26c | 151 | |
kaiquedog | 2:edc5d3177f86 | 152 | |
kaiquedog | 1:d5b85bc9e87b | 153 | //**** Função que apaga o que está no cursor: **** |
kaiquedog | 2:edc5d3177f86 | 154 | void LCD::apaga(void){ |
kaiquedog | 1:d5b85bc9e87b | 155 | RS = 1; |
kaiquedog | 1:d5b85bc9e87b | 156 | |
kaiquedog | 1:d5b85bc9e87b | 157 | wait(0.002); |
kaiquedog | 1:d5b85bc9e87b | 158 | |
kaiquedog | 1:d5b85bc9e87b | 159 | dados = 0x2; |
kaiquedog | 1:d5b85bc9e87b | 160 | bate_enable(); |
kaiquedog | 1:d5b85bc9e87b | 161 | dados = 0x0; |
kaiquedog | 1:d5b85bc9e87b | 162 | bate_enable(); |
kaiquedog | 1:d5b85bc9e87b | 163 | |
kaiquedog | 1:d5b85bc9e87b | 164 | RS = 0; |
kaiquedog | 1:d5b85bc9e87b | 165 | |
kaiquedog | 1:d5b85bc9e87b | 166 | pos(_linha,_coluna); |
kaiquedog | 1:d5b85bc9e87b | 167 | } |
kaiquedog | 0:4a5c6f06b26c | 168 | |
kaiquedog | 2:edc5d3177f86 | 169 | |
kaiquedog | 1:d5b85bc9e87b | 170 | //**** Função que manda o display para linha de cima: **** |
kaiquedog | 2:edc5d3177f86 | 171 | void LCD::cima(void){ |
kaiquedog | 1:d5b85bc9e87b | 172 | pos(1,_coluna); |
kaiquedog | 1:d5b85bc9e87b | 173 | |
kaiquedog | 1:d5b85bc9e87b | 174 | _linha = 1; |
kaiquedog | 1:d5b85bc9e87b | 175 | } |
kaiquedog | 1:d5b85bc9e87b | 176 | |
kaiquedog | 2:edc5d3177f86 | 177 | |
kaiquedog | 1:d5b85bc9e87b | 178 | //**** Função que manda o display para linha de baixo: **** |
kaiquedog | 2:edc5d3177f86 | 179 | void LCD::baixo(void){ |
kaiquedog | 1:d5b85bc9e87b | 180 | pos(2,_coluna); |
kaiquedog | 1:d5b85bc9e87b | 181 | |
kaiquedog | 1:d5b85bc9e87b | 182 | _linha = 2; |
kaiquedog | 1:d5b85bc9e87b | 183 | } |
kaiquedog | 1:d5b85bc9e87b | 184 | |
kaiquedog | 2:edc5d3177f86 | 185 | |
kaiquedog | 1:d5b85bc9e87b | 186 | //**** Função que posiciona o cursor na linha e coluna inseridas: **** |
kaiquedog | 2:edc5d3177f86 | 187 | void LCD::pos(int li, int co){ |
kaiquedog | 2:edc5d3177f86 | 188 | int POSI = 0x80 + ((li-1) * 0x40) + (co-1); |
kaiquedog | 0:4a5c6f06b26c | 189 | |
kaiquedog | 2:edc5d3177f86 | 190 | dados = POSI>>4; |
kaiquedog | 2:edc5d3177f86 | 191 | bate_enable(); |
kaiquedog | 2:edc5d3177f86 | 192 | dados = POSI; |
kaiquedog | 2:edc5d3177f86 | 193 | bate_enable(); |
kaiquedog | 1:d5b85bc9e87b | 194 | |
kaiquedog | 1:d5b85bc9e87b | 195 | _coluna = co; |
kaiquedog | 1:d5b85bc9e87b | 196 | _linha = li; |
kaiquedog | 1:d5b85bc9e87b | 197 | } |
kaiquedog | 1:d5b85bc9e87b | 198 | |
kaiquedog | 2:edc5d3177f86 | 199 | |
kaiquedog | 1:d5b85bc9e87b | 200 | //**** Função que define se o cursor saiu do display: **** |
kaiquedog | 2:edc5d3177f86 | 201 | void LCD::fim_de_curso (void){ |
kaiquedog | 1:d5b85bc9e87b | 202 | switch (_coluna) |
kaiquedog | 1:d5b85bc9e87b | 203 | { |
kaiquedog | 1:d5b85bc9e87b | 204 | case 17 : |
kaiquedog | 1:d5b85bc9e87b | 205 | switch (_linha){ |
kaiquedog | 1:d5b85bc9e87b | 206 | case 1 : pos(2,1); break; |
kaiquedog | 1:d5b85bc9e87b | 207 | case 2 : home(); break; |
kaiquedog | 1:d5b85bc9e87b | 208 | } |
kaiquedog | 1:d5b85bc9e87b | 209 | break; |
kaiquedog | 1:d5b85bc9e87b | 210 | case 0 : |
kaiquedog | 1:d5b85bc9e87b | 211 | switch (_linha){ |
kaiquedog | 1:d5b85bc9e87b | 212 | case 1 : pos(2,16); break; |
kaiquedog | 1:d5b85bc9e87b | 213 | case 2 : pos(1,16); break; |
kaiquedog | 1:d5b85bc9e87b | 214 | } |
kaiquedog | 1:d5b85bc9e87b | 215 | break; |
kaiquedog | 0:4a5c6f06b26c | 216 | } |
kaiquedog | 0:4a5c6f06b26c | 217 | } |
kaiquedog | 1:d5b85bc9e87b | 218 | |
kaiquedog | 1:d5b85bc9e87b | 219 | |
kaiquedog | 2:edc5d3177f86 | 220 | |
kaiquedog | 2:edc5d3177f86 | 221 | |
kaiquedog | 2:edc5d3177f86 | 222 | |
kaiquedog | 2:edc5d3177f86 | 223 | int LCD::_putc(int value) { |
kaiquedog | 2:edc5d3177f86 | 224 | if (value == '\n') { |
kaiquedog | 2:edc5d3177f86 | 225 | baixo(); |
kaiquedog | 2:edc5d3177f86 | 226 | }else{ |
kaiquedog | 2:edc5d3177f86 | 227 | RS = 1; |
kaiquedog | 2:edc5d3177f86 | 228 | dados = value>>4; |
kaiquedog | 2:edc5d3177f86 | 229 | bate_enable(); |
kaiquedog | 2:edc5d3177f86 | 230 | dados = value; |
kaiquedog | 2:edc5d3177f86 | 231 | bate_enable(); |
kaiquedog | 2:edc5d3177f86 | 232 | RS = 0; |
kaiquedog | 2:edc5d3177f86 | 233 | } |
kaiquedog | 2:edc5d3177f86 | 234 | _chars[_linha-1][_coluna-1] = value; |
kaiquedog | 2:edc5d3177f86 | 235 | _coluna++; |
kaiquedog | 2:edc5d3177f86 | 236 | fim_de_curso(); |
kaiquedog | 1:d5b85bc9e87b | 237 | |
kaiquedog | 2:edc5d3177f86 | 238 | return value; |
kaiquedog | 2:edc5d3177f86 | 239 | } |
kaiquedog | 2:edc5d3177f86 | 240 | |
kaiquedog | 2:edc5d3177f86 | 241 | int LCD::_getc() { |
kaiquedog | 2:edc5d3177f86 | 242 | return -1; |
kaiquedog | 2:edc5d3177f86 | 243 | } |