Operaciones con Vectores

Buenas soy nuevo por aca y entro ps porque tengo una pregunta y agradezco de antemano a quien me pueda colaborar, resulta que estoy realizando un proyecto el cual consiste en capturar datos desde un teclado matricial y mostrarlos en un display LCD 16x2, eso ps ya lo logre, pero el problema es el siguiente, yo estoy capturando los datos en un vector, pero pues no se si esos datos que capturo los capturo como caracter o de tipo entero, esto lo deseo saber porque necesito realizar algunas operaciones con estos datos que capturo, me explico mejor si por ejemplo yo capturo los datos [1 4], necesito realizar lo siguiente (1*10)+(4*1)=14, para asi poder condicionar las cantidades que obtenga. y lo estoy haciendo de esta manera ya que lo intente capturando cada dato por separado, pero dentro del micro no se como convertir las variables de tipo char a tipo int, aclaro que ya intente con las siguientes sentencias:

char a;
int b;

b=int(a);

y ps no funciona ya que me muestra los caracteres pero en ascii lo cual no me sirve.

aqui pongo el codigo que estoy utilizando haber si me colaboran.

for(i=0;i<3;i++){ // determina que se van a capturar 3 datos
do{
tecla1=kbd_getc();// captura la tecla pulsada en el teclado
}while(tecla1==0);// si no se presiona ninguna tecla no hace nada
lcd_putc(tecla1);// muestra en la lcd la tecla pulsada
cant=tecla1;// almacena esta tecla dentro del vector
if (tecla1=='F'){ //aqui la tecla 'F' funciona como enter y hecha a andar la valvula
ALTO(VAL1);
delay_ms(5000);
BAJO(VAL1);}}

cabe aclarar que depende la cantidad que se digite debo mantener cierto tiempo encendida una valvula,

gracias y espero haber sido lo suficientemente claro
 
Última edición:
Si no me equivoco es leguaje C verdad?, poruqe no pruebas en el MPLAB V8.3, el lenguaje assembler, el programa viene con unas rutinas que te haran mas amigable la programacion de teclado y LCD..

Solo sugerencia..

Cerebro¬¬
 
Gracias por tu colaboracion cerebroo, pero pues domino mas el lenguaje c++, y ps ademas ya tengo toda la idea planteada a traves de C, y creo que me seria un poco mas complicado si empiezo nuevamente con un nuevo lenguaje.

de todas formas gracias
 
... no se si esos datos que capturo los capturo como caracter o de tipo entero, ... pero dentro del micro no se como convertir las variables de tipo char a tipo int, aclaro que ya intente con las siguientes sentencias:

char a;
int b;

b=int(a);

y ps no funciona ya que me muestra los caracteres pero en ascii lo cual no me sirve.

aqui pongo el codigo que estoy utilizando haber si me colaboran.

for(i=0;i<3;i++){ // determina que se van a capturar 3 datos
do{
tecla1=kbd_getc();// captura la tecla pulsada en el teclado
}while(tecla1==0);// si no se presiona ninguna tecla no
...

Hola:

Si kbd_getc() te devuelve el código ASCII de la tecla deberías leer de esta manera:

int tecla1;
...
tecla1 = kbd_getc() - 48; // 48 es el código ASCII del cero

y cuando aprietes "0" tendrás tecla1 = 0 (entero)

Decime si te sirve.
Saludos
 
Última edición:
gracias Alejandro, pero ps tampoco funciono siempre me aparece en la LCD el caracter '!', porque? no tengo ni idea.

Bueno creo que mi problema se podria solucionar, sabiendo como convertir una variable de tipo char a una de tipo int. Yo se que en un compilador de C, se puede con la funcion atoi, o de esta manera

char a;
int b;
b=int(a);
pero no se porque razon para el compilador Pcw que es con el que estoy trabajando estas sentencias no modifican nada en mi programa, Agradezco a quien me pueda brindar su valiosa ayuda
 
Este es el codigo que llevo utilizado hasta el momento, agradezco colaboracion

Código:
#include <16f877a.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPUT,BROWNOUT,NOLVP,NOPROTECT,NOCPD,NOWRT
#include <kbd4.c> //libreria manejo TECLADO
#include <lcd2.c> //libreria manejo lcd 8bits
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, bits=8)  //DECLARACION PARA EL PUERTO RS232
#define ALTO Output_High
#define BAJO Output_Low
#use fast_io(D)
#DEFINE VAL1 PIN_D7
#DEFINE VAL2 PIN_D1
int i,cant[2];
char tecla,tecla1;
void main(void){
ini:
lcd_init();
for(i=0;i<3;i++)
cant[i]=0;
i=0;
set_tris_D(0x00);
Output_High(PIN_D0);
lcd_putc("SELEC LA BEBIDA");
lcd_gotoxy(1,2);
lcd_putc("1.");
lcd_gotoxy(10,2);
lcd_putc("2.");
lcd_gotoxy(1,2);
do{
   tecla=kbd_getc();//Captura el valor de la tecla
   }while(tecla==0);// sino hay tecla pulsada retorna cero
lcd_init();
lcd_putc("SELEC LA BEBIDA");
lcd_gotoxy(5,2);
lcd_putc(tecla);
delay_ms(2000);
if (tecla=='1'){
   onzas:
   lcd_init();
   lcd_putc("DIGITE CANTIDAD EN ONZAS");
   lcd_gotoxy(1,2);
   lcd_putc("Y OPRIMA 'F'");
   lcd_gotoxy(1,1);
   for(i=0;i<3;i++){
   do{
   tecla1=kbd_getc();
   }while(tecla1==0);
      lcd_putc(tecla1);
   cant[i]=tecla1;
if (tecla1=='F'){
lcd_init();
lcd_putc(cant);
delay_ms(10000);
if (cant==10){
ALTO(VAL1);
delay_ms(5000);
BAJO(VAL1);}
}}}
 
Última edición por un moderador:
Te sugiero armar otro vector con caracteres:

char LETRAS[]={'1','2','3','4'};

Al comparar las teclas lo hacés en forma entera, como describí en el post anterior, pero para mandar la letra al display hacés algo como:

lcd_putc(LETRA[tecla]);
 
Atrás
Arriba