Red de conocimientos turísticos - Información de alquiler - Escribiendo ****yang 0~999 en el lenguaje C del microcontrolador, ¡es mejor explicarlo en detalle!

Escribiendo ****yang 0~999 en el lenguaje C del microcontrolador, ¡es mejor explicarlo en detalle!

/****Cronómetro con pantalla digital, rango 0~999****/

/****Entorno de hardware predeterminado del programa fuente: 52 microcontroladores, oscilador de cristal de 12 MHz, 3 dígitos **** tubo digital yang, selección de segmento de puerto P0, selección de bits de alto nivel P10~P12 (controlador de transistor NPN), P12 es el tubo digital más alto***/

#include " reg52.h"//include 52 archivo de encabezado

#define TRUE 1 //define booleano '1': verdadero

#define FALSE 0 //define booleano '0': falso

# define uchar unsigned char //define la abreviatura de datos de caracteres sin signo

#define uchar unsigned char #define uint unsigned int //define el nombre corto de datos enteros sin signo

#define th0 0xfc

#define tl0 0x18 //1ms a 12MHz (estado del modo de trabajo del temporizador 1)

#define SEG_Num 3 //Número de tubos digitales

#define SEG_Data P0 //Nigital Interfaz del controlador del segmento de tubo

#define SEG_En P1 //Interfaz del controlador del tubo digital

#define SEG_AllOff (SEG_En&=0xf8) //Apaga todos los tubos digitales (controladores de bits)

if(!t1ms_sec) TimesUpFlag=TRUE; //Si regresa a 0, entonces se acaba el tiempo de 1, se establece TimeUpFlag

}

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

{

TMOD=0x01; //Apaga el temporizador 1, enciende el temporizador 0

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

TH0=th0;

TL0=tl0;//La frecuencia del temporizador 1 es 12MHz

TR0=1;//Iniciar temporizador

ET0=1;//Habilitar temporizador de interrupción 0

EA=1;//Habilitar función de interrupción del sistema

EA=1;//Habilita la función de interrupción del sistema. Función de interrupción del sistema

}

float Pow_Self(float x,uint y)//Función x de y simple autoprogramada, y solo puede ser un entero no negativo

{

suma flotante;

if(x==0 && y==0) return; //0 elevado a la potencia 0 no tiene sentido.

/0 elevado a la potencia 0 no tiene sentido

else if(x==0) sum=0 //Esto es opcional, y! =0 ya contiene x=0, no agregarlo no afectará el resultado, pero sí afectará la velocidad de operación

else if(y==0) sum=1 //Cualquier número excepto el anterior; son todos 1 elevados a la potencia 0

else if( y==1) sum=x // La primera potencia de cualquier número es él mismo

else if(y> 1) ) sum=Pow_Self(x,--y)*x; //llamada recursiva, hasta la potencia

return sum; //devuelve el resultado del cálculo

}

void TimesUpdata() //Función de actualización de hora

{

if(TimesUpFlag) //Si TimesUpFlag es verdadero

{< / p>

Sec=++Sec%TimesEnd; //Sec (segundo) está dentro del rango de TimesEnd (0~999) más 1

TimesUpFlag es verdadero. p> TimesUpFlag=FALSE; //Borrar indicador de TimesUp

}

}

void Display(uint dis_num) //Función de visualización, el contenido de visualización es un entero sin signo data dis_num

{

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

if(DisplayFlag) //si el bit de indicador de visualización es verdadero (single ' bit' ha terminado), luego ejecute la siguiente tarea

{

DisplayFlag=FALSE; //borrar bit de indicador de visualización

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

SEG_AllOff; //Apaga todas las pantallas del digitalizador (controladas por bits)

p>

SEG_Data=SEG_B_List[(dis_num/(uint) ( Pow_Self(10,dis_loca)))%10] //Convierte el contenido mostrado (dis_num) al valor del bit (dis_loca) que necesita se mostrará esta vez y lo enviará al puerto de datos

SEG_En|=1<< dis_loca; // Habilite el controlador de bits que debe mostrarse esta vez

}

}

void main() //función principal

{

SystemInit() //Llamar a la función de inicialización del sistema

while(1 ) //Sistema circular

{

TimesUpdata(); //Llama a la función de actualización de tiempo

Display(Sec); /Llame a la función de visualización para mostrar el contenido: Sec

}

}