Grupo 4 2020-1 / Mbed 2 deprecated Classe_LCD

Dependencies:   mbed TextLCD

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