Teclado Matricial

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Teclado Matricial

Mensagempor utidomicro » 22 Jul 2009 17:53

Sou novo na liguagem C e estou aprendendo coisas novas a cada dia, Porem estou com dificuldades na manipulação do teclado matricial, ele me entreaga os numeros no formato Char e preciso que elas sejam INT para que eu possa somar, multiplicar, subtrair, a livraria do teclado que uso é a que veio no kit da ACEPIC já entrega o numero pronto na variavel tecla porem como char preciso que seja int alguem tem alguma ideia de como fazer ? eis o codigo

#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=8000000)
#use rs232(baud=9600, xmit = PIN_C6, rcv = PIN_C7)

#include "LCD_8B.c"
#include "12Keys.c"

void main() {
byte rd;
float '0' = 0;
float '1' = 1;
float '3' = 3;
//set_tris_b(0xF0);
port_b_pullups(True);

lcd_ini();

printf(lcd_escreve,"\f PIC16F877A");
printf(lcd_escreve,"\n Teclado.");

delay_ms(1000);

lcd_escreve("\f");
printf(lcd_escreve,"Digite:\n");


tecla_pres=0;

while(TRUE) {
tecla = trata_teclas();
if (tecla_pres)
{
printf(Lcd_escreve,"%c", tecla);
printf("%c",tecla);
}
if (tecla == 3)
{
output_high(PIN_C2);
printf("\nentrou");
delay_ms(1000);
output_low(PIN_C2);
}
tecla_pres = 0;


}

}
utidomicro
 
Mensagens: 3
Registrado em: 22 Jul 2009 13:29

Mensagempor Djalma Toledo Rodrigues » 22 Jul 2009 18:40

A difereça ASCII e Número é 30H

Núm 0 = 30H ASCII
Núm 9H = 39H ASCII
.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor utidomicro » 22 Jul 2009 19:42

Amigo obrigado pela resposta, mas eu preciso de uma resposta mais tangivel, algo que eu possa aplicar direto no codigo pois não tenho muita habilidade com C
utidomicro
 
Mensagens: 3
Registrado em: 22 Jul 2009 13:29

Mensagempor ze » 23 Jul 2009 07:31

"tangivel"...faltou acento..mas gostei...
tenho dúvidas sobre suas dúvidas. A parte que entendi "preciso que seja int" é fácil. Basta que sua variável seja int mesmo advinda de uma função cuja saída seja char. ou senão usar '(int)var_tipo_char'
O que o dj achou é que seu teclado entrega o dado em forma de ascii. Se for o caso ou pode subtrair 0x30 do dado ou fazer if (tecla=='3') e não 3.
Pra aprender, sugiro o mikroc e suas "livrarias". Acho que vi algo de teclado matricial lá.

iúr uélcom
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor utidomicro » 23 Jul 2009 08:17

Resolvi o problema editando a livraria, trocando tudo que era char por int, Agora a variavel teclas é sempre um int,vou ver se agora consigo fazer a calculadora (estou precisando mesmo de uma)

//Definições da matriz do teclado
#define COL1 pin_b4
#define COL2 pin_b5
#define COL3 pin_b6
#define COL4 pin_b7
#define LIN1 pin_b0
#define LIN2 pin_b1
#define LIN3 pin_b2
#define LIN4 pin_b3

int tecla;
boolean tecla_pres;

int varre_teclas(void)
{
int key = ' ';
//boolean shift;
//shift = 0;
output_high(COL4);
output_high(COL3);
output_high(COL2);
output_low(COL1); //Ativa a primeira coluna
if (!input(LIN1)) key = 1;
if (!input(LIN2)) key = 4;
if (!input(LIN3)) key = 7;
if (!input(LIN4)) key = 'a';
output_high(COL1);
output_low(COL2); //Ativa a segunda coluna
if (!input(LIN1)) key = 2;
if (!input(LIN2)) key = 5;
if (!input(LIN3)) key = 8;
if (!input(LIN4)) key = 0;
output_high(COL2);
output_low(COL3); //Ativa a terceira coluna
if (!input(LIN1)) key = 3;
if (!input(LIN2)) key = 6;
if (!input(LIN3)) key = 9;
if (!input(LIN4)) key = 88;
output_high(COL3);
output_low(COL4);
if (!input(LIN1)) key = 88;
if (!input(LIN2)) key = 88;
if (!input(LIN3)) key = 88;
if (!input(LIN4)) key = 88;
output_high(COL4);

//if ((shift) && (tecla!=13)) key_press += 32;
//tecla_pres = 0;
return(key);
}

int trata_teclas(void)
{
int t;

t=varre_teclas(); //Verifica se há uma tecla pressionada
if((t != ' ') && (!tecla_pres)) //Se há tecla pressionada e o flag está apagado
{
tecla_pres = 1; //ativa o flag
if (t != tecla)
// Se a tecla atual é diferente da anterior
{
//filtra o ruído de contato
delay_ms(10);
// Lê novamente as teclas e verifica
// se a mesma tecla ainda está pressionada
// caso positivo, retorna a tecla
if (varre_teclas() == t) return (t);
}
}
tecla_pres = 0; // se não há tecla, retorna 0
}
utidomicro
 
Mensagens: 3
Registrado em: 22 Jul 2009 13:29


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x