Red de conocimientos turísticos - Conocimientos sobre calendario chino - Los 8 tubos digitales del microcontrolador se muestran en un bucle. ¿Cómo hacer que se muestren estáticamente?

Los 8 tubos digitales del microcontrolador se muestran en un bucle. ¿Cómo hacer que se muestren estáticamente?

/***Microcontrolador 52, oscilador de cristal de 12 MHz, tubo digital de cátodo *** de 8 bits, selección de segmento de puerto P0, selección de bits de nivel bajo del puerto P2, bit más alto P20, bit más bajo P27***/

#include

#define uchar unsigned char

#define uint unsigned int

#define TRUE 1

# define FALSE 0

#define th0 0xfe

#define tl0 0x0c /500us a 12MHz (estado del modo de funcionamiento del temporizador 1)

#define DisTimeAt500usCount 5 // Tiempo de visualización digital de un solo "bit", frecuencia de actualización digital f=1/(4t), donde t es el tiempo de visualización digital de un solo "dígito", unidad s, frecuencia f unidad Hz

#define SEG_Num 8 / /Número digital de tubos

Código de muestra LoveYouList[SEG_Num]={0x38,0x3f,0x3e,0x79,0x40,0x6e,0x3f,0x3e} //LOVE-YOU

#; define SEG_Data P0 //Interfaz del controlador de segmento de tubería digital

#define SEG_ En P2 //Interfaz del controlador de bits de tubería digital

#define SEG_AllOff SEG_En=0xff //Deshabilita todas las tuberías digitales (bits Driver)

bit DisplayFlag; //Mostrar bit de bandera

void Timer0() interrupción 1 //Función de interrupción Timer0

{

static uchar t500us; //definir el registro de recuento del temporizador t500us de la variable estática

TL0=tl0;

TH0=th0; //reasignar el valor del temporizador de 1 ms

t500us = ++t500us%; //reasigna el valor del temporizador de 1ms

t500us=++t500us%; //reasigna el valor del temporizador de 1ms

t500us=++t500us DisTimeAt500usCount; al valor de conteo, luego limite el rango de conteo a 0~(DisTimeAt500usCount-1)

if(! t500us) DisplayFlag=TRUE; //si el valor del temporizador vuelve a 0, significa que el valor del conteo ha alcanzado el único 'dígito' del tiempo de visualización ((DisTimeAt500usCount-1)

if(! t500us ) DisplayFlag=TRUE; //si el valor del temporizador vuelve a 0, significa que el valor del conteo ha alcanzado el único 'dígito' del tiempo de visualización (!).DisTimeAt500usCount),

DisplayFlag está configurado

}

void SystemInit() //Función de inicialización del sistema

{

TMOD=0x01; 1, enciende el temporizador 0, trabaja en modo 1 (temporizador de 16 bits)

TH0=th0;

TL0=tl0; //Instala el valor inicial de temporización (1 ms, 12 MHz)

TR0=1; //Iniciar tiempo

ET0=1; //Permitir interrupciones desde el temporizador 0

EA=1;

}

void Display() //Función de visualización

{

static dis_loca; //Definir la posición de visualización de la variable estática

p>

dis_loca=++dis_loca%SEG_Num; //Primero agrega 1 a la posición de visualización y luego limita la variable 0~(SEG_Num-1)

SEG_All_Num=1; 1;//Habilitar interrupción del sistema

void

SEG_AllOff; //Apagar todas las pantallas digitales (controlador de bits)

SEG_Data=LoveYouList[dis_loca]; / Convierte el contenido del bit de visualización en código y envíalo al puerto de datos

SEG_En&=~(1<

}

void main() //función principal

{

SystemInit() //llamar a SystemInit(); Función SystemInit

while(1) //sistema de bucle

{

if( DisplayFlag) //Si el bit de bandera de visualización es verdadero (visualización de un solo 'bit' el tiempo ha terminado), luego realice las siguientes tareas

{

DisplayFlag=FALSE; // Borrar el indicador de visualización

Display(); función de visualización

}

}

{

/div>