keypad4x4.h

Ir a la documentación de este archivo.
00001 #ifndef __KEYPAD4X4_H__
00002 #define __KEYPAD4X4_H__
00003 
00004 /*
00005   This code is free software; you can redistribute it and/or modify
00006    it under the terms of the GNU General Public License as published by
00007    the Free Software Foundation; either version 2, or (at your option)
00008    any later version.
00009    
00010    This code is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013    GNU General Public License for more details.
00014 */
00015 
00028 /*
00029  --R-- ROW0 {'1' ,'2' ,'3' ,'A'}
00030  --R-- ROW1 {'4' ,'5' ,'6' ,'B'}
00031  --R-- ROW2 {'7' ,'8' ,'9' ,'C'}
00032  --R-- ROW3 {'*' ,'0' ,'#' ,'D'}
00033             COL0 COL1 COL2 COL3
00034               |    |    |    |
00035               R    R    R    R
00036               |____|____|____|___+vcc
00037  */
00038 
00043 #include <pinio.h>
00044 
00045 #ifdef PORTB_FOR_KEYPAD4X4
00046         #define PORT_KEYPAD4X4  PORTB
00047         #define TRIS_KEYPAD4X4  TRISB
00048 #endif
00049 
00050 #ifdef PORTD_FOR_KEYPAD4X4
00051         #define PORT_KEYPAD4X4  PORTD
00052         #define TRIS_KEYPAD4X4  TRISD
00053 #endif
00054 
00055 
00062 char keypad[4][4]=
00063 {{'1','2','3','A'},
00064  {'4','5','6','B'},
00065  {'7','8','9','C'},
00066  {'*','0','#','D'}};
00067 
00068 
00069 BYTE    buscar_pulso(BYTE TMP)
00070 {
00071     BYTE D;
00072     switch (TMP)
00073     {
00074          case 14:   D=0; break; // tmp=0b00001110
00075          case 13:   D=1; break; // tmp=0b00001101
00076          case 11:   D=2; break; // tmp=0b00001011
00077          case  7:   D=3; break; // tmp=0b00000111
00078          default:   D=4; break; // tmp=0b0000xxxx
00079     }
00080     return D;
00081 }
00082 
00091 char kbd_get(void)
00092 {
00093     byte col=4;
00094     byte kchar=0;
00095     byte row=4;
00096     byte tmp=0;
00097     byte i;
00098    
00099     /* Pone las filas a un valor bajo*/
00100     TRIS_KEYPAD4X4=0x00;
00101     PORT_KEYPAD4X4=0xF0;
00102     TRIS_KEYPAD4X4=0xF0;
00103 
00104 
00105     /* carga el estado actual de las columnas */ 
00106     tmp=PORT_KEYPAD4X4;
00107 
00108     /* Encuantra la columna actual */
00109     col=buscar_pulso(PORT_KEYPAD4X4>>4);
00110     //putc(tmp);
00111     //putc(col);
00112 
00114     // segunda parte                                    //
00115 
00116     /* pongo todas la columnas en alto excepto la columna encontrada */
00117     TRIS_KEYPAD4X4=0x00;
00118     PORT_KEYPAD4X4=(tmp&0xF0);
00119     TRIS_KEYPAD4X4=0x0F;
00120 
00121     /* carga el estado actual de las filas */ 
00122     tmp=(PORT_KEYPAD4X4&0x0F);
00123 
00124     /* Encuantra la fila actual */
00125     row=buscar_pulso(tmp);
00126     //putc(tmp);
00127     //putc(row);
00128 
00129     if((row<4)&&(col<4))   kchar=keypad[row][col];
00130     //uart_getc();
00131     return(kchar);
00132 }
00133 
00141 char kbd_getc(void)
00142 {
00143         unsigned char DAT=TRUE;
00144         char key;
00145 
00146         while(DAT)
00147         {
00148                 key=kbd_get();
00149                 if(key!=0)  DAT=FALSE;
00150         }
00151         return (key);
00152 }
00153 
00154 #define kbd_getchar kbd_getc
00155 
00156 #endif

Generado el Thu Jan 8 00:55:37 2009 para pic-gcc-library por  doxygen 1.5.1