Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: LCD_ka.cpp
- Revision:
- 1:d5b85bc9e87b
- Parent:
- 0:4a5c6f06b26c
- Child:
- 2:edc5d3177f86
diff -r 4a5c6f06b26c -r d5b85bc9e87b LCD_ka.cpp
--- a/LCD_ka.cpp Wed Mar 25 19:24:43 2020 +0000
+++ b/LCD_ka.cpp Fri Apr 03 22:06:47 2020 +0000
@@ -1,58 +1,238 @@
-
#include "LCD_ka.h"
-DigitalOut RS(D8);
+
+//**** Define as portas que o LCD lê: ****
+DigitalOut RS(D8);
DigitalOut E(D9);
BusOut dados(D4, D5, D6, D7);
+//**** Variáveis que o código utiliza para funções internas: ****
+int _coluna = 1;
+int _linha = 1;
+
+//**** Comando que indica para o LCD que metade dos bits foram enviados: ****
void bate_enable(void){
E = 1;
- wait(0.002);
+ wait(0.000040f);
E=0;
- wait(0.002);
+ wait(0.000040f);
}
+//**** Função de inicialização do LCD: ****
void Inicia_LCD(void){
- wait(0.15);
RS = 0;
E = 0;
-
- dados = 0x2;
- bate_enable();
- dados = 0x8;
- bate_enable();
-
dados = 0x0;
- bate_enable();
- dados = 0xE;
- bate_enable();
+
+ wait(0.05);
+ for (int i=0; i<3; i++){
+ // Define como 4 bits
+ dados = 0x2;
+ bate_enable();
+
+ // Define 0 0 1 DL - N F _ _
+ //(DL = Data Lengh: 0 --> 4 Bits
+ // 1 --> 8 Bits)
+ //(N = n° de linhas:0 --> 1 linha
+ // 1 --> 2 linhas)
+ //(F = n° de pontos:0 --> 5 x 8 pontos
+ // 1 --> 5 x 10 pontos)
+ dados = 0x2;
+ bate_enable();
+ dados = 0x8;
+ bate_enable();
+
+ wait(0.02);
+
+ // Define 0 0 0 0 - 1 D C B
+ //(D = Display on/off: 0 --> off
+ // 1 --> on)
+ //(C = Cursor on/off : 0 --> off
+ // 1 --> on)
+ //(B = Blink on/off : 0 --> off
+ // 1 --> on)
+ dados = 0x0;
+ bate_enable();
+ dados = 0xE;
+ bate_enable();
+
+ wait(0.02);
+
+ // Define 0 0 0 0 - 0 1 I/D S
+ //(I/D = Direção de escrita: 0 --> Direita
+ // 1 --> Esquerda)
+ //(S = Display shift : 0 --> Não
+ // 1 --> Sim)
+ dados = 0x0;
+ bate_enable();
+ dados = 0x6;
+ bate_enable();
+ }
+
+ // Limpa o diplay
+ 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){
+ wait(0.02);
dados = 0x0;
bate_enable();
dados = 0x1;
bate_enable();
+
+ wait(0.02);
+
+ _coluna = 1;
+ _linha = 1;
+}
+
+//**** Função que volta o cursor para (1,1): ****
+void home(void){
+ wait(0.002);
+
+ dados = 0x0;
+ bate_enable();
+ dados = 0x2;
+ bate_enable();
+
+ wait(0.002);
+
+ _coluna = 1;
+ _linha = 1;
+}
+
+//**** Função que manda o cursor para a direita: ****
+void direita(void){
+ wait(0.0002);
+
+ dados = 0x1;
+ bate_enable();
+ dados = 0x4;
+ bate_enable();
+
+ wait(0.0002);
+
+ _coluna = _coluna+1;
+
+ fim_de_curso();
+}
+
+//**** Função quem manda o cursor para a esquerda: ****
+void esquerda(void){
+ wait(0.0002);
+
+ dados = 0x1;
+ bate_enable();
+ dados = 0x0;
+ bate_enable();
+
+ wait(0.0002);
+
+ _coluna = _coluna - 1;
+
+ fim_de_curso();
}
+//**** Função que apaga o que está no cursor: ****
+void apaga(void){
+ RS = 1;
+
+ wait(0.002);
+
+ dados = 0x2;
+ bate_enable();
+ dados = 0x0;
+ bate_enable();
+
+ RS = 0;
+
+ pos(_linha,_coluna);
+}
-void disp(char *value){
+//**** Função que manda o display para linha de cima: ****
+void cima(void){
+ pos(1,_coluna);
+
+ _linha = 1;
+}
+
+//**** Função que manda o display para linha de baixo: ****
+void 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);
- for (int i = 0; value[i] != '\0';++i){
- RS = 1;
- wait(0.002);
- char txt = value[i];
- dados = txt>>4;
+ 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();
+ }
+ }
+
+ 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();
- dados = txt;
- bate_enable();
- RS = 0;
+ 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){
+ switch (_coluna)
+ {
+ case 17 :
+ switch (_linha){
+ case 1 : pos(2,1); break;
+ case 2 : home(); break;
+ }
+ break;
+ case 0 :
+ switch (_linha){
+ case 1 : pos(2,16); break;
+ case 2 : pos(1,16); break;
+ }
+ break;
}
}
-
-
-void clc(void){
- wait(0.002);
- dados = 0x0;
- bate_enable();
- dados = 0x1;
- bate_enable();
-}
+
+
+
+
\ No newline at end of file