Programación de direcciones
# include ltreg52.h gt//Incluye el archivo de encabezado y generalmente no es necesario cambiarlo. El archivo de encabezado contiene definiciones de registros de funciones especiales.
#define DataPort P0 //Si se encuentra un puerto de datos en el programa de definición de puerto de datos, será reemplazado por P0.
#Definir puerto de clave P1
sbit latch1=p2^2; //Definir pestillo para habilitar el pestillo del segmento de puerto.
sbit latch2=p2^3; //bit latch
Código de carácter sin firmar dofly_DuanMa[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f , 0x6f,
0x77, 0x7c, 0x39, 0x5e, 0x79, 0x 71}; //Mostrar valor de código de segmento 0~F
Código de carácter sin firmar dofly _Ma Wei []={ 0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f}; // Los tubos digitales correspondientes se iluminan respectivamente, que es el código de bits.
Carácter sin firmar TempData[8]; //Variable global que almacena el valor de visualización.
void DelayUs2x (car t sin firmar); // declaración de función de retardo de clase estadounidense
void DelayMs (car t sin firmar); //retraso de milisegundos
visualización nula (carácter sin firmar FirstBit, carácter sin firmar Num); //Función de visualización del tubo digital
Escaneo de teclas de caracteres sin firmar (nulo); //Escaneo de teclado
Tecla de caracteres sin firmar pro (void);
void Init _ timer 0(void); // inicialización del temporizador
/* -
Funciones principales
- */
Administrador no válido (no válido)
{
Núm de caracteres sin firmar, I, j
Ninguno Temperatura de carácter de símbolo[8];
init _ timer 0();
While (1) //bucle principal
{
num = key pro();
Si (num!=0xff)
{
Si (I lt8)
{
temp [I]= volar _ DuanMa[num]
for(j = 0; j lt= I; j )
TempData[7 -I j]= temp[j ];
}
i;
If(i==9)//Una entrada clave adicional debe ser 8. Se utiliza para borrar la pantalla.
{
I = 0;
for(j = 0; j lt8; J )//Borrar la pantalla
TempData [ j]= 0;
}
}
//Display(0, 8);//Muestra los 8 bits.
//Agregue otros programas que necesiten funcionar todo el tiempo en el bucle principal.
}
}
/* -
Función de retardo del usuario, el parámetro de entrada es el carácter sin signo t y no hay valor de retorno.
Unsigned char es una variable que define caracteres sin signo y su rango de valores es
El oscilador de cristal 12M de 0 ~ 255 utilizado aquí es. Utilice componentes para obtener la latencia exacta y la latencia aproximada.
La longitud es la siguiente: T=tx2 5 uS.
- */
void DelayUs2x(carácter sin firmar t)
{
mientras(-t);
}
/* -
Función de retardo de MS, el parámetro de entrada es el carácter sin signo t y no hay valor de retorno.
Unsigned char es una variable que define caracteres sin signo y su rango de valores es
El oscilador de cristal 12M de 0 ~ 255 utilizado aquí es. Utilice componentes para obtener una latencia precisa.
- */
símbolo de retraso nulo (carácter sin firmar t)
{
mientras(t -)
{
//Retraso de aproximadamente 1 milisegundo
retraso 2x(245);
retraso 2x(245);
}
}
/* -
Función de visualización, utilizada para escanear dinámicamente el tubo digital.
El parámetro de entrada FirstBit indica el primer bit que se mostrará. Por ejemplo, asignar un valor de 2 significa que la visualización comienza desde el tercer tubo digital.
Si ingresa 0, significa comenzar desde la primera pantalla.
Num indica el número de dígitos que se mostrarán. Si necesita mostrar 99 valores de dos dígitos, ingrese 2 para el valor.
- */
visualización vacía (carácter sin firmar FirstBit, carácter sin firmar Num)
{
Carácter estático sin firmar I = 0;
Dataport = 0; //Borrar datos para evitar imágenes fantasma alternas.
pestillo 1 = 1; // pestillo de segmento
pestillo 1 = 0;
DataPort = dofly _马伟[I primer bit] // Acceso código
latch 2 = 1; //bit latch
latch 2 = 0;
puerto de datos = TempData[I] //obtener datos de visualización y código de segmento.
pestillo 1 = 1; // pestillo de segmento
pestillo 1 = 0
i
if(i== Num; )
I = 0;
}
/* -
Subrutina de inicialización del temporizador
- */
void Init_Timer0(void)
{
TMOD | = 0x 01; //Utiliza temporizadores de 1 y 16 bits, utiliza varios temporizadores El "|" El símbolo no se ve afectado cuando se utiliza el convertidor.
//TH0 = 0x 00; //Valor inicial dado
//TL0 = 0x 00;
EA = 1 //Se activa la interrupción total; on
ET0 = 1; //La interrupción del temporizador está activada
TR0 = 1; //El interruptor del temporizador está activado
}
/ * -
Subrutina de interrupción del temporizador
- */
Temporizador no válido 0_isr (no válido) interrupción 1
{ p>
TH0 =(65536-2000)/256; //Reasignar el valor de 2 milisegundos
TL0 =(65536-2000) 256;
Mostrar (0, 8); //Llame al escaneo del tubo digital.
}
/* -
La función de escaneo de claves devuelve el valor de la clave de escaneo.
- */
Unsigned char KeyScan(void) //Función de escaneo de teclado, utilizando escaneo progresivo de filas y columnas.
{
Valor de carácter sin firmar;
KeyPort = 0xf0//Las cuatro posiciones superiores son altas y las cuatro inferiores son bajas.
if(KeyPort!=0xf0)//Indica que se ha presionado una tecla.
{
retraso ms(10); //Para agitar
if(KeyPort!=0xf0)
{//Instrucción Se presiona una tecla.
KeyPort = 0xfe//Detecta la primera línea
if (KeyPort!=0xfe)
{
Puerto clave. 0xf0
val = 0x0e;
while(KeyPort!= 0x Fe);
retraso ms(10); //Ve a agitar
while(KeyPort! = 0x Fe);
Valor de retorno
}
KeyPort = 0xfd//Detecta la segunda línea
if(KeyPort!=0xfd)
{
Puerto clave. 0xf0
val = 0x0d;
while(KeyPort!= 0x FD);
retraso ms(10); //Ve a agitar
while(KeyPort! = 0x FD);
Valor de retorno
}
KeyPort = 0xfb//Detecta la tercera línea
if(KeyPort!=0xfb)
{
Puerto clave. 0xf0
val = 0x0b;
while(KeyPort!= 0x FB);
retraso ms(10); //Ve a agitar
while(KeyPort! = 0x FB);
Valor de retorno
}
KeyPort = 0xf7//Detecta la cuarta línea
if(KeyPort!=0xf7)
{
Puerto clave. 0xf0
val = 0x 07;
while(KeyPort!= 0xf 7);
retraso ms(10); //Ve a agitar
mientras(KeyPort!= 0xf 7);
Valor de retorno
}
}
}
Devolver 0xff
}
/* -
Función de procesamiento de valor clave, devuelve el valor clave.
- */
Clave de carácter sin firmar Pro(void)
{
Interruptor(key scan())
p>
{
Caso 0x7e: Retorno 0; Break; //0 Presione la tecla correspondiente para mostrar el valor del código correspondiente.
Caso 0x7d: Devuelve 1; romper; //1
Caso 0x7b: Devuelve 2; //2
Caso 0x77: Devuelve 3; ; //3
Caso 0xbe: devuelve 4; //4
Caso 0xbd: devuelve 5; //5
Caso 0xbb: Devuelve 6; //6
Caso 0xb7: devuelve 7; //7
Caso 0xde: devuelve 8; >Caso 0xdd: devuelve 9; //9
caso 0xdb: devuelve 10; //a
Caso 0xd7: devuelve 11; p>
Caso 0xee: devuelve 12; //c
Caso 0xed: devuelve 13; //d
Caso 0xeb: devuelve 14;/ /e
Caso 0xe7: devuelve 15; break; //f
Valor predeterminado: devuelve 0xff break;
}
}