unsigned short kp, kpb, dg, eepr, a , b, oldstate,cnt, inc, clok = 0; //declaracion de variables
int val=0;
unsigned int Radc, TemI;
//unsigned short c;
//unsigned short b;
float Tem;
char Text[5];
void menu(){
switch(a){
case 49: a = 1;break; //"1"
case 50: a = 2;break; //"2"
case 51: a = 3;break; //"3"
// case 65: b = ;break; //"A"
case 52: a = 4;break; //4"
case 53: a = 5;break; //"5"
case 54: a = 6;break; //"6"
//case 8: b = 66;break; //"B"
case 55: a = 7;break; // "7"
case 56: a = 8;break; //"8"
case 57: a = 9;break; //"9"
//case 12: b = 67;break; //"C"
//case 42: b = 42;break; //"*"
case 48: a = 0;break; // "0"
//case 15: b = 35;break; //"#"
//case 16: b = 68;break; //"D"
}
switch(b){
case 49: b = 1;break; //"1"
case 50: b = 2;break; //"2"
case 51: b = 3;break; //"3"
// case 65: b = ;break; //"A"
case 52: b = 4;break; //4"
case 53: b = 5;break; //"5"
case 54: b = 6;break; //"6"
//case 8: b = 66;break; //"B"
case 55: b = 7;break; // "7"
case 56: b = 8;break; //"8"
case 57: b = 9;break; //"9"
//case 12: b = 67;break; //"C"
//case 42: b = 42;break; //"*"
case 48: b = 0;break; // "0"
//case 15: b = 35;break; //"#"
//case 16: b = 68;break; //"D"
}
val=(a*10)+b;
Lcd_Cmd(_LCD_CLEAR); //limpia lcd
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1, 1, "T:"); //write message Texton lcd
// Lcd_Out( 1, 12, Text);
Lcd_Out(2, 1, "Presiona 1");
//Lectura del canal 0 del ADC.
Radc = ADC_Read(0);
//Uso de la ecuación (13.5).
Tem = (0.244*Radc)*2;
//Se convierte el resultado a un número entero.
TemI = Tem;
//Se convierte el número entero a una cadena de caracteres.
IntToStr( TemI, Text );
if(Tem>val){
PORTB = 0b00000001;
}
else {
PORTB = 0b00000010; }
Lcd_Out(1, 10, Text);
}
void maindos(){
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1, 1, "Nueva Temperatura");
return;
}
void guardatem(){ //lee una clave de 2 digitos desde teclado y la guarda en la eeprom
int i;
// unsigned short c;
// unsigned short b;
for (i = 0; i < 1; i++){
do {
a=0;
do
a=Keypad_Key_Click();
while (!a);
switch(a){
case 1: a = 49;break; //"1"
case 2: a = 50;break; //"2"
case 3: a = 51;break; //"3"
// case 4: a = 65;break; //"A"
case 5: a = 52;break; //4"
case 6: a = 53;break; //"5"
case 7: a = 54;break; //"6"
// case 8: a = 66;break; //"B"
case 9: a = 55;break; // "7"
case 10: a = 56;break; //"8"
case 11: a = 57;break; //"9"
// case 12: a = 67;break; //"C"
// case 13: a = 42;break; //"*"
case 14: a = 48;break; // "0"
// case 15: a = 35;break; //"#"
// case 16: a = 68;break; //"D"
}
if (a !=oldstate)
{
oldstate=a;
}
Lcd_Chr(2, 5, a);
delay_ms(500);
EEPROM_Write(0x80, a);
}while(0);
do {
b=0;
do
b=Keypad_Key_Click();
while (!b);
switch(b){
case 1: b = 49;break; //"1"
case 2: b = 50;break; //"2"
case 3: b = 51;break; //"3"
case 4: b = 65;break; //"A"
case 5: b = 52;break; //4"
case 6: b = 53;break; //"5"
case 7: b = 54;break; //"6"
case 8: b = 66;break; //"B"
case 9: b = 55;break; // "7"
case 10: b = 56;break; //"8"
case 11: b = 57;break; //"9"
case 12: b = 67;break; //"C"
case 13: b = 42;break; //"*"
case 14: b = 48;break; // "0"
case 15: b = 35;break; //"#"
case 16: b = 68;break; //"D"
}
if (b !=oldstate)
{
oldstate=b;
}
Lcd_Chr(2, 6, b);
EEPROM_Write(0x81, b);
}while(0);
}
}
char convert(unsigned short kp){
switch (kp) { //pasa a ascii la tecla pulsada
case 1: kp = '1'; break; // 1
case 2: kp = '2'; break; // 2
case 3: kp = '3'; break; // 3
case 4: kp = 'A'; break; // A
case 5: kp = '4'; break; // 4
case 6: kp = '5'; break; // 5
case 7: kp = '6'; break; // 6
case 8: kp = 'B'; break; // B
case 9: kp = '7'; break; // 7
case 10: kp = '8'; break; // 8
case 11: kp = '9'; break; // 9
case 12: kp = 'C'; break; // C
case 13: kp = '*'; break; // *
case 14: kp = '0'; break; // 0
case 15: kp = '#'; break; // #
case 16: kp = 'D'; break; // D
}
return kp;
}
void maintres(){
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1, 1, "Guardo con exito");
return;
}
// Keypad module connections
char keypadPort at PORTC; //declaracion del puerto C
// End Keypad module connections
// LCD module connections
sbit LCD_RS at RA4_bit; //declaracion de los puertos del lcd
sbit LCD_EN at RA5_bit;
sbit LCD_D4 at RD0_bit;
sbit LCD_D5 at RD1_bit;
sbit LCD_D6 at RD2_bit;
sbit LCD_D7 at RD3_bit;
sbit LCD_RS_Direction at TRISA4_bit;
sbit LCD_EN_Direction at TRISA5_bit;
sbit LCD_D4_Direction at TRISD0_bit;
sbit LCD_D5_Direction at TRISD1_bit;
sbit LCD_D6_Direction at TRISD2_bit;
sbit LCD_D7_Direction at TRISD3_bit;
void main() {
/*unsigned int Radc, TemI;
float Tem;
char Text[16]; */
TRISB = 0;
PORTB = 0;
ADCON1 = 0b11000001;
//val=(c*10)+d;
Lcd_Init();
Keypad_Init();
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1,1,"Iniciando");
Lcd_Out(2,1,"Cargando ...");
delay_ms(800);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1,"TESJo");
Lcd_Out(2,1,"Mecatronica");
delay_ms(800);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1,"Sensor de");
Lcd_Out(2,1,"Temperatura");
delay_ms(800);
Lcd_Cmd(_LCD_CLEAR);
eepr = EEPROM_Read(0x80); // lee eeprom para ver si esta vacia
if (eepr == 255){
maindos();
}
do
{
inc = 0;
menu();
do{
inc = Keypad_Key_Click(); //en inc el numero de tecla pulsada
}
while (!inc);
if (inc == 1){
maindos();
guardatem();
delay_ms(700);
maintres();
delay_ms(700);
}
}while(1);
}
¿Qué compilador estás utilizando?
Por lo poco que logro entender, al parecer te quedas esperando a presionar alguna tecla y por lo tanto nunca avanzará el programa si es que no presionas tecla alguna.
cito la parte del código dentro de main a la que me refieroCódigo: C
do { inc = keypad_key_click(); } while (!inc);