闪烁LED小灯的设计 - 图文 联系客服

发布时间 : 星期日 文章闪烁LED小灯的设计 - 图文更新完毕开始阅读d637903d27284b73f242505a

TR0=1; //T0溢出中断请求开启 EA=1; //总中断开启 ET0=1; //T0中断开启

EX0=1; //外部中断INT0开启 IT0=1; //设置开关下降沿有效 EX1=1; //外部中断INT0开启 IT1=1; //设置开关下降沿有效 ns_time=ns_time_green; //东西南北红黄绿灯时间赋值 ew_time=ew_time_red;

ew_time_red=ns_time_green+ns_time_yellow;

if(!a) //a=0,东西显示19开始倒计时 {

ns_time=ew_time_red;

ew_time=ns_time_green+ns_time_yellow; }

while(!a) //a=0,进入循环 {

if(ew_time-5>0) {

while(!flag);

display(ew_time); //flag=1,显示东西19

P1=0xdd; //南北绿灯,东西红灯 flag=0;

23

}

if(ew_time<=5) //东西时间<=5时,南北黄灯闪烁,东西红灯 {

while(!flag); flag=0;

display(ns_time); //从5开始倒计时显示 P1=0xdf; //东西红灯,南北黄灯一亮一灭显示 /*p1_4=0;*/ delay(5000); p1_0=~p1_0;

//南北黄灯所在位,对应取反,实现亮灭变化 delay(5000); } if(ew_time==0)

//如果东西时间为0,赋值a为1,以实现方向转变 a=1; }

if(a) //a=1,东西14开始倒计时 {

ns_time=ew_time_red;

ew_time=ns_time_green+ns_time_yellow; }

while(a) //a=1,进入循环

24

{

if(ns_time-5>0) //南北红灯,东西绿灯 {

while(!flag);

display(ns_time-5); //flag=0,显示东西14 delay(5000); //延时子函数调用

P1=0xeb; //南北红扥个,东西绿灯显示 }

if(ns_time-5<=0) //南北时间<=5时南北红灯,东西黄灯闪烁 {

while(!flag); //flag=0南北显示19开始倒计时 flag=0;

display(ns_time,ns_time);//东西,南北均从5开始倒计时显示 P1=0xfb; //南北红灯,东西黄灯一亮一灭显示 p1_3=~p1_3;

//东西黄灯P1.3位取反,以实现黄灯亮灭变化显示 delay(5000); //延时函数调用 }

if(ns_time==0) //如果南北时间为0赋值a为0 a=0; } }

int t0int()interrupt 1 //t0中断(定时器0中断)子函数

25

{

TH0=0x3c; //定时50ms初值设定 TL0=0xb0;

point--; //20次T0定时次数控制

if(point==0) //如果20次到了,改变显示的东西南北方向的时间 { flag=1; point=20; if(ns_time!=0) ns_time--; if(ew_time!=0)

ew_time--; } }

void int0(void) interrupt 0 //int0中断子函数,发生事故时的情况 { int i,j;

display(00); delay(5000);

for(i=0;i<10;i++)

//利用flag实现东西南北方向红灯均显示亮,对应东西南北方向车流均停止,处理紧急情况 {

for(j=0;j<10;j++)

26