Programación de funciones de biblioteca basada en 51
Escaneo de líneas y filas: los cuatro bits altos generan un nivel bajo y los cuatro bits bajos generan un nivel alto. Cuando los cuatro bits inferiores de los datos recibidos no son todos altos, significa que se ha presionado un botón. Luego, en función del valor de los datos recibidos, se juzga qué columna se ha presionado y luego, a su vez, los cuatro bits altos generan un nivel alto y los cuatro bits bajos generan un nivel bajo. Luego, basándose en el valor de los cuatro bits superiores recibidos, se juzga qué fila se presionó, de modo que se pueda determinar qué tecla se presionó.
/****************************************** ********************************
*Nombre de la función
: Pulsación de tecla
*Función
:
Detecta pulsaciones de teclas y lee valores clave.
*Entrada
:
Ninguno
*Salida
:
Ninguno
********************************************* ***** **********************************/
voidKeyDown(no válido)
{
Té
a = 0;
GPIO_KEY = 0x0f
if(GPIO_KEY! =0x0f)// Lee si el botón está presionado.
{
retraso 10 ms(); //Retraso 10 ms para antirrebote.
if(GPIO_KEY!=0x0f)//Comprueba si el teclado está presionado nuevamente.
{
GPIO_KEY = 0X0F
//Columna de prueba
Interruptor (GPIO_KEY)
{
Caso (0X07):
valor clave = 0; roto
Caso (0X0b):
valor clave = 1; Romper;
Caso (0X0d):
valor clave = 2; Romper;
Caso (0X0e):
valor clave = 3; romper;
}
//Línea de prueba
GPIO_KEY = 0XF0
Interruptor (GPIO_KEY)
{
Caso (0X70):
KeyValue = KeyValue roto;
Caso (0Xb0):
valor clave = valor clave+4; ruptura;
Caso (0Xd0):
valor clave = valor clave+8;
Caso (0Xe0): p>
p>
valor clave = valor clave+12;
}
Y ((a & lt50)& amp; & amp(GPIO_KEY! =0xf0))/ /Detección de liberación de botón.
{
retraso 10 ms();
a++; p>}
}