Autor Tema: Problema con lcd y teclado  (Leído 1374 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado kikecon

  • PIC10
  • *
  • Mensajes: 35
Problema con lcd y teclado
« en: 01 de Noviembre de 2010, 16:37:28 »
hola amigos tengo un problema, estoy usando un teclado matricial para poder ingresar  una temperatura limite, esta misma debe visualizarse en una lcd conforme se vaya escribiendo, bien para el teclado uso un solo pin como analogico a este mismo le ha puesto resistencias de valores distintos para poder tener un valor numerico y hacer las condiciones. Bien el primer problema consiste en que cuando presiono un boton q para manera me verificacion dibuja un 1 en la lcd este se muestra en la lcd pero cuando presion otro boton este utlimo lo chanca y se visualiza el ultimo presionado solo he hecho al prueba con dos botones, me imagino que asi como \n que es cambio de linea debe haber un comando para seguir escribiendo apartir del ultimo caracter o no se, el otro problema que tengo que si logro solucionar este primer problema y llego a ingresar un temperatura digamos como ejemplo 150 como hago para que este valor se guarde en una variable porq si vemos bien cuando presione bien lo presiono lo guardaria en una variable pero a este igual lo chancaria el numero siguiente  una posible solucion seria un buffer y luego concatenarlo? y si es asi como se haria eso  adjunto tanto el programa como la simulcion en proteus ojala me ayuden.gracias amigos.


#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;
////////////////////////////
////////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))
      {
         lcd_putc(' ');delay_ms(400);  //con fines de Prueba ON/c dibujara 1
      }
      if((set>423)&(set<431))
      {
         lcd_putc('0');delay_ms(400);
      }
   }
}
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;
}
Enrique Contreras R.


 

anything