200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 单片机交通灯灯c语言程序 51单片机控制交通灯原理图及C语言程序

单片机交通灯灯c语言程序 51单片机控制交通灯原理图及C语言程序

时间:2020-11-11 17:19:46

相关推荐

单片机交通灯灯c语言程序 51单片机控制交通灯原理图及C语言程序

Proteus

仿真原理图:

Keil C源程序:

#include

#define uchar unsigned char

#define uint unsigned int

sbit RED_DONGXI = P1^0;//南北方向红灯亮

sbit YELLOW_DONGXI = P1^1;//南北方向黄灯亮

sbit RED_NANBEI = P1^3;//东西方向红灯亮

sbit GREEN_DONGXI = P1^2;//南北方向绿灯亮

sbit YELLOW_NANBEI = P1^4;//东西方向黄灯亮

sbit GREEN_NANBEI = P1^5;//东西方向绿灯亮

sbit DXweixuan1 = P1^6;//南北方向数码管位选1

sbit DXweixuan2 = P1^7;//南北方向数码管位选2

sbit NBweixuan1 = P3^0;//东西方向数码管位选1

sbit NBweixuan2 = P3^1;//东西方向数码管位选2

sbit L1=P3^5;

sbit L2=P3^6;

sbit L3=P3^7;

uint aa, bai,shi,ge,bb;

uint shi1,ge1,shi2,ge2;

uint code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uint code table1[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};

void delay(uint z);

void init(uint a);

void display(uint shi1,uint ge1,uint shi2,uint ge2);

void xtimer0();

void init1();

void init2();

void init3();

void init4();

void init5();

void xint1();

void xint0();

void LED_ON();

void LED_OFF();

void main()

{

P0=0xFF;

P1=0xFF;

P2=0x00;

P3=0xFF;

EA=1;

EX0=1;

IT0=0;

init1();

while(1)

{

init2();//第2个状态

init3(); //第3个状态

init4(); //第4个状态

init5();//第5个状态

}

}

void init1()//第一个状态:东西、南北方向均亮红灯5S

{

uint temp;

temp=5;

TMOD=0x01;

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

EA=1;

ET0=1;

TR0=1;

while(1)

{

} } RED_DONGXI=0; //第一个状态东西、南北均亮红灯5S RED_NANBEI=0; GREEN_DONGXI=1; GREEN_NANBEI=1; YELLOW_DONGXI=1; YELLOW_NANBEI=1; if(aa==20)//定时20*50MS=1S { aa=0; temp--; } shi1=shi2=temp/10; ge1=ge2=temp%10; if(temp==0) { temp=5; break; } display(ge1,shi1,ge2,shi2);

void init2()//第二个状态:东西亮红灯30S~5S、南北亮绿灯25~0S; {

uint temp;

temp=26;

TMOD=0x01;

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

EA=1;

ET0=1;

TR0=1;

while(1)

{

RED_DONGXI=1;

RED_NANBEI=0;

GREEN_DONGXI=0;

GREEN_NANBEI=1;

YELLOW_DONGXI=1;//第二个状态:东西亮绿灯25S、南北亮红灯 YELLOW_NANBEI=1;

if(aa==20)//定时20*50MS=1S

{

aa=0;

temp--;

shi1=(temp+5)/10;

ge1=(temp+5)%10;

shi2=temp/10;

ge2=temp%10;

if(temp==0)

{

temp=26;

break;

}

}

display(ge1,shi1,ge2,shi2);

}

}

void init3() //第三个状态:东西绿灯变为黄灯闪5次、南北亮红灯5S {

uint temp;

temp=6;

TMOD=0x01;

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

EA=1;

ET0=1;

TR0=1;

while(1)

{

RED_NANBEI=0;

GREEN_DONGXI=1;

} } if(aa==20)//定时20*50MS=1S { aa=0; temp--; YELLOW_DONGXI=~YELLOW_DONGXI; shi1=temp/10; shi2=shi1; ge1=temp%10; ge2=ge1; } if(temp==0) { temp=6; break; } display(ge1,shi1,ge2,shi2);

void init4()//第四个状态:东西亮绿灯25~0S,南北方向亮红灯30~5S; {

uint temp;

temp=26;

TMOD=0x01;

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

EA=1;

ET0=1;

TR0=1;

while(1)

{

RED_DONGXI=0;

RED_NANBEI=1;

}

} YELLOW_DONGXI=1;//第一个状态东西、南北均亮红灯5S GREEN_NANBEI=0; if(aa==20) { aa=0; temp--; shi1=temp/10; shi2=(temp+5)/10; ge1=temp%10; ge2=(temp+5)%10; if(temp==0) { temp=26; break; } } display(ge1,shi1,ge2,shi2);

void init5()//第五个状态:东西亮红灯、南北绿灯闪5次转亮黄灯5S {

uint temp;

temp=6;

TMOD=0x01;

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

EA=1;

ET0=1;

TR0=1;

while(1)

{

RED_NANBEI=1;

RED_DONGXI=0;

GREEN_DONGXI=1;

GREEN_NANBEI=1;

if(aa==20)

{

aa=0;

temp--;

YELLOW_NANBEI=~YELLOW_NANBEI;

shi1=temp/10;

shi2=shi2;

ge1=temp%10;

ge2=ge1;

if(temp==0)

{

temp=6;

break;

}

}

display(ge1,shi1,ge2,shi2);

}

}

void display(uint shi1,uint ge1,uint shi2,uint ge2) {

DXweixuan1=0;

DXweixuan2=1;

NBweixuan1=1;

NBweixuan2=1;

P0=table[ge1];

delay(5);

DXweixuan1=1;

DXweixuan2=0;

NBweixuan1=1;

NBweixuan2=1;

P0=table[shi1];

delay(5);

DXweixuan1=1;

DXweixuan2=1;

NBweixuan1=0;

NBweixuan2=1;

P0=table[ge2]; delay(5);

DXweixuan1=1; DXweixuan2=1; NBweixuan1=1; NBweixuan2=0; P0=table[shi2]; delay(5);

}

void xint0() interrupt 0 {

RED_NANBEI=0; RED_DONGXI=0; GREEN_NANBEI=1; GREEN_DONGXI=1; YELLOW_NANBEI=1; YELLOW_DONGXI=1; P0=0x00;

NBweixuan1=0; NBweixuan2=0; DXweixuan1=0; DXweixuan2=0; delay(2);

return ;

}

void xint1() interrupt 2 {

RED_NANBEI=1; RED_DONGXI=1; GREEN_NANBEI=0; GREEN_DONGXI=0; YELLOW_NANBEI=1; YELLOW_DONGXI=1; P0=0x00;

NBweixuan1=0; NBweixuan2=0; DXweixuan1=0; DXweixuan2=0; delay(2);

return ;

}

void xtimer0() interrupt 1 {

TH0=(65535-50000)/256;

TL0=(65535-50000)%256; aa++;

}

void delay(uint z) {uint x,y;

for(x=0;x

for(y=0;y

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。