微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于AT89C52单片机的交通灯C语言程序

基于AT89C52单片机的交通灯C语言程序

时间:11-22 来源:互联网 点击:
如图,简易交通灯

有四个状态0,1,2,3
数码管为2位7段共阳数码管,可以通过修改i,j的值进而修改倒计时的长短。
不当地方,敬请批评指正!

图一:十字路口交通灯

图二:状态0
绿灯:0x42
红灯:0xbd

图三:状态1
绿灯:0x25
红灯:0xda

图四:状态2
绿灯:0x90
红灯:0x6f

图五:状态3
绿灯:0x2c
红灯:0xd3


#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit ge=P0^6;
sbit shi=P0^7;
sbit d0=P0^0;
sbit d1=P0^1;
sbit d2=P0^2;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=113;y>0;y--);
}
void shu0()
{
d0=0;
d1=0;
d2=0;
delay(1);
d0=1;
d1=0;
d2=0;
delay(1);
d0=0;
d1=1;
d2=0;
delay(1);
d0=1;
d1=1;
d2=0;
delay(1);
d0=0;
d1=0;
d2=1;
delay(1);
d0=1;
d1=0;
d2=1;
delay(1);
_nop_();
_nop_();
_nop_();
delay(1);
}
void shu1()
{
d0=1;
d1=0;
d2=0;
delay(1);
d0=0;
d1=1;
d2=0;
delay(1);
_nop_();
_nop_();
_nop_();
delay(1);
_nop_();
_nop_();
_nop_();
delay(1);
_nop_();
_nop_();
_nop_();
delay(1);
_nop_();
_nop_();
_nop_();
delay(1);
_nop_();
_nop_();
_nop_();
delay(1);
}
void shu2()
{
d0=0;
d1=0;
d2=0;
delay(1);
d0=1;
d1=0;
d2=0;
delay(1);
d0=1;
d1=1;
d2=0;
delay(1);
d0=0;
d1=0;
d2=1;
delay(1);
d0=0;
d1=1;
d2=1;
delay(1);
_nop_();
_nop_();
_nop_();
delay(1);
_nop_();
_nop_();
_nop_();
delay(1);
}
void shu3()
{
d0=0;
d1=0;
d2=0;
delay(1);
d0=1;
d1=0;
d2=0;
delay(1);
d0=0;
d1=1;
d2=0;
delay(1);
d0=1;
d1=1;
d2=0;
delay(1);
d0=0;
d1=1;
d2=1;
delay(1);
_nop_();
_nop_();
_nop_();
delay(1);
_nop_();
_nop_();
_nop_();
delay(1);
}
void shu4()
{
d0=1;
d1=0;
d2=0;
delay(1);
d0=0;
d1=1;
d2=0;
delay(1);
d0=1;
d1=0;
d2=1;
delay(1);
d0=0;
d1=1;
d2=1;
delay(1);
_nop_();
_nop_();
_nop_();
delay(1);
_nop_();
_nop_();
_nop_();
delay(1);
_nop_();
_nop_();
_nop_();
delay(1);
}
void shu5()
{
d0=0;
d1=0;
d2=0;
delay(1);
d0=0;
d1=1;
d2=0;
delay(1);
d0=1;
d1=1;
d2=0;
delay(1);
d0=1;
d1=0;
d2=1;
delay(1);
d0=0;
d1=1;
d2=1;
delay(1);
_nop_();
_nop_();
_nop_();
delay(1);
_nop_();
_nop_();
_nop_();
delay(1);
}
void shu6()
{
d0=0;
d1=0;
d2=0;
delay(1);
d0=0;
d1=1;
d2=0;
delay(1);
d0=1;
d1=1;
d2=0;
delay(1);
d0=0;
d1=0;
d2=1;
delay(1);
d0=1;
d1=0;
d2=1;
delay(1);
d0=0;
d1=1;
d2=1;
delay(1);
_nop_();
_nop_();
_nop_();
delay(1);
_nop_();
_nop_();
_nop_();
delay(1);
}
void shu7()
{
d0=0;
d1=0;
d2=0;
delay(1);
d0=1;
d1=0;
d2=0;
delay(1);
d0=0;
d1=1;
d2=0;
delay(1);
_nop_();
_nop_();
_nop_();
delay(1);
_nop_();
_nop_();
_nop_();
delay(1);
_nop_();
_nop_();
_nop_();
delay(1);
_nop_();
_nop_();
_nop_();
delay(1);
}
void shu8()
{
d0=0;
d1=0;
d2=0;
delay(1);
d0=1;
d1=0;
d2=0;
delay(1);
d0=0;
d1=1;
d2=0;
delay(1);
d0=1;
d1=1;
d2=0;
delay(1);
d0=0;
d1=0;
d2=1;
delay(1);
d0=1;
d1=0;
d2=1;
delay(1);
d0=0;
d1=1;
d2=1;
delay(1);
}
void shu9()
{
d0=0;
d1=0;
d2=0;
delay(1);
d0=1;
d1=0;
d2=0;
delay(1);
d0=0;
d1=1;
d2=0;
delay(1);
d0=1;
d1=1;
d2=0;
delay(1);
d0=1;
d1=0;
d2=1;
delay(1);
d0=0;
d1=1;
d2=1;
delay(1);
_nop_();
_nop_();
_nop_();
delay(1);
}
void display(uchar p)
{
switch(p)
{
case 0:shu0();break;
case 1:shu1();break;
case 2:shu2();break;
case 3:shu3();break;
case 4:shu4();break;
case 5:shu5();break;
case 6:shu6();break;
case 7:shu7();break;
case 8:shu8();break;
case 9:shu9();break;
}
}
void chushihua()
{
ge=0;
shi=0;
}
void main()
{
uchar p,m,n,i,j;
chushihua();
i=9; //状态0
j=3;
while(1)
{
n=76;
while(n)
{
n--;
P1=0x42;
P2=0xbd;
P3=0x00;
ge=1;
display(i);
ge=0;
shi=1;
display(j);
shi=0;
}
if(i==0x00)
{
i=0x0a;
j=j-1;
}
while(j==0x00&&i<=0x03)
{
while(1)
{
m=40;
while(m)
{
m--;
P1=0x00;
P2=0xbd;
P3=0x42;
ge=1;
display(i);
ge=0;
shi=1;
display(j);
shi=0;
}
p=40;
while(p)
{
p--;
P1=0x00;
P2=0xbd;
P3=0x00;
ge=1;
display(i);
ge=0;
shi=1;
display(j);
shi=0;
}
if(j==0x00&&i==0x00)
{
i=9;//状态1
j=2;
while(1)
{
n=76;
while(n)
{
n--;
P1=0x25;
P2=0xda;
P3=0x00;
ge=1;
display(i);
ge=0;
shi=1;
display(j);
shi=0;
}
if(i==0x00)
{
i=0x0a;
j=j-1;
}
while(j==0x00&&i<=0x03)
{
while(1)
{
m=40;
while(m)
{
m--;
P1=0x00;
P2=0xda;
P3=0x25;
ge=1;
display(i);
ge=0;
shi=1;
display(j);
shi=0;
}
p=40;
while(p)
{
p--;
P1=0x00;
P2=0xda;
P3=0x00;
ge=1;
display(i);
ge=0;
shi=1;
display(j);
shi=0;
}
if(j==0x00&&i==0x00)
{
i=9; //状态2
j=3;
while(1)
{
n=76;
while(n)
{
n--;
P1=0x90;
P2=0x6f;
P3=0x00;
ge=1;
display(i);
ge=0;
shi=1;
display(j);
shi=0;
}
if(i==0x00)
{
i=0x0a;
j=j-1;
}
while(j==0x00&&i<=0x03)
{
while(1)
{
m=40;
while(m)
{
m--;
P1=0x00;
P2=0x6f;
P3=0x90;
ge=1;
display(i);
ge=0;
shi=1;
display(j);
shi=0;
}
p=40;
while(p)
{
p--;
P1=0x00;
P2=0x6f;
P3=0x00;
ge=1;
display(i);
ge=0;
shi=1;
display(j);
shi=0;
}
if(j==0x00&&i==0x00)
{
i=9;//状态3
j=2;
while(1)
{
n=76;
while(n)
{
n--;
P1=0x2c;
P2=0xd3;
P3=0x00;
ge=1;
display(i);
ge=0;
shi=1;
display(j);
shi=0;
}
if(i==0x00)
{
i=0x0a;
j=j-1;
}
while(j==0x00&&i<=0x03)
{
while(1)
{
m=40;
while(m)
{
m--;
P1=0x00;
P2=0xd3;
P3=0x2c;
ge=1;
display(i);
ge=0;
shi=1;
display(j);
shi=0;
}
p=40;
while(p)
{
p--;
P1=0x00;
P2=0xd3;
P3=0x00;
ge=1;
display(i);
ge=0;
shi=1;
display(j);
shi=0;
}
if(j==0x00&&i==0x00)
{
return;
}
i--;
}
}
i--;
}
}
i--;
}
}
i--;
}
}
i--;
}
}
i--;
}
}
i--;
}
}
i--;
}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top