这是我前几天自己写的一个红绿灯程序,在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);

打破;

}

}

}