Hola myesid. Con respecto a tú pregunta, necesito que me especifiques un poco más algunas cosas para que pueda ayudarte.
La primera es que me confirmes la librería que estás utilizando. ¿es la que trae en sus librerías CCS?. ¿O es esta otra?.
- Código: Seleccionar todo
/******************************************************************************
* *
* AUTOR : QuijotescoXp *
* *
* EMAIL : lrecueo1@alumno.uned.es *
* *
* WEB : www.aquihayapuntes.com *
* *
* FECHA : 08/11/09 *
* *
* VERSIÓN : 1.2 *
* *
* LICENCIA : GPL *
* *
* DESCRIPCIÓN: Librería para el manejo de un teclado matricial 4x4. *
* *
* REVISIONES : ( 08/11/09 por Biblioman ) Se añade la posibilidad utilizar *
* *
* indistintamente el Puerto B o D. *
* *
******************************************************************************/
// Para el uso del puerto B se descomenta la siguiente línea
//#define use_port_B TRUE
#if defined use_port_B
#byte port = 6
#bit ROW_3 = 0x06.7 // Identificadores de bits puerto B
#bit ROW_2 = 0x06.6
#bit ROW_1 = 0x06.5
#bit ROW_0 = 0x06.4
#else
#byte port = 8
#bit ROW_3 = 0x08.7 // Identificadores de bits puerto D
#bit ROW_2 = 0x08.6
#bit ROW_1 = 0x08.5
#bit ROW_0 = 0x08.4
#endif
#if defined use_port_B
#define set_tris_port( x ) ( set_tris_b( x ) )
#else
#define set_tris_port( x ) ( set_tris_d( x ) )
#endif
/* DEFINICIÓN DE CONSTANTES SIMBÓLICAS ****************************************/
#define COLUMN_0 1
#define COLUMN_1 2
#define COLUMN_2 4
#define COLUMN_3 8
#define NUMBER_COLUMNS 4
#define NUMBER_ROWS 4
#define DEBOUNCER_DELAY 30
/* DEFINICIÓN DE CONSTANTES ************************************/
char const matrixKeyBoard[ NUMBER_ROWS ][ NUMBER_COLUMNS ] =
{
/* Disposición del teclado */
'1', '2', '3', 'F',
'4', '5', '6', 'E',
'7', '8', '9', 'D',
'A', '0', 'B', 'C',
};
/* DEFINICIÓN DE VARIABLES LOCALES *******************************/
static unsigned column;
/* FUNCIONES PÚBLICAS *******************************************/
void mkd_int( void )
{
set_tris_port( 0xF0 ); /* 4 MSB como entrada, 4 LSB como salida */
port = 0;
column = 0;
}
char mkd_keyPress( void )
{
static char keyPress = '\0';
/* Se ha de esperar aprox. 30 ms para evitar el rebote del teclado */
delay_ms( DEBOUNCER_DELAY );
/* Se comienza activando una columna */
switch( column )
{
case 0:
/* Se pone a 1 la columna 0 */
port = COLUMN_0;
break;
case 1:
/* Se pone a 1 la columna 1 */
port = COLUMN_1;
break;
case 2:
/* Se pone a 1 la columna 2 */
port = COLUMN_2;
break;
case 3:
/* Se pone a 1 la columna 3 */
port = COLUMN_3;
break;
}
/* Se rastrea si hay pulsación en la columna activa */
if( ROW_0 == 1 )
{
keyPress = matrixKeyBoard[ 0 ][ column ];
}
else if( ROW_1 == 1 )
{
keyPress = matrixKeyBoard[ 1 ][ column ];
}
else if( ROW_2 == 1 )
{
keyPress = matrixKeyBoard[ 2 ][ column ];
}
else if( ROW_3 == 1 )
{
keyPress = matrixKeyBoard[ 3 ][ column ];
}
if( 3 == column )
{
/* Se completo un ciclo, reiniciamos nuevamente */
column = 0;
}
else
{
column++;
}
return( keyPress );
}
Si estás siguiendo los post del foro verás que hay varios ejemplos en danza con diferentes librerías para el teclado y no se muy bien cual has utilizado en tu ejemplo. Lo del nombre es lo de menos, porque cada usuario le ha puesto el nombre que ha querido. Entiendo que quieres utilizarla en un teclado 4X4. Cuando tenga todas estas cosas claras quizás mueva estas respuestas a un nuevo tema, para no volver a liarnos.
A parte de esperar a que me confirmes la librería que estas utilizando, el código que has puesto lo veo correcto.
Lo ideal para saber donde está el problema es que me adjuntes el DSN de proteus para que yo lo pueda simular.
myesid escribió:te agradeceria enormemente me colaboraras porque me estoy estancando en mi aprender
Cuenta con ello y espero que no te desanimes,
Un saludo