Programación de MCU: después de encender el sistema, las luces verdes este y oeste se encienden durante 12 segundos, luego la luz amarilla se enciende durante 3 segundos, la luz roja se enciende durante 15 segundos y la luz verde se enciende en ciclo
#includelt;reg51.hgt;
#define uint unsigned int
#define uchar unsigned char
#define red (~ 0x01)
#define amarillo (~0x02)
#define verde (~0x04)
#define izquierda (~0x08)
#define nbred (~0x10)
#define nbamarillo (~0x20)
#define nbgreen (~0x40)
#define nbleft (~0x80)
uint num2;
uchar dx_js, nb_js;
uchar zt ?
uchar código dxcz[]={0, 12 ,3,15,15-12,};
código uchar nbcz[]={0,15,15-12,12, 3,};
código uchar tab1[ ]={0, 12, 3, 12, 3,};
código uchar tab2[]={0,
0xFFamp;greenamp;nbred,
0xFFamp;amarilloamp;nbred,
0xFFamp;redamp;nbverde,
0xFFamp;redamp;nbamarillo,
};
sbit D0=P2^0;
bit D1=P2^1;
bit D2=P2^2;
bit D3=P2^3; p>
sbit D2=P2^2;
sbit D3=P2^3;
p>
uchar ds[4];
uchar code tab[]={ 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, };
//Pantalla de tubo digital
void smxs(){
static uchar a;
if(agt;3)a=0;
P2amp;=0xf0;
P0=tab[ds[a]];
switch(a){
caso 0: D0=1;
caso 1: D1; =1;
caso 2: D2=1;
caso 3: D3= 1; p> a ;
}
void init() //Función de inicialización
{ ? TMOD=0x01; 65536-1000)/256;
TL0=(65536-1000)256;
EA=1;
ET0=1;
}
void main()//función principal
{
init()
zt=1 ; p>
núm2=0;
<p> dx_js=dxcz[zt];
nb_js=nbcz[zt];
TR0=1
mientras(1){
P1=tab2[zt];
ds[0]=dx_js/10;
ds[1]=dx_js10;
ds[2 ]=nb_js/10;
ds[3]=nb_js10;
}
}
void timer0() interrupción 1/ /Temporizador, implementar cuenta atrás
{
TH0=(65536-1000)/256
TL0=(65536-1000)256;
if( num2==1000){//1s
num2=0;
dx_js--; //Cuenta regresiva
nb_js--;
if(dx_js==0||nb_js==0){//A 0
zt; //El estado aumenta en 1
if(zt ==5){
zt=1;
}
dx_js=dxcz[zt]; //Reiniciar tiempo
nb_js =nbcz[zt];
}
}
smxs();
}
De repente si Si descubre que el software de simulación se bloquea, no tomará una captura de pantalla del diagrama en ejecución. En su lugar, tome un diagrama esquemático e intente nuevamente.