#include <16f877a.h>
#device adc=10
#fuses xt,nowdt,nobrownout
#use delay (clock=4000000)
#include <lcd.c>
#include "kbd_lib.c"
char a='7',b='8',c='1',d='2';
char y=1;
signed char x=1;
char t;
int16 q;
int16 p;
void control_temperatura(){
lcd_putc("\f control de \n\ temperatura");
delay_ms(2000);
for (;
{
set_adc_channel(1);
delay_us(20);
p= read_adc();
p=p/2.02666666667;
printf(lcd_putc, "\f temperatura = \n %4ld C", p );
delay_ms(150);
}
lcd_putc(" \f ");
}
void clave(){
lcd_putc("\f alarma \n\ ingrese clave ");
t=0;
while (t==0){t=kbd_getc();}
lcd_putc(" \f ");
while (true){
t=0;
while (t==0){t=kbd_getc();}
if(t==0){}
else if(t=='1'){ lcd_putc(t);}
else if(t=='2'){ lcd_putc(t);}
else if(t=='3'){ lcd_putc(t);}
else if(t=='4'){ lcd_putc(t);}
else if(t=='5'){ lcd_putc(t);}
else if(t=='6'){ lcd_putc(t);}
else if(t=='7'){ lcd_putc(t);}
else if(t=='8'){ lcd_putc(t);}
else if(t=='9'){ lcd_putc(t);}
else if(t=='0'){ lcd_putc(t);}
else if(t=='B'){ lcd_putc(t);}
else if(t=='A'){ return (-2);}
}
}
void main() {
setup_adc_ports(AN0_AN1_AN3);
setup_ADC(adc_clock_internal);
lcd_init();
while(t==0){
t= kbd_getc();
lcd_gotoxy(x,y);
lcd_putc(" escoja alguna opcion: 1, 2, 3 ");
delay_ms(150);
x--;
if(x==-30){x=17;}
}
if (t=='1')
control_temperatura();
else
if (t=='2'){
lcd_putc("\f control de \n\ set point ");
delay_ms(2000);
for (;
{
set_adc_channel(0);
delay_us(20);
q= read_adc();
if (q>150){
clave();
}
else
printf(lcd_putc, "\fADC = %4ld C", q );
delay_ms(150);
}
}
}
gracias por el interes, miren hay esta mi codigo, no lo e completado me faltan alguna cosas, y pues si se fijan en la parte de la subrutina clave pulso cualquier tecla y ps hay si puedo empezar a digitar la clave, y como ven si le doy la opcin A coloque el return pero necesito que ese return me lleve al menu principal pero no me lleva al menu principal me lleva a la parte donde se visualiza la frase alarma ingrese clave. ps si lo quieren revisar aqui les dejo la libreria kbd_lib.c, y de nuevo muchas gracias por el interes espero me puedan ayudar.
// char kbd_getc() Devuelve el código ASCII de la tecla pulsada.
// Si no se pulsó ninguna, devuelve 0.
// Conexiones del teclado.
/*
RB0 RB1 RB2 RB3
^ ^ ^ ^
| | | |
|---|---|---|---|
RB4 ---> | 1 | 2 | 3 | F |
|---|---|---|---|
RB5 ---> | 4 | 5 | 6 | E |
|---|---|---|---|
RB6 ---> | 7 | 8 | 9 | D |
|---|---|---|---|
RB7 ---> | A | 0 | B | C |
|---|---|---|---|
*/
// Caracteres ASCII asociados a cada tecla:
char const KEYS[4][4] = {{'1','2','3','F'},
{'4','5','6','E'},
{'7','8','9','D'},
{'A','0','B','C'}};
#byte kbd_port_b = 6
char kbd_getc(){
char tecla=0;
int f,c,t,i,j;
port_b_pullups(true);
set_tris_b(0b00001111); // RB7-RB4 salidas, RB3-RB0 entradas
for(f=0x10, i=0; i<4; f<<=1, i++){
for(c=0x01, j=0; j<4; c<<=1, j++){
kbd_port_b = ~f;
delay_cycles(1);
t = kbd_port_b & 0x0F;
t = ~(t | 0xF0);
if(t == c){
delay_ms(20);
tecla=KEYS
[j];
while(t==c){
restart_wdt();
t = kbd_port_b & 0x0F;
t = ~(t | 0xF0);
}
break;
}
}
if(tecla)
break;
}
port_b_pullups(false);
return tecla;
}