发布网友 发布时间:2022-04-27 09:22
共2个回答
热心网友 时间:2023-09-18 14:29
#include "reg51.h"
unsigned int cnt = 0;
//引脚自己改
sbit led__nb_g = p1^0;//南北 绿色
sbit led__nb_r = p1^1;//南北 红色
sbit led__nb_y= p1^2;//南北 *
sbit led__dx_g = p1^3;//东西 绿色
sbit led__dx_r = p1^4;//东西 红色
sbit led__dx_y = p1^5;//东西 *
void main()
{
TMOD = 0x01;
TH0 = (65536 - 10000) / 256; // 定时10ms //晶振:12MHZ
TL0 = (65536 - 10000) % 256;
ET0 = 1;
TR0 = 1;
EA = 1;
led__nb_g = 0;//南北 绿色
led__nb_r = 0;//南北 红色
led__nb_y= 0;//南北 *
led__dx_g = 0;//东西 绿色
led__dx_r = 0;//东西 红色
led__dx_y = 0;//东西 *
while(1)
{
if(cnt<500){led__dx_r=0;led__dx_y=0;led__dx_g = 1;}//绿灯5
else if(cnt<550){led__dx_g = 0;}//闪烁
else if(cnt<600){led__dx_g = 1;}//闪烁
else if(cnt<650){led__dx_g = 0;}//闪烁
else if(cnt<700){led__dx_g = 1;}//闪烁2
else if(cnt<800){led__dx_g = 0; led__dx_y = 1;}//黄灯1
else if(cnt<1400){led__dx_y = 0; led__dx_r = 1;}//红的6
else if(cnt<1450){led__dx_r = 0;}//闪烁
else if(cnt<1500){led__dx_r = 1;}//闪烁
else if(cnt<1550){led__dx_r = 0;}//闪烁
else if(cnt<1600){led__dx_r = 1;}//闪烁2
if(cnt<600){led__nb_r=1;led__nb_y=0;led__nb_g = 0;}//红6
else if(cnt<650){led__nb_r = 0;}//闪烁
else if(cnt<700){led__nb_r = 1;}//闪烁
else if(cnt<750){led__nb_r = 0;}//闪烁
else if(cnt<800){led__nb_r = 1;}//闪烁
else if(cnt<1400){led__nb_r = 0; led__nb_g = 1;}//绿6s
else if(cnt<1600){led__nb_g = 0; led__nb_r = 1;}//黄2
}
}
void Timer0_IRQ(void) interrupt 1
{
TH0 = (655365 - 100000) / 256;// 1M/10000 = 0.01s
TL0 = (655365 - 100000) % 256;
cnt++;//0.01s加一次 cnt==100 为1s
if(cnt>=1600)//整个过程是16s: 5+2+1+6+2=16
{
cnt = 0;
}
}
热心网友 时间:2023-09-18 14:29
这看着像绕口令一样,硬件环境都没说清楚