Los 8 tubos digitales del microcontrolador se muestran en un bucle. ¿Cómo hacer que se muestren estáticamente?
#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 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 } } {