新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于AT89C52單片機的交通燈C語言程序

基于AT89C52單片機的交通燈C語言程序

作者: 時間:2016-11-22 來源:網(wǎng)絡(luò) 收藏
如圖,簡易交通燈。
有四個狀態(tài)0,1,2,3
數(shù)碼管為2位7段共陽數(shù)碼管,可以通過修改i,j的值進而修改倒計時的長短。
不當?shù)胤?,敬請批評指正!

圖一:十字路口交通燈

圖二:狀態(tài)0
綠燈:0x42
紅燈:0xbd

圖三:狀態(tài)1
綠燈:0x25
紅燈:0xda

圖四:狀態(tài)2
綠燈:0x90
紅燈:0x6f

圖五:狀態(tài)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; //狀態(tài)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;//狀態(tài)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; //狀態(tài)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;//狀態(tài)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--;
}
}


關(guān)鍵詞: AT89C52單片機交通

評論


技術(shù)專區(qū)

關(guān)閉