El siguiente programa enciende la marcha de un carro, utilizando un teclado matricial en mikroc
tambien tiene una clave de proteccion con encendido de poco tiempo, y una clave para apagar el carro
unsigned short contador,clave[5],apagar,apago[5],memoria[5]={'2','2','2','2','2'}, kp;
char oldstate = 0;
char J = 0;
char *txt1 = "password";
char *txt2 = " ok_hola";
char *txt3 = "correcto";
char *txt4 = "APAGADO";
void main() { //
Keypad_Init(&PORTB); // Initialize Keypad EN PORTB
Lcd_Init(&PORTD); // Initialize LCD on PORTD,
Lcd_Cmd(LCD_CLEAR); // LIMPIA LA PANTALLA DE LA LCD
trisa=0b000000; // INICIAMOS CON LOS PINES DE SALIDA EN CERO
kp = 0; // INICIAMOS LA VARIABLE DE KP EN CERO
Lcd_Out(1,1, txt1);
do {
if (Button(&PORTC, 1, 1, 1)) // detect logical one on RB1 pin
oldstate = 1;
if (oldstate && Button(&PORTC, 1, 1, 0)) {
{
for(J=0 ; J<5 ; J ++ )
}
if( J>=5)
{
PORTA = ~PORTA;
oldstate = 0;
J=0;
} // detect one-to-zero transition on RB1 pin
}
} while(1); // MANDANOS UN TEXTO A LA LCD DE PASSWORD
do { // INICIAMOS PROGRAMA
Lcd_Cmd(LCD_CLEAR); // LIMPIAMOS LA PANTALLA DE LA LCD
Lcd_Cmd(LCD_cursor_off); // APAGAMOS EL CURSOR DE LA LCD
Lcd_Out(1,1, txt1); // MANDAMOS EL TEXTO PASSWORD AL REGLON UNO COLUMNA UNO
clave[0]='0';clave[1]='0';clave[2]='0';clave[3]='0';clave[4]='0'; // LE ASIGNAMOS LA LETRA CERO
//AL ARRELO EN SUS ESPACIOS
for(contador=0 ; contador<5 ; contador ++ ) //DECLARAMOS UN CONTADOR CON UN FOR
{
do {
kp = Keypad_Released(); // FUNCION DE LA KEYPAD MANDA UN 1 O UN 16
Delay_ms(10); // SEGUN LA TECLA PRESIONADA
}while (!kp);
Lcd_Chr_CP('*'); // IMPRIME EN LA LCD
switch (kp) { // UBICO A KP EN CADA UNO DE LOS CASOS
case 1: kp = '1'; break;
case 2: kp = '2'; break;
case 3: kp = '3'; break;
case 4: kp = 'A'; break;
case 5: kp = '4'; break;
case 6: kp = '5'; break;
case 7: kp = '6'; break;
case 8: kp = 'B'; break;
case 9: kp = '7'; break;
case 10: kp = '8'; break;
case 11: kp = '9'; break;
case 12: kp = 'C'; break;
case 13: kp = '*'; break;
case 14: kp = '0'; break;
case 15: kp = '#'; break;
case 16: kp = 'D'; break;
}
clave[contador]=kp; // ASIGNAMOS EL VALOR DE KP EN CADA PUNTO DEL ARREGLO
}
if(clave[0]==memoria[0]&&clave[1]==memoria[1]&&clave[2]==memoria[2]&&clave[3]==memoria[3]&&clave[4]==memoria[4])
{
Lcd_Cmd(Lcd_Clear); // LIMPIA PANTALLA
Lcd_Out(2,1, txt2); // IMPRIME EL TEXTO OK_HOLA
porta=0b001101; // ENCIENDE EL switch
delay_ms(300); // TARDA 300 MS
porta=0b001111; // ENCIENDE MARCHA
delay_ms(650); // RETARDO DE 650
porta=0b001101; // APAGA MARCHA
delay_ms(10000);
porta=0b001101;
delay_ms(10000); // TARDA 2 SEGUNDOS
porta=0b001101;
delay_ms(10000);
porta=0b001101;
delay_ms(10000);
porta=0b001101;
delay_ms(10000);
porta=0b000000; // CARRO SE APAGA
Lcd_Cmd(Lcd_Clear); // LIMPIA PANTALLA
clave[0]='0';clave[1]='0';clave[2]='0';clave[3]='0';clave[4]='0';clave[5]='0';
}
if(clave[0]=='2'&&clave[1]=='6'&&clave[2]=='C'&&clave[3]=='6'&&clave[4]=='6')
{
Lcd_Cmd(Lcd_Clear);
Lcd_Out(2,1, txt3); // CORRECTO
porta=0b001101;
delay_ms(300);
porta=0b001111;
delay_ms(650);
porta=0b001101;
Lcd_Cmd(Lcd_Clear);
clave[0]='0';clave[1]='0';clave[2]='0';clave[3]='0';clave[4]='0';clave[5]='0';
}
if(clave[0]=='C'&&clave[1]=='C'&&clave[2]=='C'&&clave[3]=='C'&&clave[4]=='C')
{
Lcd_Cmd(Lcd_Clear);
Lcd_Out(2,3, txt4); // APAGADO
porta=0b000000;
delay_ms(2000);
porta=0b000000;
Lcd_Cmd(Lcd_Clear);
clave[0]='0';clave[1]='0';clave[2]='0';clave[3]='0';clave[4]='0';clave[5]='0';
}
} while (1); // CERRAMOS EL CICLO
}
Comentarios
vasquez_ave@hotmail.com
vasquez_ave@hotmail.com