Teclado matricial 4X4, puede definir sus propios números de tecla como 0~9, A~F y programar para mover el número mostrado actualmente hacia la izquierda en el tubo digital de varios dígitos después de presionar la tecla y levantarla.
#include?lt;REGX51.Hgt;
#define?uchar?unsigned?char
#define?uint?unsigned?int
uchar?Bits=0, Diez=0, Cien=0, Mil=0;
uchar?code?ledshow[16]={?0x3F,/*0*/
0x06, /*1*/
0x5B, /*2*/
0x4F, /*3*/
0x66, /*4 */
0x6D, /*5*/
0x7D, /*6*/
0x07, /*7*/
0x7F, /*8*/
0x6F, /*9*/
0x77, /*A*/
0x7C, /*b*/
0x39, /*C*/
0x5E, /*d*/
0x79, /*E*/
0x71 ,/*F*/};?//***Código del tubo Yinji
uchar?code?jz_code[17]={0xff,
0xee, 0xed, 0xeb, 0xe7 ,
0xde, 0xdd, 0xdb, 0xd7,
0xbe, 0xbd, 0xbb, 0xb7,
0x7e, 0x7d, 0x7b, 0x77};?/ / Código de teclado
void?delay(unsigned?char?a) ?//Delay
{
unsigned?char ?i ;
mientras(a--)
for(i=100;igt;0;i--);
}
uchar?kbscan(void)?//Escaneo de teclado
{ unsigned?char?hang, lie, key;
P1=0xf0 ; p>
retraso(5);
mentira=P1;
P1=0x0f;
retraso(5); >hang=P1;
for(key=16;keygt;0;key--)
{
?if(jz_code[key] == (colgar|mentir))?romper;
}
regresar?(clave);
}
void?data_l (void ) ?//Desplazamiento hacia la izquierda
{ uchar?i; static?keytemp=0; i= kbscan(); if(i!=0) { if(!(keytemp==i)) { keytemp =i; Mil=Cien;?//Mil dígitos Cien=Diez; //Cien dígitos Diez=Bits; //Diez dígitos Bits=i-1; //Un dígito} } else?keytemp=0; p>
}
void?display(void)//Pantalla de tubo digital,
Método de depuración: en la función de latido del intervalo del tubo digital; cuatro, baje
{ data_l(); P0=ledshow[Thousand]; 1; P0=ledshow[Cientos]; P2_1=0; P2_1=1; P0=ledshow[Diez]; P2_2=1; =0; retraso(5); P2_3=1;
}
?
void?main(void)
{?
P2=0xff;
mientras(1)
{
mostrar();
}
}