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

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

{

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,ew_time-5); //flag=1,显示东西19,南北14 P1=0xdd; //南北绿灯,东西红灯

flag=0; }

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

{

while(!flag);

flag=0;

display(ns_time,ns_time); //东西,南北均从5开始倒计时显示

P1=0xdf; //东西红灯,南北黄灯一亮一灭显示

/*p1_4=0;*/

7

delay(5000);

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

}

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

}

if(a) //a=1,南北显示19开始倒计时,东西14开始倒计时 {

ns_time=ew_time_red;

ew_time=ns_time_green+ns_time_yellow; }

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

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

{

while(!flag);

display(ns_time-5,ns_time); //flag=0,显示南北19,东西14

delay(5000); //延时子函数调用

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

}

8

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

{

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

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;

} }

3.2.2 延时子程序:

. delay(int t) {

while(t--);

}

3.2.3显示子程序:

display(int ew_time,int ns_time) {

char table[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};

9

//共阳极数码显示0-9对应的字型码 char i,a[4];

a[2]=ns_time; //南北时间个位数赋值给a[2] a[3]=ns_time/10; //南北时间十位数赋值给a[3] a[0]=ew_time; //东西时间个位数赋值给a[0] a[1]=ew_time/10; //东西时间个位数赋值给a[1] SM1=0;SM0=0; //串行口工作方式0设定 for(i=3;i>=0;i--) //分别将4位数送到SBUF区域 {

SBUF=table[a[i]];

while(!TI) ; //判断是否发送完一个数据

TI=0; //若发送完,0赋给TI

} }

3.2.4中断程序:

void int0(void) interrupt 0

//int0中断子函数,当紧急情况(救护车等)发生时,对应INT0按键调用此函数 { int i,j;

display(00,00); //显示器显示0000,不再进行倒计时

delay(5000);

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

10