hola amigos nuevamente molestando por el foro les cuento que logre resolver el problema de mostrar números consecutivos en mi LCD ingresando por teclado ahora quiero saber como hacer para que los valores que guardo en un arreglo se concatenen por ejemplo en la función que he hecho para teclado tengo condiciones (pues solo trabajo con un pin para mis ingresos por teclado),, entonces al presionar la tecla 1 en mi pantalla visualizare dicho numero y en la primera posición del arreglo tendré 1 también y así con los demás al presionar la tecla + los números que ingreso deberán de juntarse formando un solo dígito como hago eso antes me dijeron que multiplicara x 10 y sumara el numero de la siguiente posición tiene lógica pero que pasa si el valor que quiero ingresar es de 2 dígitos? y el segundo es 0, aquí dejo mi código espero su ayuda si hay algo mejor háganme saber !!
#include <16f873a.h>
#device adc=10 //10 bits de resolucion
#FUSES xt,NOWDT,NOPROTECT,NOLVP,NOPUT,BROWNOUT //funcionamiento
#use delay (clock=4000000)
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7)//libreria par el manejo del puerto serie a 9600 baudios
#include "lcd.c"
/////////////////////////////////////
////////// FUNCIONES ///////////////
///////////////////////////////////
void inicializacion(void);
void com_ser(void);
void teclado(void);
//////////////////////////////////
//// Inicializacion Pines ///////
////////////////////////////////
#bit porta_2=0x05.2
#bit portc_0=0x07.0
#bit portc_4=0x07.4
#byte porta=0x05
#byte portb=0x06
#byte portc=0x07
#byte adcon1=0x009f
///////////////////////////////
//////// Variables ///////////
/////////////////////////////
float valor,temp=0;
long set;
int cad[16],set_point=0;
int i=1; //contador para desplegar caracteres en lcd
////////////////////////////
////////ejecucion//////////
//////////////////////////
void inicializacion()
{
set_tris_a(0b00001011); // AN0, AN1 y AN3 son entradas
set_tris_c(0b10010000);
adcon1=(0b00000100); //conf del adcon1
setup_adc(ADC_CLOCK_INTERNAL);
lcd_init();
porta=0x00; //todos los puertos inicializan en 0
portb=0x00;
portc=0x00;
}
void main()
{
inicializacion(); //funcion de inicializacion
porta_2=1; //led de encendido
lcd_gotoxy(4,1);lcd_putc("Bienvenidos \n\r");
delay_ms(2000);
for( ;; )
{
set_adc_channel(0); //se habilita el canal analog 0
valor=read_adc(); //se toma la lectura del canal 0
temp=500*valor/1024; //ecuacion para temperatura
printf(lcd_putc,"\fTemp=%0.1fºC", temp);
delay_ms(100);
com_ser(); //llamado para la comunicacion serie
if(portc_4==1) //interruptor para ingresar el set point x teclado
teclado(); //funcion para uso del teclado
delay_ms(1000);
}
}
void teclado()
{
inicializacion();
while(true)
{
lcd_gotoxy(1,1);
lcd_putc(" ");
delay_ms(10);
lcd_putc("set point y +\r\n");
set_adc_channel(1); //lectura desde
set=read_adc(); //el teclado
if((set>613)&(set<625)) //condicion para ON/C
{
lcd_gotoxy(i,2);
lcd_putc('\f');delay_ms(40); //limpia la LCD
i=1;
}
if((set>423)&(set<431)) //Condicion para 0
{
lcd_gotoxy(i,2);
lcd_putc('0');delay_ms(200);
i=i+1;
}
if((set>271)&(set<277)) //condicion para +
{
if((cad[1]>0)&(cad[2]!=false)) // esto me funciona bien pero q pasa si cad[2] es igual a 0
{
set_point=(cad[1]*10)+cad[2];
lcd_gotoxy(1,1);
printf(lcd_putc,"\fTemp=%dºC", set_point);
delay_ms(2000);
}
if((cad[2]==false))
{
set_point=cad[1];
lcd_gotoxy(1,1);
printf(lcd_putc,"\fTemp=%dºC", set_point);
delay_ms(2000);
}
}
if((set>658)&(set<663)) //condicion para 1
{
cad[i]=1;
lcd_gotoxy(i,2);
lcd_putc('1');delay_ms(200);
i=i+1;
}
if((set>443)&(set<449)) //condicion para 2
{
cad[i]=2;
lcd_gotoxy(i,2);
lcd_putc('2');delay_ms(200);
i=i+1;
}
if((set>343)&(set<347)) //condicion para 3
{
cad[i]=3;
lcd_gotoxy(i,2);
lcd_putc('3');delay_ms(200);
i=i+1;
}
if((set>280)&(set<284)) //condicion para -
{
lcd_gotoxy(i,2);
lcd_putc('-');delay_ms(200);
i=i+1;
}
if((set>690)&(set<696)) //condicion para 4
{
lcd_gotoxy(i,2);
lcd_putc('4');delay_ms(200);
i=i+1;
}
if((set>458)&(set<462)) //condicion para 5
{
lcd_gotoxy(i,2);
lcd_putc('5');delay_ms(200);
i=i+1;
}
if((set>350)&(set<356)) //condicion para 6
{
lcd_gotoxy(i,2);
lcd_putc('6');delay_ms(200);
i=i+1;
}
if((set>748)&(set<755)) //condicion para 7
{
lcd_gotoxy(i,2);
lcd_putc('7');delay_ms(200);
i=i+1;
}
if((set>480)&(set<489)) //condicion para 8
{
lcd_gotoxy(i,2);
lcd_putc('8');delay_ms(200);
i=i+1;
}
if((set>365)&(set<371)) //condicion para 9
{
lcd_gotoxy(i,2);
lcd_putc('9');delay_ms(200);
i=i+1;
}
}
}
void com_ser()
{
portc_0=1;
set_adc_channel(0);
valor=read_adc();
temp=500*valor/1024;
printf("Temperatura=%01.2fºC\r\n",temp);
delay_ms(300);
portc_0=0;
}