faf

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }