您的当前位置:首页正文

单片机交通灯及仿真图

2020-07-25 来源:好走旅游网


/*************************************************************

功能说明:交通灯,红灯30秒,绿灯20秒,黄灯10秒

接线说明:P1控制位选,P2控制段选,P3^2~P3^7控制LED // P2^0控制十位,P2^1控制个位

作 者:合工大 LS

*************************************************************/

#include

unsigned char i,j,t1,t2,count,n;

//sbit x1=P2^0;

//sbit x2=P2^1;

sbit R2=P3^2;

sbit Y2=P3^3;

sbit G2=P3^4;

sbit R1=P3^5;

sbit Y1=P3^6;

sbit G1=P3^7;

unsigned char code

table[]={~0xc0,~0xf9,~0xa4,~0xb0,~0x99,~0x92,~0x82,~0xf8,~0x80,~0x90};

//------------------------延时---------------------------------//

void delay(unsigned int delaytime)

{

while(delaytime--);

}

//------------------------数码管显示---------------------------//

void display(void)

{

{

// x2=0;x1=1;delay(5);P3=table[i/10];P1=table[j/10];delay(500); //显示十位

// x1=0;x2=1;delay(5);P3=table[i%10];P1=table[j%10];delay(500); 个位

//显示

P1=~0x01;delay(5);P2=table[i/10];delay(500);

P1=~0x02;delay(5);P2=table[i%10];delay(500);

P1=~0x10;delay(5);P2=table[j/10];delay(500);

P1=~0x20;delay(5);P2=table[j%10];delay(500);

}

}

void fuzhi()

{

i=t1;

j=t2;

}

//-------------------------初始化--------------------------------//

void t0nit()

{

TMOD=0x01; //00000001,16位定时模式

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

TR0=1;

ET0=1;

}

//------------------------定时1秒--------------------------------//

void t0()interrupt 1

{

count++;

if(count==20)

{

t1--;

t2--;

count=0;

}

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

}

//-----------------------1红亮2绿变黄--------------------------//

void zhuanyi()

{

if(t2==0&&t1!=0)

{

t2=10;

G2=!0;

Y2=!1;

R1=!1;

}

}

//-----------------------2黄变红1红变绿----------------------//

void zhuaner()

{

if(t1==0&&t2==0)

{

t2=30;t1=20;

Y2=!0;

R2=!1;

R1=!0;

G1=!1;

}

}

//------------------------2红亮1绿变黄----------------------//

void zhuansan()

{

if(t1==0&&t2!=0)

{

t1=10;

R2=!1;

G1=!0;

Y1=!1;

}

}

//-------------------------1黄变红2红变绿--------------------//

void zhuansi()

{

if(t1==0&&t2==0)

{

t2=20;t1=30;

Y1=!0;

R1=!1;

R2=!0;

G2=!1;

}

}

main()

{

while(1)

{

t0nit();

R1=!1; Y1=!0;

G1=!0;

R2=!0;

Y2=!0;

//1红亮

G2=!1; //2绿亮

n=0;

t1=30;t2=20;

while(1)

{

fuzhi();

display();

if(t2==0&&t1!=0)zhuanyi(); // 1红亮2绿变黄

if(t1==0&&t2==0) {zhuaner();n++; } //2黄变红1红变绿,n++产生标志位,用于区分两次t1和t2同时为零

if(t1==0&&t2!=0)zhuansan(); // 2红亮1绿变黄

if(n==1)

{

if(t1==0&&t2==0)

{

zhuansi(); n++; //1黄变红2红变绿

}

}

if(n==2) break;

}

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容