发布时间 : 星期四 文章闪烁LED小灯的设计 - 图文更新完毕开始阅读
{
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