基于51单片机的交通灯实验

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

程序

#include

#define uint unsigned int

#define uchar unsigned char

sbit DX_R=P1^0; //东西方向红黄绿灯

sbit DX_Y=P1^1;

sbit DX_G=P1^2;

sbit NB_R=P1^3; //南北方向

sbit NB_Y=P1^4;

sbit NB_G=P1^5;

uchar code du_code[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F};

// 0~9(共阳数码管)

uchar num;

uchar S20=20, S15=15, S5=5;

bit flag=0;

void delayms(uint x) //延时程序

{

uint y;

for(;x>0;x--)

for(y=110;y>0;y--);

}

void initial() //定时器50ms

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

}

void state1()

{

while(S20) //东西方向红灯亮25秒。南北绿灯两20秒

{

NB_R=1;

NB_Y=1;

NB_G=0;

DX_R=0;

DX_Y=1;

DX_G=1;

if(flag==1)

{

flag=0;

S20--;

}

P2=0x01; //南北数码管个位

P0=du_code[S20/10];

delayms(2);

P2=0x02; //南北数码管十位

P0=du_code[S20%10];

delayms(2);

P2=0x04; //东西

P0=du_code[(S20+5)/10];

delayms(2);

P2=0x08;

P0=du_code[(S20+5)%10];

delayms(2);

}

S20=20;

}

void state2() //东西红灯闪烁,南北黄灯亮{

while(S5)

{

NB_R=1;

DX_R=0;

NB_G=1;

DX_Y=1;

DX_G=1;

if(flag==1)

{

NB_Y=~NB_Y;

flag=0;

S5--;

}

P2=0x01;

P0=du_code[S5/10];

delayms(2);

P2=0x02;

P0=du_code[S5%10];

delayms(2);

P2=0x04;

P0=du_code[S5/10];

delayms(2);

P2=0x08;

P0=du_code[S5%10];

delayms(2);

}

S5=5;

}

void state3()

{

while(S15)

{

NB_R=0;

NB_Y=1;

NB_G=1;

DX_R=1;

DX_Y=1;

DX_G=0;

if(flag==1)

{

flag=0;

S15--;

}

P2=0x01;

P0=du_code[(S15+5)/10];

delayms(2);

P2=0x02;

P0=du_code[(S15+5)%10];

delayms(2);

P2=0x04;

P0=du_code[S15/10];

delayms(2);

P2=0x08;

P0=du_code[S15%10];

delayms(2);

}

S15=12;

}

void state4()

{

while(S5)

{

NB_Y=1;

NB_G=1;

DX_R=1;

NB_R=0;

DX_G=1;

if(flag==1)

{

DX_Y=~DX_Y;

flag=0;

S5--;

}

P2=0x01;

P0=du_code[S5/10];

delayms(2);

P2=0x02;

P0=du_code[S5%10];

delayms(2);

P2=0x04;

P0=du_code[S5/10];

delayms(2);

P2=0x08;

P0=du_code[S5%10];

delayms(2);

}

S5=5;

}

void main()

{

initial();

while(1)

相关文档
最新文档