基于单片机的十字路口的交通灯设计大学毕业设计论文.docx

上传人:b****6 文档编号:8056625 上传时间:2023-01-28 格式:DOCX 页数:20 大小:689.07KB
下载 相关 举报
基于单片机的十字路口的交通灯设计大学毕业设计论文.docx_第1页
第1页 / 共20页
基于单片机的十字路口的交通灯设计大学毕业设计论文.docx_第2页
第2页 / 共20页
基于单片机的十字路口的交通灯设计大学毕业设计论文.docx_第3页
第3页 / 共20页
基于单片机的十字路口的交通灯设计大学毕业设计论文.docx_第4页
第4页 / 共20页
基于单片机的十字路口的交通灯设计大学毕业设计论文.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

基于单片机的十字路口的交通灯设计大学毕业设计论文.docx

《基于单片机的十字路口的交通灯设计大学毕业设计论文.docx》由会员分享,可在线阅读,更多相关《基于单片机的十字路口的交通灯设计大学毕业设计论文.docx(20页珍藏版)》请在冰豆网上搜索。

基于单片机的十字路口的交通灯设计大学毕业设计论文.docx

基于单片机的十字路口的交通灯设计大学毕业设计论文

摘要

近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。

在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。

十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。

那么靠什么来实现这井然秩序呢?

靠的就是交通信号灯的自动指挥系统。

交通信号灯控制方式很多。

本系统采用MCS-51系列单片机AT89C51为中心器件来设计交通灯控制器,实现了能根据实际车流量通过8051芯片的P3口设置红、绿灯燃亮时间的功能;红绿灯循环点亮,倒计时剩5秒时黄灯闪烁警示(交通灯信号通过P1口输出,显示时间通过P0口输出至双位数码管)。

本系统设计周期短、可靠性高、实用性强、操作简单、维护方便、扩展功能强。

关键词:

单片机;交通灯

 

Abstract

Inrecentyears,withtherapiddevelopmentofscienceandtechnology,theapplicationofSCMisgoingdeep,drivingthetraditionaldetectiontechniquestorenewdaybyday.Inthereal-timeexaminationandintheautomaticcontrolmonolithicintegratedcircuitapplicationsystem,themonolithicintegratedcircuitoftentookacorepartuses.Themonolithicintegratedcircuitaspectknowledgeisonlyinsufficient,butshouldalsoactaccordingtotheconcretehardwarearchitecturesoftwareandhardwareunion,tobeimproved.

Theintersectionvehiclesshuttle,thepedestrianisbustling,cardealershiptrafficlane,personsidewalk,methodical.Thendependingonwhattorealizesthisorderlyorder?

thetrafficlightsontheautomaticcontrolsystem.Therearegreatnumberkindsofmodestocontrolthetrafficlights.ThesystemusesaseriesofMCS-51asthecenterAT89C51single-chipdevicedesignedtocontrolthetrafficlights,soastorealizethefunctionofsettingred,greenlighttimeby8051chip’sP3portaccordingtotheactualtrafficflows,lightingthered-lightandgreen-lightbyturnandlightingtheyellow-lighttowarmwhile5secondsleft(outputtingthetrafficlightsignalbyP1,outpuingthetimebyP0andshowingthetimeondouble-digitsnixietube).Shortofthedesigncycle,highreliability,practical,simpleoperation,easymaintenance,theexpansionofpowerfulisthissystem.

Keywords:

SCM;MCU;trafficlight

 

1 设计要求

1.1 程序开始运行先南北段通行、东西段禁止60s,后东西段通行、南北段禁止60s,依此循环。

1.2 系统分三种工作模式:

正常模式、繁忙模式、特殊模式,并且通过三个按钮“正常”、“繁忙”、“特殊”可相互转化。

1.3 正常模式:

直行时间显示数码管显示60。

此时南北段直行通行(绿灯)、东西段禁止(红灯)40s,南北段人行道通行(绿灯),东西段人行道禁止(红灯),同时南北段和东西段方向的数码管分别从40s和60s开始倒计时,至最后5s时南北段绿灯变成黄灯闪烁;此后南北段左拐(左拐灯亮)通行、东西段禁止(红灯)20s,南北段、东西段人行道都禁止(红灯),同时南北段和东西段方向的数码管都从20s开始倒计时,至最后5s时南北段左拐灯变成黄灯闪烁;再后东西段直行通行(绿灯)、南北段禁止(红灯)40s,东西段人行道通行(绿灯),南北段人行道禁止(红灯),同时东西段和南北段方向的数码管分别从40s和60s开始倒计时,至最后5s时东西段绿灯变成黄灯闪烁;最后东西段左拐(左拐灯亮)通行、南北段禁止(红灯)20s,东西段、南北段人行道都禁止(红灯),同时东西段和南北段方向的数码管都从20s开始倒计时,至最后5s时东西段左拐灯变成黄灯闪烁。

1.4 繁忙模式:

繁忙指示灯亮,南北段、东西段的通行时间改为45s,其中左拐的时间改为15s,其它与正常模式类似。

1.5 特殊模式:

特殊模式灯亮,南北段、东西段的通行时间改为75s,其中左拐的时间改为20s,其它与正常模式类似。

 

2 设计目的

2.1 了解交通灯管理的基本工作原理

2.2 熟悉AT89C51的工作原理和应用编程

2.3 熟悉AT89C51并行接口的各种工作方式和应用

2.4 熟悉AT89C51计数器/定时器的工作方式和应用编程外部中断的方法

2.5 掌握多位LED显示问题的解决

 

3 方案比较、设计与论证

3.1显示界面方案

3.1.1倒计时显示该系统要求完成倒计时的功能。

因只需显示数字,基于上述原因,我们考虑完全采用数码管显示,四个路口分别采用一个二位阴极数码管即可。

3.1.2状态灯显示

该系统要求完成状态灯显示的功能。

求于简单,我们把各个路口的红灯和黄灯设成直行和左拐两个通行方式所共有,也就是说,一个路口只需四个状态灯,一个直行通行的绿灯,一个左拐通行的绿灯,一个共有的红灯,一个共有的黄灯。

3.2输入方案

该系统要求能手动改变东西与南北的通行时间、紧急情况处理,我们采用扩展I/O

口方法,在外部中断P32口上扩展三个中断口,分别连接三个按钮。

该方案的优点是:

使用灵活,并且可提供较多I/O口,节省了AT89C51的中断口资源。

4 原理分析

4.1交通灯显示时序的理论分析

下图所示为一种红绿灯规则的状态图。

 

 

共四种状态,分别设定为S1、S2、S3、S4,交通灯以这四种状态为一个周期,循环执行如下图所示:

 

依据上述车辆行驶的状态图,可以列出各个路口灯的逻辑表如下表所示(其中逻辑值“1”代表直行通行,逻辑值“0”代表禁止通行,逻辑值“L”代表左拐通行):

S1的状态

E

S

W

N

逻辑值

0

1

0

1

显示时间

正常模式下为40S

S2的状态

E

S

W

N

逻辑值

0

L

0

L

显示时间

正常模式下为20S

 

S3的状态

E

S

W

N

逻辑值

1

0

1

0

显示时间

正常模式下为40S

 

S4的状态

E

S

W

N

逻辑值

L

0

L

0

显示时间

正常模式下为20S

程序就是在上述四种状态下循环转化的。

一个周期四个状态,在正常模式下共花费2分钟。

4.2交通灯显示的理论分析

4.2.1倒计时显示的理论分析

利用定时器中断,设置TH0=TH1=(65536-50000)/256,即每0.05秒中断一次。

每到第20次中断即过了20*0.05秒=1秒时,使时间的计数值减1,便实现了倒计时的功能。

4.2.2状态灯显示的理论分析

黄灯闪烁同样可以利用定时器中断。

每到第10次中断即过了10*0.05秒=0.5秒时,使黄灯标志位反置,即可让黄灯1秒闪烁一次。

 

5 程序设计流程图

 

 

图5.1定时器0中断流程图

 

图5.2主程序流程图

 

图5.3外部中断0中断流程图

 

6 总体设计与电路图

6.1 芯片选择

 

6.2 设计电路图

 

图6.2电路图

图部分连线采用总线形式。

共五个二位阴极数码管,其中四个分别用于四个路口的倒计时显示,另外一个用于总体的直行时间显示,五个数码管的阳极都接到AT89C51的P0口,阴极接到P2口;共32个发光二极管,其中16个绿色发光二极管,14个红色发光二极管,2个黄色发光二极管,四个路口每个路口各有一个红(禁行)、黄(警告)发光二极管,二个绿色发光二极管(通行),一个用于直行通行,一个用于左拐通行,四个人行道,每个人行道两边各有一红、绿发光二极管,另外两个红色发光二极管分别用于繁忙模式和特殊模式的指示,其中四个路口的二极管接到P1口,人行道的发光二极管接到P3口,繁忙模式和特殊模式的指示灯接P2口;外部中断0接上三个按钮,分别用于繁忙、特殊、正常模式的转化。

 

6.3 PROTEUS仿真图:

 

6.4 交通灯程序

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

十字路口交通灯控制C程序

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

#include

#defineucharunsignedchar

#defineuintunsignedint

/*****定义控制位*******************************************/

sbitTime_Show_LED2=P2^5;//Time_Show_LED2(直行时间显示)控制位

sbitTime_Show_LED1=P2^4;//Time_Show_LED1(直行时间显示)控制位

sbitEW_LED2=P2^3;//EW_LED2控制位

sbitEW_LED1=P2^2;//EW_LED1控制位

sbitSN_LED2=P2^1;//SN_LED2控制位

sbitSN_LED1=P2^0;//SN_LED1控制位

sbitSN_Yellow=P1^6;//SN黄灯

sbitEW_Yellow=P1^2;//EW黄灯

sbitEW_ManGreen=P3^0;//EW人行道绿灯

sbitSN_ManGreen=P3^1;//SN人行道绿灯

sbitSpecial_LED=P2^6;//交通特殊指示灯

sbitBusy_LED=P2^7;//交通繁忙指示灯

sbitNomor_Button=P3^5;//交通正常按键

sbitBusy_Btton=P3^6;//交通繁忙按键

sbitSpecial_Btton=P3^7;//交通特殊按键

sbitEW_ManRed=P3^3;//EW人行道红灯

sbitSN_ManRed=P3^4;//SN人行道红灯

bitFlag_SN_Yellow;//SN黄灯标志位

bitFlag_EW_Yellow;//EW黄灯标志位

charTime_EW;//东西方向倒计时单元

charTime_SN;//南北方向倒计时单元

ucharEW=60,SN=40,EWL=19,SNL=19;//程序初始化赋值,正常模式

ucharEW1=60,SN1=40,EWL1=19,SNL1=19;//用于存放修改值的变量

ucharcodetable[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//0-9段选码

ucharcodeS[8]={0x28,0x48,0x18,0x48,0x82,0x84,0x81,0x84};

//交通信号灯控制代码

/**********************延时子程序**************************/

voidDelay(uchara)

{

uchari;

i=a;

while(i--){;}

}

/*****************显示子函数******************************/

voidDisplay(void)

{

ucharh,l;

h=Time_EW/10;

l=Time_EW%10;

P0=table[l];

EW_LED2=1;//点亮EW_LED2

Delay

(2);

EW_LED2=0;//熄灭EW_LED2

P0=table[h];

EW_LED1=1;//点亮EW_LED1

Delay

(2);

EW_LED1=0;

h=Time_SN/10;

l=Time_SN%10;

P0=table[l];

SN_LED2=1;//点亮SN_LED2

Delay

(2);

SN_LED2=0;

P0=table[h];

SN_LED1=1;//点亮SN_LED1

Delay

(2);

SN_LED1=0;

h=EW1/10;

l=EW1%10;

P0=table[l];

Time_Show_LED1=1;//点亮Time_Show_LED1

Delay

(2);

Time_Show_LED1=0;

P0=table[h];

Time_Show_LED2=1;//点亮Time_Show_LED2

Delay

(2);

Time_Show_LED2=0;

}

/**********************外部0中断服务程序******************/

voidINT0_srv(void)interrupt0using1

{

EX0=0;//关中断

if(Nomor_Button==0)//测试按键是否按下,按下为正常状态

{

EW1=60;

SN1=40;

EWL1=19;

SNL1=19;

Busy_LED=0;//关繁忙信号灯

Special_LED=0;//关特殊信号灯

}

if(Busy_Btton==0)//测试按键是否按下,按下为繁忙状态

{

EW1=45;

SN1=30;

EWL1=14;

SNL1=14;

Special_LED=0;//关特殊信号灯

Busy_LED=1;//开繁忙信号灯

}

if(Special_Btton==0)//测试按键是否按下,按下为特殊状态

{

EW1=75;

SN1=55;

EWL1=19;

SNL1=19;

Busy_LED=0;//关繁忙信号灯

Special_LED=1;//开特殊信号灯

}

EX0=1;//开中断

}

/**********************T0中断服务程序*******************/

voidtimer0(void)interrupt1using1

{

staticucharcount;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

count++;

if(count==10)

{

if(Flag_SN_Yellow==1)//测试南北黄灯标志位

{SN_Yellow=~SN_Yellow;}

if(Flag_EW_Yellow==1)//测试东西黄灯标志位

{EW_Yellow=~EW_Yellow;}

}

if(count==20)

{

Time_EW--;

Time_SN--;

if(Flag_SN_Yellow==1)//测试南北黄灯标志位

{SN_Yellow=~SN_Yellow;}

if(Flag_EW_Yellow==1)//测试东西黄灯标志位

{EW_Yellow=~EW_Yellow;}

count=0;

}

}

/*********************主程序开始***********************/

voidmain(void)

{

Busy_LED=0;

Special_LED=0;

IT0=1;//INT0负跳变触发

TMOD=0x01;//定时器工作于方式1

TH0=(65536-50000)/256;//定时器赋初值

TL0=(65536-50000)%256;

EA=1;//CPU开中断总允许

ET0=1;//开定时中断

EX0=1;//开外部INTO中断

TR0=1;//启动定时

while

(1)

{

/*******S0状态**********/

SN_ManRed=0;

SN_ManGreen=1;//SN人行道通行

EW_ManRed=1;//EW人行道禁止

EW_ManGreen=0;

Flag_EW_Yellow=0;//EW关黄灯显示信号

Time_EW=EW;

Time_SN=SN;

while(Time_SN>=5)

{

P1=S[0];//SN绿灯,EW红灯

Display();

}

/*******S1状态**********/

P1=0x00;

while(Time_SN>=0)

{

Flag_SN_Yellow=1;//SN开黄灯信号位

P1=P1|0x08;//保持EW红灯

Display();

}

/*******S2状态**********/

SN_ManRed=1;//SN人行道禁止

SN_ManGreen=0;

EW_ManRed=1;//EW人行道禁止

EW_ManGreen=0;

Flag_SN_Yellow=0;//SN关黄灯显示信号

Time_SN=SNL;

while(Time_SN>=5)

{

P1=S[2];//SN左拐绿灯亮,EW红灯

Display();

}

/*******S3状态**********/

P1=0x00;

while(Time_SN>=0)

{

Flag_SN_Yellow=1;//SN开黄灯信号位

P1=P1|0x08;//保持EW红灯

Display();

}

/***********赋值*********/

EW=EW1;

SN=SN1;

EWL=EWL1;

SNL=SNL1;

/*******S4状态**********/

SN_ManRed=1;//SN人行道禁止

SN_ManGreen=0;

EW_ManRed=0;

EW_ManGreen=1;//EW人行道通行

Flag_SN_Yellow=0;//SN关黄灯显示信号

Time_EW=SN;

Time_SN=EW;

while(Time_EW>=5)

{

P1=S[4];//EW通行,SN红灯

Display();

}

/*******S5状态**********/

P1=0X00;

while(Time_EW>=0)

{

Flag_EW_Yellow=1;//EW开黄灯信号位

P1=P1|0x80;//保持SN红灯

Display();

}

/*******S6状态**********/

SN_ManRed=1;//SN人行道禁止

SN_ManGreen=0;

EW_ManRed=1;//EW人行道禁止

EW_ManGreen=0;

Flag_EW_Yellow=0;//EW关黄灯显示信号

Time_EW=EWL;

while(Time_EW>=5)

{

P1=S[6];//EW左拐绿灯亮,SN红灯

Display();

}

/*******S7状态**********/

P1=0X00;

while(Time_EW>=0)

{

Flag_EW_Yellow=1;//EN开黄灯信号位

P1=P1|0x80;//保持SN红灯

Display();

}

/***********赋值********/

EW=EW1;

SN=SN1;

EWL=EWL1;

SNL=SNL1;

}

}

 

7仿真测试、数据与结果分析

程序运行结果如下:

1.首先,直行时间显示数码管显示60。

此时南北段绿灯亮、东西段红灯亮40s,南北段人行道绿灯亮,东西段人行道红灯亮,同时南北段和东西段方向的数码管分别从40s和60s开始倒计时。

2.35秒后,南北方向的黄灯闪烁5秒钟,此时东西方向仍维持红灯亮,人行道灯不变。

3.40秒后,南北方向左拐灯亮,东西方向红灯亮,东西和南北人行道全部红灯亮,同时南北段和东西段方向的数码管分别从19秒开始倒计时。

4.55秒钟后,南北方向的黄灯闪烁5秒,此时东西方向仍维持红灯亮,人行道灯不变。

5.1分钟后,东西段绿灯亮、南北段红灯亮40s,东西段人行道绿灯亮,南北段人行道红灯亮,同时南北段和东西段方向的数码管分别从60s和40s开始倒计时。

6.1分35秒后,东西方向的黄灯闪烁5秒钟,此时南北方向仍维持红灯亮,人行道灯不变。

7.1分40秒后,东西方向左拐灯亮,南北方向红灯亮,东西和南北人行道全部红灯亮,同时南北段和东西段方向的数码管分别从19秒开始倒计时。

8.1分55秒钟后,东西方向的黄灯闪烁5秒,此时南北方向仍维持红灯亮,人行道灯不变。

9.按下“繁忙”、“特殊”按钮时直行显示分别为45和75。

其它过程与正常模式下一样。

 

8总结与展望

8.1软件延时与定时器计时

软件延时,设计简单,使用方便,但是无法进行精确计时,无法在实际应用中进行使用,本次设计采用了定时器0进行计时,每50ms产生一个脉冲信号,可以准确的计时并方便8段数码管进行显示。

8.2使用中断的好处

使用中断可以进行多样化设计,强化程序功能与执行效率。

在本设计中程序每50ms请求一次中断,实现精确定时与数码管显示刷新。

8.3关于本次设计

本次课程设计的过程是艰辛的,不过收获却是很大的。

在设计过程中,会出现了一些问题,但都是常见的小问题,如:

代码中双引号的使用并不是在英语书写状态下,输入字母出错等,在调

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 互联网

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1