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.
Revision 2:edc5d3177f86, committed 2020-05-27
- Comitter:
- kaiquedog
- Date:
- Wed May 27 15:16:45 2020 +0000
- Parent:
- 1:d5b85bc9e87b
- Commit message:
- Classe_LCD
Changed in this revision
--- 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
--- a/LCD_ka.h Fri Apr 03 22:06:47 2020 +0000
+++ b/LCD_ka.h Wed May 27 15:16:45 2020 +0000
@@ -1,54 +1,71 @@
#ifndef LCD_H
#define LCD_H
#include "mbed.h"
-
+#include <string>
+#include <stdio.h>
+class LCD : public Stream {
+public:
+ LCD(PinName rs, PinName e, PinName d4, PinName d5, PinName d6, PinName d7);
+
+ string Lepos(void);
+
// Comando que indica para o LCD que metade dos bits foram enviados:
-void bate_enable(void);
+ void bate_enable(void);
// Função de inicialização do LCD:
-void Inicia_LCD(void);
+ void Inicia_LCD(void);
// Função que recebe string e escreve no display:
-void disp(char* value);
+ void disp(char* value);
// Função que limpa o display e volta o cursor para (1,1):
-void clc(void);
+ void clc(void);
+
// Função que volta o cursor para (1,1):
-void home(void);
+ void home(void);
// Função que manda o cursor para a direita:
-void direita(void);
+ void direita(void);
// Função quem manda o cursor para a esquerda:
-void esquerda(void);
+ void esquerda(void);
// Função que apaga o que está no cursor:
-void apaga(void);
+ void apaga(void);
// Função que manda o display para linha de cima:
-void cima(void);
+ void cima(void);
// Função que manda o display para linha de baixo:
-void baixo(void);
+ void baixo(void);
// Função que posiciona o cursor na linha e coluna inseridas:
-void pos(int linha, int coluna);
+ void pos(int linha, int coluna);
// Função que define se o cursor saiu do display:
-void fim_de_curso(void);
-
+ void fim_de_curso(void);
-
+//**** Variáveis que o código utiliza para funções internas: ****
+ DigitalOut RS, E;
+ BusOut dados;
+ int _coluna;
+ int _linha;
+ char _chars[2][16];
+// Stream implementation functions
+ virtual int _putc(int value);
+ virtual int _getc();
+};
+
#endif
--- a/main.cpp Fri Apr 03 22:06:47 2020 +0000
+++ b/main.cpp Wed May 27 15:16:45 2020 +0000
@@ -1,43 +1,61 @@
#include "mbed.h"
#include "LCD_ka.h"
+LCD lcd(D8, D9, D4, D5, D6, D7);
+AnalogIn Buts(A0);
AnalogIn Ya(A1);
AnalogIn Xa(A2);
-DigitalIn botao(D3);
int main(){
- Inicia_LCD();
int y = Ya.read()*1000;
int x = Xa.read()*1000;
- disp("Josueb6$#@!");
-
- while(1){
- int y = Ya.read()*1000;
- int x = Xa.read()*1000;
- wait(0.00002);
- if (botao == 0){
- apaga();
- wait(0.3);
+ while(1){
+ y = Ya.read()*1000;
+ x = Xa.read()*1000;
+
+ if ((Buts.read()*1000 > 750) && (Buts.read()*1000 < 850)){
+ lcd.printf("select");
+ wait(0.5);
+ }
+ if ((Buts.read()*1000 > 400) && (Buts.read()*1000 < 500)){
+ lcd.printf("left");
+ wait(0.5);
}
+ if ((Buts.read()*1000 > 200) && (Buts.read()*1000 < 300)){
+ lcd.printf("down");
+ wait(0.5);
+ }
+ if ((Buts.read()*1000 > 60) && (Buts.read()*1000 < 150)){
+ lcd.printf("up");
+ wait(0.5);
+ }
+ if ((Buts.read()*1000 > 0) && (Buts.read()*1000 < 50)){
+ lcd.printf("right");
+ wait(0.5);
+ }
+
if((x < 400)||(x > 600)||(y < 400)||(y > 600)){
- int y = Ya.read()*1000;
- int x = Xa.read()*1000;
+ y = Ya.read()*1000;
+ x = Xa.read()*1000;
if (x > 900){
- direita();
+ lcd.direita();
+ wait(0.2);
+ }
+
+ if (x < 100){
+ lcd.esquerda();
wait(0.2);
}
if (y > 900){
- baixo();
- wait(0.2);
- }
- if (x < 100){
- esquerda();
+ lcd.baixo();
wait(0.2);
}
if (y < 100){
- cima();
+ lcd.cima();
wait(0.2);
}
}
+
+
}
}