Pues te comento que por tiempo dijo que lo hicieramos por polling y ahora tengo problema al guardar en un arreglo las teclas que se pulsan para compararlas con un arreglo fijo. *lo enmarco con //aqui
quiero guardar los pulsos pero siempre se almacena 1 ejm 9999 o 8888 y asi entonces nunca pasara a la siguiente condicion
gracias por tu ayuda
#include <xc.h>
#define _XTAL_FREQ 4000000
void esc_lcd(char datos, char rs, char rw);
void config_lcd_8bits();
void leer();
int inicio [10] = {'P','r','e','s','i','o','n','e',' ','#'};
int ingreso [13] = {'I','n','g','r','e','s','e',' ','c','l','a','v','e'};
int final [14] = {'C','l','a','v','e',' ','c','o','r','r','e','c','t','a'};
int final1 [16] = {'C','l','a','v','e',' ','i','n','c','o','r','r','e','c','t','a'};
int vector [4] = {0b000000001,0b000000010,0b000000100,0b000001000};
char clave [4] = {};
char clave1 [4] = {'6','7','8','9'};
int bandera,bandera1,bandera2,bandera3,clave_correcta, i, posicion,punto,variable = 0;
int bandera4, bandera5 = 0;
char tecla;
void main(){
OSCCONbits.SCS = 11;
OSCCONbits.IRCF = 110;
ADCON1bits.PCFG0=1;
ADCON1bits.PCFG1=1;
ADCON1bits.PCFG2=1;
ADCON1bits.PCFG3=1;
TRISA = 0;
TRISBbits.RB4 = 1;
TRISBbits.RB5 = 1;
TRISBbits.RB6 = 1;
TRISC = 0;
TRISD = 0;
TRISE = 0;
config_lcd_8bits();
while(1){
bandera1 = 1;
bandera2 = 1;
bandera3 = 1;
while(bandera == 0){
esc_lcd(0b100000000,0,0);
for(i = 0; i<10; i++){
esc_lcd(inicio,1,0);
}
bandera = 1;
bandera1 = 0;
}
while(bandera1 == 0){
leer();
if(tecla == '#'){
esc_lcd(0b10000000,0,0);
for(i=0;i<13;i++){
esc_lcd(ingreso,1,0);
}
for(i=0; i<4; i++){
clave = '0';
}
bandera1 = 1;
bandera2 = 0;
}
}
//aqui
while(bandera2 == 0){
while(posicion < 4){
leer();
if((tecla == '1')||(tecla == '2')||(tecla == '3')||(tecla == '4')||(tecla == '5')||(tecla == '6')||(tecla == '7')||(tecla == '8')||(tecla == '9')||(tecla == '0')){
clave[posicion] = tecla;
posicion++;
}
bandera2 = 1;
bandera3 = 0;
}
}
while(bandera3 == 0){
for(i=0; i<4; i++){
if(clave == clave1){
esc_lcd(0b100000000,0,0);
for(i = 0; i<14; i++){
esc_lcd(final,1,0);
}
bandera3 = 1;
bandera = 0;
}
}
}
}
}
void esc_lcd(char datos, char rs, char rw){
LATE0 = 0;
LATE2 = rs;
LATE1 = rw;
__delay_us(1);
LATE0 = 1;
__delay_us(1);
PORTD = datos;
__delay_us(1);
LATE0 = 0;
__delay_us(1);
}
void config_lcd_8bits(){
__delay_ms(15);
esc_lcd(0b00110000,0,0);
__delay_ms(4.1);
esc_lcd(0b00110000,0,0);
__delay_us(100);
esc_lcd(0b00111000,0,0);
esc_lcd(0b00110000,0,0);
esc_lcd(0b00001111,0,0);
esc_lcd(0b00000001,0,0);
esc_lcd(0b00000110,0,0);
}
void leer(){
for(i = 0; i<4; i++){
if((PORTBbits.RB4 == 0)&&(PORTBbits.RB5 == 0)&&(PORTBbits.RB6 == 0)){
PORTA = vector;
__delay_ms(20);
if((PORTA == 0b00000001)&&(PORTBbits.RB4 == 1)){
tecla = '1';
}
else if((PORTA == 0b00000001)&&(PORTBbits.RB5 == 1)){
tecla = '2';
}
else if((PORTA == 0b00000001)&&(PORTBbits.RB6 == 1)){
tecla = '3';
}
else if((PORTA == 0b00000010)&&(PORTBbits.RB4 == 1)){
tecla = '4';
}
else if((PORTA == 0b00000010)&&(PORTBbits.RB5 == 1)){
tecla = '5';
}
else if((PORTA == 0b00000010)&&(PORTBbits.RB6 == 1)){
tecla = '6';
}
else if((PORTA == 0b00000100)&&(PORTBbits.RB4 == 1)){
tecla = '7';
}
else if((PORTA == 0b00000100)&&(PORTBbits.RB5 == 1)){
tecla = '8';
}
else if((PORTA == 0b00000100)&&(PORTBbits.RB6 == 1)){
tecla = '9';
}
else if((PORTA == 0b00001000)&&(PORTBbits.RB4 == 1)){
tecla = '*';
}
else if((PORTA == 0b00001000)&&(PORTBbits.RB5 == 1)){
tecla = '0';
}
else if((PORTA == 0b00001000)&&(PORTBbits.RB6 == 1)){
tecla = '#';
}
}
}
}