
这是我前几天自己写的一个红绿灯程序,在51单片机上实现的。实现基本的定时红绿灯转换,红绿灯转换随时间变化。可以下载看看,电路图和原程序都有,自己下载代码吧。我没有全部穿上。
仿真示意图如下:
单芯片源程序:
#包括
sbit beir=p1^0;
sbit beiy=p1^1;
sbit beig=p1^2;
sbit nanr=p1^3;
sbit nany=p1^4;
sbit nang=p1^5;
uint a,b,c,type,j,I;
Void Delay(uint x) //延迟
{
乌恰尔一世;
而(x-)for(I=0;我《120;I);
}
Void delay_ms(uint q) //delay
{
uint i,j;
for(I=q;我》0;我-)
for(j=141;j》0;j-);
}
Void shumaguan(uint k) //数码管显示
{
b=k/10;
c=k;
P3=11111101;
P2=SMG _ dw;//段选择代码
delay _ ms(20);//延迟5毫秒
P3=11111110;
P2=SMG _ dw[c];//段选择代码
delay _ ms(20);//延迟5毫秒
}
主()
{
TMOD=0x 01;//将定时器T0设置为工作模式1计时。
TH0=(65536-50000)/256;
TL0=(65536-50000)% 6;
TR0=1;//开始T0计数
ET0=1;//允许T0中断
EX0=1;//允许外部中断0中断
EA=1;//打开中断
IT0=1;//允许外部中断0被边沿触发。
a=10//倒计时10秒
type=1;
while(1){
开关(类型)
{
情况一://东西绿灯,南北红灯亮。
beiR=0;beiY=1;beiG=1;
nanR=1;nanY=1;nanG=0;
舒马关(a);
打破;
情况二://东西闪黄灯,绿灯灭。
如果(a%2!=0)
{
beiR=1;beiY=0;beiG=1;
}
如果(a%2==0)
{
beiR=1;beiY=1;beiG=1;
}
舒马关(a);
打破;
案例三://东西向红灯,南北向绿灯。
beiR=1;beiY=1;beiG=0;
nanR=0;nanY=1;nanG=1;
舒马关(a);
打破;
情况四://南北黄灯闪3次。
如果(a%2!=0)
{
nanR=1;nanY=0;nanG=1;
}
如果(a%2==0)
{
nanR=1;nanY=1;nanG=1;
}
舒马关(a);
打破;
}
}
}









