control de teclado matricial

3
Control de teclado matricial Esta es una simple función de control de teclado matricial de 4x4, es muy sencillo, el principio de funcionamiento es por barrido de bits, o sensado. Se toma un puerto completo de 1byte y se divide en dos, dejando los 4bits de la parte baja para X y los 4 bit de la parte alta para Y, de esta forma conformamos una matriz de 4x4. El proceso de barrido consiste en alimentar una linea del teclado que puede ser X o Y, y una vez alimentada esa linea se procede a testear cada uno de los 4 bits, de esta forma se puede saber si alguna de las teclas pulsadas coincide con esta linea alimentada, si es asi se moverá a la variable el valor deseado., luego se sigue alimentando la siguiente linea y se vuelven a testear cada uno de los 4 bits, nuevamente se vuelve a repetir hasta llegar a las 4 lineas. output_c(0b00000001); //Habilita el pin RC0 Luego se testean las otras cuatro lineas if(PORTC==0b00010001) teclaPulsada='7'; //Si RC4=0 asigna '7' if(PORTC==0b00100001) teclaPulsada='4'; //Si RC5=0 asigna '4' if(PORTC==0b01000001) teclaPulsada='1'; //Si RC6=0 asigna '1' if(PORTC==0b10000001) teclaPulsada='C'; //Si RC7=0 asigna 'C' De esta forma podemos comprobar el funcionamiento, ya que esto se repetirá 4 veces como puede verse en el programa para lograr recorrer toda la matriz. Como se puede ver en este circuito, se presiona la tecla 6, la forma que tiene el microcontroaldor de saber que se ha pulsado es la siguiente: Podemos ver que las lineas que se alimentan son las que van de RC0 a RC3, en este caso, el programa se encuentra alimentando RC2 por eso toda la linea vertical donde se encuentra el botón 9, 6, 3 y =, esta alimentada, ahora viene la parte de los 4 if, preguntando cual de ellas esta precionada, entonces encuentra que la tecla pulsada es la que pertenece a la linea RC5, al encontrar esta igualdad asigna el valor 6 a la variable que luego sera mostrada en el LCD.

Upload: willy-sebas

Post on 15-Sep-2015

218 views

Category:

Documents


6 download

DESCRIPTION

teclado

TRANSCRIPT

  • Control de teclado matricial

    Esta es una simple funcin de control de teclado matricial de 4x4, es muy sencillo, el principio de funcionamiento es por barrido de bits, o sensado. Se toma un puerto completo de 1byte y se divide en dos, dejando los 4bits de la parte baja para X y los 4 bit de la parte alta para Y, de esta forma conformamos una matriz de 4x4. El proceso de barrido consiste en alimentar una linea del teclado que puede ser X o Y, y una vez alimentada esa linea se procede a testear cada uno de los 4 bits, de esta forma se puede saber si alguna de las teclas pulsadas coincide con esta linea alimentada, si es asi se mover a la variable el valor deseado., luego se sigue alimentando la siguiente linea y se vuelven a testear cada uno de los 4 bits, nuevamente se vuelve a repetir hasta llegar a las 4 lineas. output_c(0b00000001); //Habilita el pin RC0

    Luego se testean las otras cuatro lineas if(PORTC==0b00010001) teclaPulsada='7'; //Si RC4=0 asigna '7' if(PORTC==0b00100001) teclaPulsada='4'; //Si RC5=0 asigna

    '4' if(PORTC==0b01000001) teclaPulsada='1'; //Si RC6=0 asigna '1' if(PORTC==0b10000001) teclaPulsada='C'; //Si RC7=0 asigna 'C'

    De esta forma podemos comprobar el funcionamiento, ya que esto se repetir 4 veces como puede verse en el programa para lograr recorrer toda la matriz.

    Como se puede ver en este circuito, se presiona la tecla 6, la forma que tiene el microcontroaldor de saber que se ha pulsado es la siguiente: Podemos ver que las lineas que se alimentan son las que van de RC0 a RC3, en este caso, el programa se encuentra alimentando RC2 por eso toda la linea vertical donde se encuentra el botn 9, 6, 3 y =, esta alimentada, ahora viene la parte de los 4 if, preguntando cual de ellas esta precionada, entonces encuentra que la tecla pulsada es la que pertenece a la linea RC5, al encontrar esta igualdad asigna el valor 6 a la variable que luego sera mostrada en el LCD.

  • El programa completo es el siguiente.

    #include #use delay(int=4000000) #fuses XT,NOWDT #include char teclaPulsada;

    void leerTeclado(){

    output_c(0b00000001);

    if(input(pin_c4)==1) teclaPulsada='1';

    if(input(pin_c5)==1) teclaPulsada='2';

    if(input(pin_c6)==1) teclaPulsada='3';

    if(input(pin_c7)==1) teclaPulsada='A';

    delay_ms(10);

    output_c(0b00000010);

    if(input(pin_c4)==1) teclaPulsada='4';

    if(input(pin_c5)==1) teclaPulsada='5';

    if(input(pin_c6)==1) teclaPulsada='6';

    if(input(pin_c7)==1) teclaPulsada='B';

    delay_ms(10);

    output_c(0b00000100);

    if(input(pin_c4)==1) teclaPulsada='7';

    if(input(pin_c5)==1) teclaPulsada='8';

    if(input(pin_c6)==1) teclaPulsada='9';

    if(input(pin_c7)==1) teclaPulsada='C';

    delay_ms(10);

    output_c(0b00001000);

    if(input(pin_c4)==1) teclaPulsada='*';

    if(input(pin_c5)==1) teclaPulsada='0';

    if(input(pin_c6)==1) teclaPulsada='#';

    if(input(pin_c7)==1) teclaPulsada='D';

    delay_ms(10);

    }void main(void){ lcd_init();

  • lcd_gotoxy(1,1); printf(lcd_putc,"Electgpl Teclado"); while(TRUE){ leerTeclado(); lcd_gotoxy(1,2); printf(lcd_putc,"TECLA...: %c ",teclaPulsada) } }