Red de conocimientos turísticos - Conocimientos sobre calendario chino - Matriz en lenguaje c del microcontrolador

Matriz en lenguaje c del microcontrolador

#includelt;reg52.hgt;

#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