keypad4x4flex.h

Ir a la documentación de este archivo.
00001 #ifndef __KEYPAD4X4FLEX_H__
00002 #define __KEYPAD4X4FLEX_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 #ifndef ROW0
00046         #define ROW0  PIN_B0
00047 #endif
00048 
00049 #ifndef ROW1
00050         #define ROW1  PIN_B1
00051 #endif
00052 
00053 #ifndef ROW2
00054         #define ROW2  PIN_B2
00055 #endif
00056 
00057 #ifndef ROW3
00058         #define ROW3  PIN_B3
00059 #endif
00060 
00061 #ifndef COL0
00062         #define COL0  PIN_B4
00063 #endif
00064 
00065 #ifndef COL1
00066         #define COL1  PIN_B5
00067 #endif
00068 
00069 #ifndef COL2
00070         #define COL2  PIN_B6
00071 #endif
00072 
00073 #ifndef COL3
00074         #define COL3  PIN_B7
00075 #endif
00076 
00083 char keypad[4][4]=
00084 {{'1','2','3','A'},
00085  {'4','5','6','B'},
00086  {'7','8','9','C'},
00087  {'*','0','#','D'}};
00088 
00089 
00090 BYTE    buscar_pulso(BYTE TMP)
00091 {
00092     BYTE D;
00093     switch (TMP)
00094     {
00095          case 14:   D=3; break; // tmp=0b00001110
00096          case 13:   D=2; break; // tmp=0b00001101
00097          case 11:   D=1; break; // tmp=0b00001011
00098          case  7:   D=0; break; // tmp=0b00000111
00099          default:   D=4; break; // tmp=0b0000xxxx
00100     }
00101     return D;
00102 }
00103 
00113 char kbd_get(void)
00114 {
00115     byte col=4;
00116     byte kchar=0;
00117     byte row=4;
00118     byte tmp=0;
00119     byte i;
00120    
00121     /* Pone las filas a un valor bajo*/
00122     output_low(ROW0);
00123     output_low(ROW1);
00124     output_low(ROW2);
00125     output_low(ROW3);
00126 
00127     /* carga el estado actual de las columnas */ 
00128     tmp|=input(COL0)<<3;
00129     tmp|=input(COL1)<<2;
00130     tmp|=input(COL2)<<1;
00131     tmp|=input(COL3)<<0;
00132 
00133     /* Encuantra la columna actual */
00134     col=buscar_pulso(tmp);
00135 
00137     // segunda parte                                    //
00138 
00139     /* pongo todas la columnas en alto excepto la columna encontrada */
00140     if(col==0) output_low(COL0);
00141     if(col==1) output_low(COL1);
00142     if(col==2) output_low(COL2);
00143     if(col==3) output_low(COL3);
00144 
00145     /* carga el estado actual de las filas */ 
00146     tmp=0;
00147     tmp|=input(ROW0)<<3;
00148     tmp|=input(ROW1)<<2;
00149     tmp|=input(ROW2)<<1;
00150     tmp|=input(ROW3)<<0;
00151 
00152     /* Encuantra la fila actual */
00153     row=buscar_pulso(tmp);
00154 
00155     if((row<4)&&(col<4))   kchar=keypad[row][col];
00156 
00157     return(kchar);
00158 }
00159 
00168 char kbd_getc(void)
00169 {
00170         unsigned char DAT=TRUE;
00171         char key;
00172 
00173         while(DAT)
00174         {
00175                 key=kbd_get();
00176                 if(key!=0)  DAT=FALSE;
00177         }
00178         return (key);
00179 }
00180 
00181 #define kbd_getchar kbd_getc
00182 
00183 #endif

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