KAIQUE DOGNANI
/
LCD_Aula_25_03_2020
faf
Diff: LCD_ka.cpp
- Revision:
- 2:edc5d3177f86
- Parent:
- 1:d5b85bc9e87b
diff -r d5b85bc9e87b -r edc5d3177f86 LCD_ka.cpp --- a/LCD_ka.cpp Fri Apr 03 22:06:47 2020 +0000 +++ b/LCD_ka.cpp Wed May 27 15:16:45 2020 +0000 @@ -1,25 +1,34 @@ #include "LCD_ka.h" - //**** Define as portas que o LCD lê: **** -DigitalOut RS(D8); -DigitalOut E(D9); -BusOut dados(D4, D5, D6, D7); +LCD::LCD(PinName rs, PinName e, PinName d4, PinName d5, PinName d6, PinName d7) : RS(rs), E(e), dados(d4,d5,d6,d7){ + Inicia_LCD(); +} -//**** Variáveis que o código utiliza para funções internas: **** + int _coluna = 1; int _linha = 1; +string LCD::Lepos(void){ + string buffer; + char li[6]; + sprintf(li,"(%d,%d)", _linha, _coluna); + buffer.append(li); + return buffer; + +} + //**** Comando que indica para o LCD que metade dos bits foram enviados: **** -void bate_enable(void){ +void LCD::bate_enable(void){ E = 1; wait(0.000040f); E=0; wait(0.000040f); } + //**** Função de inicialização do LCD: **** -void Inicia_LCD(void){ +void LCD::Inicia_LCD(void){ RS = 0; E = 0; dados = 0x0; @@ -73,29 +82,10 @@ clc(); } -//**** Função que recebe string e escreve no display: **** -void disp(char* value){ - for (int i = 0; value[i] != '\0';++i) - { - if (_coluna == 17) - { - RS = 0; - fim_de_curso(); - } - RS = 1; - char txt = value[i]; - dados = txt>>4; - bate_enable(); - dados = txt; - bate_enable(); - - _coluna = _coluna + 1; - } - RS = 0; -} + //**** Função que limpa o display e volta o cursor para (1,1): **** -void clc(void){ +void LCD::clc(void){ wait(0.02); dados = 0x0; @@ -109,8 +99,9 @@ _linha = 1; } + //**** Função que volta o cursor para (1,1): **** -void home(void){ +void LCD::home(void){ wait(0.002); dados = 0x0; @@ -124,8 +115,9 @@ _linha = 1; } + //**** Função que manda o cursor para a direita: **** -void direita(void){ +void LCD::direita(void){ wait(0.0002); dados = 0x1; @@ -140,8 +132,9 @@ fim_de_curso(); } + //**** Função quem manda o cursor para a esquerda: **** -void esquerda(void){ +void LCD::esquerda(void){ wait(0.0002); dados = 0x1; @@ -156,8 +149,9 @@ fim_de_curso(); } + //**** Função que apaga o que está no cursor: **** -void apaga(void){ +void LCD::apaga(void){ RS = 1; wait(0.002); @@ -172,50 +166,39 @@ pos(_linha,_coluna); } + //**** Função que manda o display para linha de cima: **** -void cima(void){ +void LCD::cima(void){ pos(1,_coluna); _linha = 1; } + //**** Função que manda o display para linha de baixo: **** -void baixo(void){ +void LCD::baixo(void){ pos(2,_coluna); _linha = 2; } + //**** Função que posiciona o cursor na linha e coluna inseridas: **** -void pos(int li, int co){ - home(); // Primeiro o cursor volta para (0,0) - wait(0.002); +void LCD::pos(int li, int co){ + int POSI = 0x80 + ((li-1) * 0x40) + (co-1); - if (li == 1) // Se o usuário inseriu a linha 1 - { //esse comando faz o cursor andar - for(int i = 1; i < co; i++) //para a direita até a posição declarada - { - direita(); - } - } + dados = POSI>>4; + bate_enable(); + dados = POSI; + bate_enable(); - if (li == 2) // Se o usuário inseriu a linha 2 - { //Primeiro temos que mandar o cursor - dados = 0xC; //para a linha dois e depois andar - bate_enable(); //para a direita até a posição declarada - dados = 0x0; - bate_enable(); - for(int i = 1; i < co; i++) - { - direita(); - } - } _coluna = co; _linha = li; } + //**** Função que define se o cursor saiu do display: **** -void fim_de_curso (void){ +void LCD::fim_de_curso (void){ switch (_coluna) { case 17 : @@ -234,5 +217,27 @@ } + + + +int LCD::_putc(int value) { + if (value == '\n') { + baixo(); + }else{ + RS = 1; + dados = value>>4; + bate_enable(); + dados = value; + bate_enable(); + RS = 0; + } + _chars[_linha-1][_coluna-1] = value; + _coluna++; + fim_de_curso(); - \ No newline at end of file + return value; +} + +int LCD::_getc() { + return -1; +} \ No newline at end of file