Matriz en lenguaje c del microcontrolador
#includelt;intrins.hgt;
#define uchar unsigned char
#define uint unsigned int
uchar código DSY_CODE[]=
{
0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1 , 0x86, 0x8e, 0x00
};
código uchar KeyCodeTable[]=
{
0x11, 0x12, 0x14, 0x18 , 0x21, 0x22, 0x24, 0x28, 0x41, 0x42, 0x44, 0x48, 0x81, 0x82, 0x84, 0x88
};
void Delay() //retraso, No hace falta digamos, el tiempo de retraso es de aproximadamente 600us
{
uchar i;
for(i=0; ilt; 200; i
);}
uchar Keys_Scan() //Escáner de teclado
{
uchar sCode, kCode, i, k;
P1 = 0xf0; //P1 cuatro bits bajos 0
if ((P1amp; 0xf0)!=0xf0) //leer cuatro datos altos, determinar si se presiona una tecla en función de si hay cero en los cuatro altos
{
Delay(); //si hay una pulsación de tecla, retardo, eliminación de fluctuaciones
if ((P1amp; 0xf0) ! =0xf0) //Determine nuevamente si se presionó un botón para evitar errores de juicio en el paso anterior
{
sCode = 0xfe; lea el valor de la clave
for(k=0;klt;4;k) // teclado matricial 4*4, es necesario escanear cuatro veces
{
P1 = sCode; //La posición más baja de la fila es cero
if ((P1amp; 0xf0)! =0xf0) //Juzga si se presiona una tecla en la primera línea
{
kCode = ~P1; //Si se presiona una tecla, lee el valor de la clave
for(i=0;ilt;16;i) //El número total de valores clave*** serán 16 situaciones posibles
{
if (kCode = = KeyCodeTable[i]) //Lee la tabla de claves y determina el número de tecla presionada
return i //Devuelve el número de clave
}
}
else
sCode = _crol_(sCode, 1
}
}
return -1 ; //si no se presiona ninguna tecla, devuelve el valor de error
}
void main()
{
uchar KeyNO = -1
uchar i, P2_ LED, P3_LED
mientras (1)
{
KeyNO = Keys_Scan(); //escanea el teclado
if(KeyNO != -1) //La tecla ha sido presionada
{
p>P2_LED = 0xff; //Mostrar claro
P3_LED = 0xff;
for(i=0; ilt; =KeyNO; i) //Mostrar programa, 16 Cada LED corresponde a 16 botones, se muestran uno por uno, y el LED correspondiente se muestra según el número del botón
{
if(ilt; 8)
P3_LEDgt;gt ;=1;
más
P2_LEDgt;gt;=1;
}
P3 = P3_LED;
P2 = P2_LED; <
}
}
}
Este es un programa de escaneo de teclas, el puerto P1 está conectado a un teclado Matrix 4 *4, los puertos P2 y P3 están conectados respectivamente a 8 LED, que se encienden con el llenado actual. Cada tecla corresponde a un LED. El LED correspondiente se ilumina. La tabla de códigos del tubo digital, la tabla de códigos es el tubo digital positivo, el tubo digital correspondiente muestra 1-f, el último es todo brillante;
KeyCodeTable es el valor clave del 4*4 teclado matricial, 4*4 Cada vez que se presiona una tecla en el teclado matricial, hay dos bits bajos. Lo contrario es que hay dos bits altos. Estos dos son 4 en los bits bajos y uno en los bits altos. son 16 tipos de teclas en total
Te sugiero que leas el libro sobre el microcontrolador 51, que explica muy claramente el teclado matricial y el tubo digital