Ejercicio basado en el microcontrolador AT89C51 Presione los 16 teclados matriciales para mostrar los cuadrados del 1 al 16 en el tubo digital en secuencia.
Si presiona el primero, mostrará 1, y el segundo mostrará 4...
#include?lt;REGX51.Hgt;
#define?uchar?unsigned?char
#define?uint?unsigned?int
uchar?Bits=0, Diez=0, Cien=0, Mil=0;
uchar?code?ledshow[10]={?0x3F,/*0*/
0x06, /*1*/
0x5B, /*2*/
0x4F, /*3*/
0x66, /*4 */
0x6D, /*5*/
0x7D, /*6*/
0x07, /*7*/
0x7F, /*8*/
0x6F, /*9*/} ;?//***Código del tubo Yinji
uchar?code?jz_code[17]= { 0xff,
0xee, 0xed, 0xeb, 0xe7,
0xde, 0xdd, 0xdb, 0xd7,
0xbe, 0xbd, 0xbb, 0xb7,
p>
0x7e, 0x7d, 0x7b, 0x77};?//Código de teclado
uint?code?Data_square[]={0, 1, 4, 9, 16,
?25, 36, 49, 64,
?81, 100, 121, 144,
?169, 196, 225, 256} ?//Cuadrado
void?delay(unsigned?char?a) ?//Retraso
{
unsigned?char?i ;
p>while(a--)
for(i=100;igt;0;i--);
} p>
uchar?kbscan(void)?//escaneo de teclado
{ unsigned?char?hang, lie, key;
P1=0xf0;
retraso(5);
mentira=P1;
P1=0x0f;
retraso(5);
colgar= P1;
for(clave=16; keygt; 0; clave--)
{
?if(jz_code[clave] ==(colgar| mentira))?romper;
}
regresar?(clave);
}
void?data_bcd (void) ?/ /Resultado después de descomponer el cuadrado
{ uchar?i; i= kbscan(); if(i!=0) { Bits=Data_square[i]10; =(Data_square[i ]100)/10; //Diez dígitos Cien=(Data_square[i]1000)/100; //Cien dígitos Mil=Datos_cuadrado[i]/1000;?//Mil dígitos}
}
void?display(void)//Pantalla de tubo digital, método de depuración: intervalo de tubo digital
¿En la función de paliza? (5); cuatro, baje
{ data_bcd(); P0=ledshow[Thousand]; Cien]; P2_1=0; retraso(5); P0=ledshow[Diez]; P2_2=0; P2_2=1; ); P2_3=1;
}
?
void?main(void)
{?
P2=0xff;
mientras(1)
{
mostrar();
}
}