基于AT89C52單片機的交通燈C語言程序
有四個狀態(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--;
}
}
數(shù)碼管為2位7段共陽數(shù)碼管,可以通過修改i,j的值進而修改倒計時的長短。
不當?shù)胤?,敬請批評指正!
#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)
{
}
void shu0()
{
}
void shu1()
{
}
void shu2()
{
}
void shu3()
{
}
void shu4()
{
}
void shu5()
{
}
void shu6()
{
}
void shu7()
{
}
void shu8()
{
}
void shu9()
{
}
void display(uchar p)
{
}
void chushihua()
{
}
void main()
{
}
評論