Este es el del transmisor
/*Teclado controlador de tableta de precios
/
// ESTADOS Enumeraciones para etiquetas de cada estado.
enum tipoEdos{ INICIO=1, DIESEL, MAGNA, MENU, PREMIUM, ILUM};
//Declaración del puerto para el teclado 4x4
char keypadPort at PORTD;
// LCD module connections
sbit LCD_RS at LATB4_bit;
sbit LCD_EN at LATB5_bit;
sbit LCD_D4 at LATB0_bit;
sbit LCD_D5 at LATB1_bit;
sbit LCD_D6 at LATB2_bit;
sbit LCD_D7 at LATB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections
/////////////////////////////////////////////////////////////////////////////////
//Constantes //Tabla para dexcodificar teclado
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
//const char tablaKB[18]= { 0,'1','2','3','A','4','5','6','B','7','8','9','C','*','0','#','D' };
const char tablaKB[18]= { 0,'D','#','0','*','C','9','8','7','B','6','5','4','A','3','2','1' };
//Declaracion de funciones
void pruebas(); //Para hacer pruebas parciales mientras se desarrolla el sistema.
// Funciones correspondientes a cada estado;
enum tipoEdos inicio();
enum tipoEdos diesel();
enum tipoEdos magna();
enum tipoEdos diesel();
enum tipoEdos ilum();
enum tipoEdos menu();
void iniPuertos(); //Función para inicializar Puertos
void inic_UART(); //Inicializa puerto serie Tx y Rx
char leeTeclado();
void limpiaLCD();
//variables globales
enum tipoEdos estado;
unsigned char precio1[5];
unsigned char precio2[5];
unsigned char precio3[5];
unsigned char ilumin[5];
unsigned char interpretanum;
char aux=0;
char cont=0;
// DEFINICION DE FUNCIONES ////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
void inic_UART(){ //Inicializa puerto serie Tx y Rx
UART1_Init(9600); // Inicializa módulo UART at 9600 bps
Delay_ms(1000); // Espera para que el UART se estabilice.
PIR1.RCIF=0; //Borra solicitud de interrupción de RX.
PIE1.RCIE=1; // Interrupción por RX habilitada.
}
void inicPuertos(){
TRISA=0;TRISB=0; // Puertos A y B Digitales
TRISE=0; // Bits 0,1,2 de PORTE como salidas
PORTE=0;
PORTA=0XFF;
TRISC=0X80; //DECLARACIÓN DE PUERTO SERIE//
Lcd_Init(); //Inicializa el LCD.
Keypad_Init(); // Inicia Teclado .
inic_UART(); //Inicializa Comunicacion RS232.
}
//Función para LimpiarPantalla.
void limpiaLCD(void){
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_RETURN_HOME);
}
//Rutina que lee el teclado no bloqueante que entrega valor
// decodificado de tecla de acuerdo a la tabla tablaKB.
char leeTeclado(){
return tablaKB[Keypad_Key_Press()];
}
// Funciones correspondientes a los estados./////
enum tipoEdos inicio(){
limpiaLCD();
Lcd_Out(1, 4,"HALLTECH");
Lcd_Out(2, 4,"SOLUTION");
Delay_ms(500);
return MENU;
}
enum tipoEdos ilum(){
char i=0;
limpiaLCD();
Lcd_Out(1, 1, "NIV. ILUMINACION");
Delay_ms(500);
ilumin[0]=0x04;
ilumin[3]=0xFF;
ilumin[4]=0xFF;
ilumin[5]=0x04;
for(i=1; i<3; i++){
while(!leeTeclado()) // Espera a que se presione una tecla.
if (leeTeclado()=='1'){
interpretanum=0x01;
Lcd_Out(2, i,"1");}
if (leeTeclado()=='2'){
interpretanum=0x02;
Lcd_Out(2, i,"2");}
if (leeTeclado()=='3'){
interpretanum=0x03;
Lcd_Out(2, i,"3");}
if (leeTeclado()=='4'){
interpretanum=0x04;
Lcd_Out(2, i,"4");}
if (leeTeclado()=='5'){
interpretanum=0x05;
Lcd_Out(2, i,"5");}
if (leeTeclado()=='6'){
interpretanum=0x06;
Lcd_Out(2, i,"6");}
if (leeTeclado()=='7'){
interpretanum=0x07;
Lcd_Out(2, i,"7");}
if (leeTeclado()=='8'){
interpretanum=0x08;
Lcd_Out(2, i,"8");}
if (leeTeclado()=='9'){
interpretanum=0x09;
Lcd_Out(2, i,"9");}
if (leeTeclado()=='0'){
interpretanum=0x00;
Lcd_Out(2, i,"0");}
ilumin=interpretanum;
if (leeTeclado() == '#'){
limpiaLCD();
Lcd_Out(1, 1, "NIV. ILUMINACION");
i=0;}
if(leeTeclado()=='*'){
i=5;
ilumin[0]=0;
ilumin[3]=0;
ilumin[4]=0;
return MENU;}
Delay_ms(200);
}
UART1_Write(ilumin[0]);
Delay_ms(200);
UART1_Write(ilumin[1]);
Delay_ms(200);
UART1_Write(ilumin[2]);
Delay_ms(200);
UART1_Write(ilumin[3]);
Delay_ms(200);
UART1_Write(ilumin[4]);
Delay_ms(200);
UART1_Write(ilumin[5]);
Delay_ms(200);
Lcd_Out(2, 1,"Actualizado");
Delay_ms(200);
return MENU;
}
enum tipoEdos diesel(){
char i;
limpiaLCD();
Lcd_Out(1, 2, "PREC. DIESEL");
Delay_ms(500);
precio3[0]=0x03;
precio3[5]=0x03;
for(i=1; i<=4; i++){
while(!leeTeclado()) // Espera a que se presione una tecla.
if (leeTeclado()=='1'){
interpretanum=0x01;
Lcd_Out(2, i,"1");}
if (leeTeclado()=='2'){
interpretanum=0x02;
Lcd_Out(2, i,"2");}
if (leeTeclado()=='3'){
interpretanum=0x03;
Lcd_Out(2, i,"3");}
if (leeTeclado()=='4'){
interpretanum=0x04;
Lcd_Out(2, i,"4");}
if (leeTeclado()=='5'){
interpretanum=0x05;
Lcd_Out(2, i,"5");}
if (leeTeclado()=='6'){
interpretanum=0x06;
Lcd_Out(2, i,"6");}
if (leeTeclado()=='7'){
interpretanum=0x07;
Lcd_Out(2, i,"7");}
if (leeTeclado()=='8'){
interpretanum=0x08;
Lcd_Out(2, i,"8");}
if (leeTeclado()=='9'){
interpretanum=0x09;
Lcd_Out(2, i,"9");}
if (leeTeclado()=='0'){
interpretanum=0x00;
Lcd_Out(2, i,"0");}
precio3=interpretanum;
if (leeTeclado() == '#'){
limpiaLCD();
Lcd_Out(1, 1, "PREC. DIESEL");
i=0;}
if(leeTeclado()=='*'){
i=5;
precio3[0]=0;
return MENU;
}
Delay_ms(200);
}
UART1_Write(precio3[0]);
Delay_ms(200);
UART1_Write(precio3[1]);
Delay_ms(200);
UART1_Write(precio3[2]);
Delay_ms(200);
UART1_Write(precio3[3]);
Delay_ms(200);
UART1_Write(precio3[4]);
Delay_ms(200);
UART1_Write(precio3[5]);
Delay_ms(200);
Lcd_Out(2, 1,"Actualizado");
Delay_ms(200);
return MENU;
}
enum tipoEdos premium(){
char i;
limpiaLCD();
Lcd_Out(1, 2, "PREC. PREMIUM");
Delay_ms(500);
precio2[0]=0x02;
precio2[5]=0x02;
for(i=1; i<=4; i++){
while(!leeTeclado()) // Espera a que se presione una tecla.
if (leeTeclado()=='1'){
interpretanum=0x01;
Lcd_Out(2, i,"1");}
if (leeTeclado()=='2'){
interpretanum=0x02;
Lcd_Out(2, i,"2");}
if (leeTeclado()=='3'){
interpretanum=0x03;
Lcd_Out(2, i,"3");}
if (leeTeclado()=='4'){
interpretanum=0x04;
Lcd_Out(2, i,"4");}
if (leeTeclado()=='5'){
interpretanum=0x05;
Lcd_Out(2, i,"5");}
if (leeTeclado()=='6'){
interpretanum=0x06;
Lcd_Out(2, i,"6");}
if (leeTeclado()=='7'){
interpretanum=0x07;
Lcd_Out(2, i,"7");}
if (leeTeclado()=='8'){
interpretanum=0x08;
Lcd_Out(2, i,"8");}
if (leeTeclado()=='9'){
interpretanum=0x09;
Lcd_Out(2, i,"9");}
if (leeTeclado()=='0'){
interpretanum=0x00;
Lcd_Out(2, i,"0");}
precio2=interpretanum;
if (leeTeclado() == '#'){
limpiaLCD();
Lcd_Out(1, 1, "PREC. PREMIUM");
i=0;}
if(leeTeclado()=='*'){
i=5;
precio2[0]=0;
return MENU;
}
Delay_ms(200);
}
UART1_Write(precio2[0]);
Delay_ms(200);
UART1_Write(precio2[1]);
Delay_ms(200);
UART1_Write(precio2[2]);
Delay_ms(200);
UART1_Write(precio2[3]);
Delay_ms(200);
UART1_Write(precio2[4]);
Delay_ms(200);
UART1_Write(precio2[5]);
Delay_ms(200);
Lcd_Out(2, 1,"Actualizado");
Delay_ms(200);
return MENU;
}
enum tipoEdos magna(){
char i=0;
limpiaLCD();
Lcd_Out(1, 2, "PREC. MAGNA");
Delay_ms(500);
precio1[0]=0X01;
precio1[5]=0X01;
for(i=1; i<=4; i++){
while(!leeTeclado()) // Espera a que se presione una tecla.
if (leeTeclado()=='1'){
interpretanum=0x01;
Lcd_Out(2, i,"1");}
if (leeTeclado()=='2'){
interpretanum=0x02;
Lcd_Out(2, i,"2");}
if (leeTeclado()=='3'){
interpretanum=0x03;
Lcd_Out(2, i,"3");}
if (leeTeclado()=='4'){
interpretanum=0x04;
Lcd_Out(2, i,"4");}
if (leeTeclado()=='5'){
interpretanum=0x05;
Lcd_Out(2, i,"5");}
if (leeTeclado()=='6'){
interpretanum=0x06;
Lcd_Out(2, i,"6");}
if (leeTeclado()=='7'){
interpretanum=0x07;
Lcd_Out(2, i,"7");}
if (leeTeclado()=='8'){
interpretanum=0x08;
Lcd_Out(2, i,"8");}
if (leeTeclado()=='9'){
interpretanum=0x09;
Lcd_Out(2, i,"9");}
if (leeTeclado()=='0'){
interpretanum=0x00;
Lcd_Out(2, i,"0");}
precio1=interpretanum;
if (leeTeclado() == '#'){
limpiaLCD();
Lcd_Out(1, 1, "PREC. MAGNA");
i=0;}
if(leeTeclado()=='*'){
i=5;
precio1[0]=0;
return MENU;
}
Delay_ms(200);
}
UART1_Write(precio1[0]);
Delay_ms(200);
UART1_Write(precio1[1]);
Delay_ms(200);
UART1_Write(precio1[2]);
Delay_ms(200);
UART1_Write(precio1[3]);
Delay_ms(200);
UART1_Write(precio1[4]);
Delay_ms(200);
UART1_Write(precio1[5]);
Delay_ms(200);
Lcd_Out(2, 1,"Actualizado");
Delay_ms(200);
return MENU;
}
enum tipoEdos menu(){
limpiaLCD();
Lcd_Out(1, 1, "A=MAGNA B=PREM");
Lcd_Out(2, 1, "C=DIESEL D=ILUM");
while(1){
if(leeTeclado()=='A'){ //Comando para cambiar precio de magna
return MAGNA;
}
if(leeTeclado()=='B'){ //Comando para cambiar precio de premium
return PREMIUM;
}
if(leeTeclado()=='C'){ //Comando para cambiar precio de diesel
return DIESEL;
}
if(leeTeclado()=='D'){ //Comando para cambiar ilumnación
return ILUM;
}
}
}
///////////////////////////////////////////////////////////////////////////
//Programa Principal //////////////////////////////////////////////////////
void main(void) {
//OSCCON=0x72;
inicPuertos();
Lcd_Cmd(_LCD_TURN_ON);
limpiaLCD();
INTCON.GIE = 1; // Habilitador global de interrupciones
INTCON.PEIE =1; // Habilitador de interrupciones de periféricos (UART)
//pruebas();
estado = INICIO;
while(1){
switch(estado){
case INICIO: estado=inicio(); break;
case MENU: estado=menu(); break;
case ILUM: estado=ilum(); break;
case DIESEL: estado=diesel(); break;
case MAGNA: estado=magna(); break;
case PREMIUM: estado=premium();break;
}
}
}