《51单片机控制的交通灯系统设计》

利用51单片机控制各个路口红绿灯及时间显示  

1  系统设计

1.1 设计要求

1.1.1 设计任务   

利用51单片机控制各个路口红绿灯及时间显示。

1.1.2 性能指标要求  

1、各方向的红、绿色信号灯能按照设定规则运行;

2、绿灯亮之前,黄灯闪烁5次;

3、红灯和绿灯倒计时间能够正确显示;

4、两干道的车辆不会会车冲突。

5、可以扩展其他功能(如按键设置时间,按键模拟警车)

1.2 设计思路及设计框图

1.2.1设计思路

1、各个路口红绿灯亮灭的规则,暂不考虑左转方向;

2、倒计时的实现,利用单片机的定时器进行计数得到秒信号;

3、时间显示:东西南北四个方向的时间一致,当东西方向为60秒绿灯通行时间,同时南北方向为60秒红灯禁止时间,因此硬件连接时可考虑东西南北方向可采用同一接法;最后相当于2个数码管动态显示,具体见参考电路框图。

4、按键设置(扩展要求):设置键按一次,设置主干道通信时间(即次干道禁止时间),按第二次,设置主干道禁止时间(即次干道通信时间),按第三次,可作为紧急通信键。设置时间需要确定,可通过确定键实现,也可通过延时确定,如10秒。当然也可根据需要增加相应的按键。

1.2.2总体设计框图

 

2  各个模块程序的设计

芯片模块:

 

按键模块:

12M晶振电路模块:

复位端模块:

交通灯功能模块:

 

数码管显示模块:

3  调试过程

(1)将下载线连接下载口,即供电的时候,板子在没有任何程序进入的情况下,装上芯片后各个方向的红黄绿灯都是亮的,但数码管没有任何显示。

(2)然后将程序下载到单片机内,各个方向的灯开始按照程序所设置的进行亮灭,数码管进入倒计时状态。证明硬件没问题。

(3)通过硬件验证软件,基本的交通灯功能实现。

4  功能测试

4.1 测试仪器与设备

万用表一个、计算机一台、USB下载线一根

4.2 性能指标测试

1、各方向的红、绿色信号灯能按照设定规则运行;

2、绿灯亮之前,黄灯闪烁5次;

3、红灯和绿灯倒计时间能够正确显示;

4、两干道的车辆不会会车冲突。

5  实训心得体会

       单片机实训功能要求真是说的容易做的难,以为一步一步画出原理图操作后面就很快能完成。等到实训真正开始的时候发现自己突然之间不知道该干嘛,原理图感觉是没问题了,程序自己不会编,单片机的知识自己又相当薄弱。关于实训器件芯片,数码管,下载口等等的管脚分布,都需要学会自行查找资料。然后这次实训焊板的过程相比之前简单,首次用到了万能板,要点对点的连接,看着原理图里线的走向来接跳线,即使电路短接,拆线也方便。其次就是程序编写阶段了,在翻阅单片机书,老师指导和同学的帮助下,渐渐有了思路,但是一次次的调试失败,关于中断,关于延时等的知识运用相当薄弱,验收的时候就很难受,还有数码管的段暄位选,实现的原理,没有做好提前准备,回答的时候不会。将自己写好的程序烧录到板子时,看着自己的实验板实现基本功能真心感到开心,即使按键功能做不出来,结束后我也会从新看看,争取搞懂。这次实训让我认识自己的单片机知识有多缺乏,暴露出一些在学习上的问题,要好好的记住他的原理。希望自己能够更多的学习专业知识,能够把课本的知识运用到实际生活中。

6  参考文献

1.、谢自美.电子线路设计·实验·测试(第二版).武汉:华中科技大学出版社,2000

2、《单片机原理与应用技术》 喻宗泉、李建民、喻晗 西安电子科技大学出版社

3、《单片机原理与应用》 韩桂明  浙江大学出版社

7 附录

附录1:电路原理图

 

附录2:程序清单

#include <reg52.h>

#include<stdio.h>

#include<absacc.h>

#define uint unsigned int

#define uchar unsigned char

char code dx516[3] _at_ 0x003b;

uchar data timelist=60;

uchar count=0;

uchar yelltime=0;

uchar intswitch;

uchar data time[4]={60,5,60,5};

uchar data disbuf[4]={0};

uchar n=0;

uchar yellow=0xff;

sbit P3_2=P3^2;

sbit P3_3=P3^3;

sbit P3_4=P3^4;



uchar code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void timer0(void)interrupt 1

{

TH0=-50000/256;

TL0=-50000%256;

count++;

yelltime++;

if(yelltime==10)

{

yelltime=0;

yellow=yellow^0x12;



}

if(count==20)

{

count=0;

timelist--;

if(timelist==0)

{

n++;

if(n==4)

n=0;

timelist=time[n];





}

}

}

void dlms(uint x)

{

uint i=x,j;

while(i--)

{

j=100;

while(j--);

}

}

void int0(void)interrupt 0

{

dlms(5);

if(!P3_2)

{

while(!P3_2)

{

dlms(1);

}

dlms(5);

if(P3_2)

{

TR0=!TR0;

if(TR0==1)

{ count=0;

n=0;

timelist=time[n];

}

}

}



}

void int1(void)interrupt 2

{

dlms(5);

if(!P3_3)

{

while(!P3_3)

{

dlms(1);

}

dlms(5);

if(P3_3)

{

if(TR0==1)

{

count=0;

n=0;

timelist=time[n];

}

if(TR0==0)

{

time[0]=time[0]+1;

}

if(time[0]>90)

{

time[0]=10;

}

}

}

}

void time1(void)interrupt 3

{

TH1=0xff;

TL1=0xff;

dlms(5);

if(!P3_4)

{

while(!P3_4)

{ dlms(1);

}

dlms(5);

if(P3_4)

{

if(TR0==1)

{

count=0;

n=2;

timelist=time[n];

}

if(TR0==0)

{

 time[2]=time[2]+1;



}

if(time[2]>90)

{

time[2]=10;

}

}

}

}

void disp(void)

{

uchar i,j;

uchar sel;

if(TR0==0)

{

disbuf[0]=time[2]%10;

disbuf[1]=time[2]/10;

disbuf[2]=time[0]%10;

disbuf[3]=time[0]/10;

P2=~0xff;

sel=0x01;

for(i=0;i<4;i++)

{

j=disbuf[i];

P2=(sel^0xff);

P0=table[j];

dlms(2);

P2=~0xff;

sel=sel<<1;

P1=0x36;

}

}

if(TR0==1)

{

disbuf[0]=timelist%10;

disbuf[1]=timelist/10;

disbuf[2]=timelist%10;

disbuf[3]=timelist/10;

P2=~0xff;

sel=0x01;

for(i=0;i<4;i++)

{

j=disbuf[i];

P2=(sel^0xff);

P0=table[j];

dlms(2);

P2=~0xff;

sel=sel<<1;

if(n==0)

{

P1=0x33;



}

if(n==1||n==3)

{

P1=yellow;

}

if(n==2)

{

P1=0x1e;

}

}



}

}

main()

{

TCON=0x05;

TMOD=0x51;

TH0=-50000/256;

TL0=-50000%256;

TH1=0xff;

TL1=0xff;

EA=1;

ET0=1;

EX0=1;

ET1=1;

EX1=1;

TR1=1;

TR0=1;

while(1)

{

disp();

}

}



物联沃分享整理
物联沃-IOTWORD物联网 » 《51单片机控制的交通灯系统设计》

发表评论