Utilizando el microcontrolador 51 para diseñar un tubo de pantalla digital LED de 3 dígitos como cronómetro 00.0-99.0 Diseñe el circuito y el programa en lenguaje C.
#include "STC12C54.H"
#define uchar unsigned char
#define uint unsigned int
#define dataport P1/ /P1 impulsa directamente los ocho ánodos del tubo digital
sbit wei1=P3^3; //Hay tres pines más conectados a los cátodos de los tres triodos que impulsan el tubo digital
sbit wei2= P3^4;
sbit wei3=P3^5;
uint a=0; // Contando el número de interrupciones, una vez son 50 ms, 20 veces es 1 segundo
//***Código de siete segmentos del tubo Yinnixie
uchar TABLE[10]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07 , 0x7f, 0x6f};
//Retraso de subrutina
void delay1ms(uint t)
{
uint i, j, k;
for(i=t;igt;0;i--)
for(j=15;jgt;0;j--)
for(k=27; kgt; 0; k--);
}
//Mostrar subrutina
void display(uint n) p>
{
uchar a1, a2, a3
a1=n/10010
a2=n/1010;
a3=n10 ;
wei1=1;
dataport=TABLE[a1];
retraso1ms(1);
wei1=0;
dataport=0x80|TABLE[a2]; //Varios puntos decimales aquí
delay1ms(1);
wei3=1;
dataport=TABLE[a3];
delay1ms(1);
wei3=0;
}
void init(void )
{
TMOD=0X01;
TH0=(655536-50000)/256 //Tiempo 50 ms
TL0= (655536-50000)256;
EA=1;
ET0=1;
TR0=1;
P1M0=0 ;
P1M1=0xff; //El puerto P1 está configurado como salida push-pull, con una fuerte capacidad de conducción
P3M0=0;
P3M1=0x38; //P3 .3P3.4 El puerto P3.5 está configurado como salida push-pull
}
void main(void)//programa principal p>
{
init(); //Configuración del estado inicial
while(1)
{
display( a/2); //Mostrar valor de conteo, en décimas de segundos
}
}
void timer0(void)interrupt 1//Interrumpir subrutina
{
TH0=(655536-50000)/256;
TL
0=(655536-50000)256;
a
if (a==1980)a=0; //1980 veces son 99 segundos
}