交通灯控制器.docx

上传人:b****6 文档编号:6159244 上传时间:2023-01-04 格式:DOCX 页数:21 大小:413.17KB
下载 相关 举报
交通灯控制器.docx_第1页
第1页 / 共21页
交通灯控制器.docx_第2页
第2页 / 共21页
交通灯控制器.docx_第3页
第3页 / 共21页
交通灯控制器.docx_第4页
第4页 / 共21页
交通灯控制器.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

交通灯控制器.docx

《交通灯控制器.docx》由会员分享,可在线阅读,更多相关《交通灯控制器.docx(21页珍藏版)》请在冰豆网上搜索。

交通灯控制器.docx

交通灯控制器

湖南****

课程设计报告

 

课程名称:

专业综合课程设计

专业班级:

学生姓名:

指导教师:

完成时间:

20**年11月15日

报告成绩:

评阅意见:

 

评阅教师日期20**.11.15

 

 

湖南****制

交通灯控制器

随着微控技术的口益完善和发展,单片机的应用不断走向深入。

它的应用必定导致传统的控制技术从根本上发生变革。

它在工业控制、数据采集、智能仪表、机电一体化、家用电器等领域得到广泛的应用,极大地提高了这些领域的技术水平和自动化控制。

同时,伴随着我国经济的高速发展,私家车、公交车的增加,无疑会给我国的道路交通系统带来沉重的压力,很多大城市都不同程度地受到交通堵塞问题的困扰。

下面以AT89C51单片机为核心,设计出以人性化、智能化为目的的交通灯控制器。

交通灯控制器采用AT89C52单片机芯片作为控制芯片,使用红、黄、绿不同颜色的发光二极管代表各个路口的交通灯,用8段数码管对时间进行倒时显示,东西路口30秒,南北路口40秒,黄灯时间3秒。

本项目主要从单片机应用上来实现十字路口交通灯智能化的管理,用来控制过往车辆的正常化运作。

一、设计要求

1、设计出一个单片机控制的十字路口交通信号灯控制器,要求在十字路中心设有4个方向的交通指示灯,红灯停,绿灯行,红绿灯变化的中间用闪烁的黄灯隔离,要求采用南北向通行40s,东西向通行30s的轮流通行方式,黄灯闪烁时间为3s(不计入通行时间内)。

2、绘制系统硬件接线图,并进行系统仿真。

3、画出程序流程图并编写程序实现上述功能。

二、设计的作用与目的

专业课程设计的作用:

通过学习和查阅资料,本项目可掌握和了解如下知识;

1、+5V电源原理及设计。

2、单片机复位电路工作原理及设计。

3、单片机晶振电路工作原理及设计。

4、LED的特性及使用。

5、AT89C51单片机引脚。

6、单片机汇编语言及程序设计。

通过专业课程设计达到以下几个目的:

1、培养学生文献检索的能力。

2、培养学生综合分析问题、发现问题和解决问题的能力。

3、培养学生运用知识的能力和工程设计的能力。

4、提高学生课程设计报告撰写水平。

三、所有设备及软件

在本次设计中,用到的软件有画图软件protel,仿真软件proteus和multisim,编程软件keil。

四、系统设计方案

方案一:

交通控制系统主要控制A、B两车道的交通,以AT89S52单片机为核心芯片,通过控制三色LED的亮灭来控制各车道的通行;另外通过2个按键来模拟各车道有无车辆的情况和有紧急车辆的情况。

根据设计要求,制定总体设计思想如下:

1、正常情况下运行主程序,采用0.5S延时子程序的反复调用来实现各种定时时间。

2、一道有车而另一道无车时,采用外部中断1执行中断服务程序,并设置中断为低优先级中断。

3、有紧急车辆通过时,采用外部中断0执行中断服务程序,并设置中断为高优先级中断,实现二级中断嵌套。

该电路具有电路简单,设计方便,显示亮度高,耗电较少,也非常的可靠。

总体设计框图如图1所示。

方案二:

采用标准AT89S52单片机作为控制器;通行倒计时显示采用3位数码管;主、次通道及行人指示灯采用双色高亮发光二极管;LED显示采用动态扫描,以节省端口。

紧急车辆通行采用实时中断完成,识别方法采用手动按钮。

按以上系统构架设计,单片机端口资源刚好满足要求。

该系统具有电路简单,设计方便,显示亮度高耗电少,可靠性高,但是占用单片机资源太多了。

整个电路组成框图如图2所示。

方案三:

采用AT89C2051单片机作为控制器,通行倒计时、主、次车道及行人通行指示采用单块LCD液晶点阵显示器。

这种方案设计占用单片机的端口最少,硬件也最少,耗电也最少;虽然显示图案也很精美,但由于亮度太暗,晚上还得必须开背光灯,所以较少采用。

通过以上综合分析可以看出,方案一具有综合设计优点,因此城市道口交通灯控制系统模型采用方案一设计。

五、系统硬件设计

1、时钟电路模块

时钟电路由一个晶体振荡器12MHZ和两个30pF的瓷片电容组成。

时钟电路用于产生单片机工作所需要的时钟信号,而时序所研究的是指令执行中各信号之间的相互关系。

单片机本身就如一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地工作。

电路如图3所示。

2、复位电路模块

复位电路是使单片机的CPU或系统中的其他部件处于某一确定的初始状态,并从这状态开始工作,除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位电路以重新启动。

本设计采用的是按键复位电路。

电路如图4所示:

3、主控制系统模块

主控制器采用AT89S52,是ATMEL公司生产的一款性能稳定的8位单片机。

AT89S52具有1个8KB的FLASH程序存储器,1个512字节的RAM,4个8位的双向可位寻址I/O端口,3个16位定时/计数器及1个串行口和6个向量二级中断结构。

单片机的P0口分别用于控制南北及东西的通行灯,P2口和P3.4-P3.7口用于4组4位LED计时器的控制,紧急车辆通行时使用外中断0(P3.2)和外中断1(P3.3),进行手动按键,即可转换。

主控电路如图5所示。

4、交通灯输出控制模块

道口交通灯指示采用高亮度红、黄、绿发光二极管进行提示。

电路图如图6所示。

R=220欧时,按公式A=(5-1.8)/R计算,电路中的电流大小应为A=14.545mA.由于每个路口的通行双向指示处理相同,因此每个端口应具有3A的吸收电流能力。

5、时间显示电路模块

道口通行剩余时间采用高亮红色7段LED发光数码管显示,采用共阳数码管,如用单片机吸收电流驱动,列扫描驱动使用三极管,按每段6mA电流计算,全显示字形“8”时,每个数码需6mA*8=48mA,由于时间显示每个道口相同,共需要电流192mA,因此设计中也采用了中功率三极管8550显示电路如图7所示。

6、紧急通车电路模块

为了实现此功能,利用单片机中断达到目的。

利用一个手动按钮开关接至单片机外部中断0,同时在软件设计时将其设定为最高优先级,当其按下时,四方全为红灯,同时将中断位置的PSW、ACC进栈保护,当其计时完了之后,回到原来的位置进行执行。

再利用一个手动按钮接至单片机外部中断1当其按下时,如果是东西道是红灯,而南北道是绿灯,则将其置为东西是绿灯,南北是红灯;如果是东西道是绿灯,而南北道是红灯,则将其置为东西是红灯,南北是绿灯。

两种情况都是执行完后,回到断点处继续执行。

电路如图8所示。

六、系统软件设计

1、软件的设计

主程序采用查询方式定时,调用0.5S延时子程序的次数,从而获取交通灯的各种时间。

子程序采用定时器1方式1查询式定时,定时器定时50ms,确定50ms循环20次,从而获得1S的延时时间。

有车车道的放行的中断服务程序首先要保护现场,因而需用到延时子程序,子程序采用定时器0方式1查询式定时,定时器定时50ms,确定50ms循环20次,从而获得1S的延时时间,保护现场时还需关中断,以防止高优先级中断(紧急车辆通过所产生的中断)出现导致程序混乱。

开中断,由软件查询外中断1,判别哪一道有车,再根据查询情况执行相应的服务。

待交通灯信号出现后,保持15S的延时,然后,关中断,恢复现场,再开中断返回主程序。

紧急车辆出现时的中断服务程序也需要保护现场,但无须关中断(因其为高优先级中断),然后执行相应的服务,待交通灯信号出现后延时20S,确保紧急车辆通过交叉路口,然后,恢复现场,返回主程序。

2、程序流程图

紧急情况时的中断服务程序(外中断0)

七、实验调试结果

1.整体电路仿真图以及仿真结果分析

1)、整体电路仿真图如图所示

2)、仿真结果分析

上电或按键复位后数码管无显示,东西、南北的灯都为红灯亮;开始工作后主车道绿灯亮次车道红灯亮50S,在这里选定它亮到5S时,主车道绿灯灭,黄灯亮;5S后主车道变为红灯亮次车道绿灯亮30S,在这里选定它亮到5S时,次车道黄灯亮,5S后返回重新执行。

按紧急车辆按钮红灯全亮显示时间为20S;有车车道放行按钮按下时,若主车道是绿灯、次车道是红灯,则把主车道变为红灯、次车道变为绿灯,显示15S;若主车道是红灯、次车道是绿灯,则把主车道变为绿灯、次车道变为红灯,显示15S;

2、安装与调试

1)电路安装

打好板后,按照所画的PCB板,一一的把各个元件焊接到所制的板上即可。

2)电路调试

电路调试是利用开发系统、基本测试仪器(万用表、示波器等),检查系统硬件中存在的故障。

其调试可分为静态调试与动态调试两步进行。

静态调试是在系统未工作时的一种硬件检测。

第一步:

目测。

检查外部的各种元件或者是电路是否有断点。

第二步:

用万用表测试。

先用万用表复核目测中有疑问的连接点,再检测各种电源与地线之间是否有短路现象。

第三步:

加电检测。

给板加电,检测所有的插座或是器件的电源端是否符合要求的值。

第四步:

是联机检查。

因为只有用单片机开发系统才能完成对用户系统的调试。

动态调试

动态调试是在系统工作的情况下发现和排除系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。

动态调试的一般方法是由近及远、由分到合。

由分到合是指首先按逻辑功能将系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从系统中去掉,这样可以将故障范围限定在某个局部的电路上。

当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。

由分到合调试既告完成。

由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及的分层,然后分层调试。

调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。

3)软件调试

软件调试是通过对拥护程序的C编程、连接、执行发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。

运行程序后,编辑,查看程序是否有逻辑的错误。

八、设计中的问题及解决方法

系统做好的,进行系统的完整调试。

按照所设计的流程图,用单片机跟踪模式程序进行调试,配合相关的硬件动作,可以观察LED的变化和数码管的显示是否正确。

同样明确延时时间长短、跳转位置及调用的程序功能。

经过观察各检测,可以看到整个系统的功能都能达到我的设计要求。

九、设计心得

以往每次做课程设计,都会感觉自己收获不少。

这次单片机课程设计也不例外。

做课程设计是为了让我们对平时学习的理论知识与实际操作相结合,在理论和实验教学基础上进一步巩固已学基本理论及应用知识并加综合提高,学会将知识应用于实际的方法,提高和解决问题的能力。

第一,在编写软件中,在此过程中我更为熟练得掌握汇编语言各种指令的使用方法,掌握了keil软件的使用。

第二,在软件调试过程中,使我又一次复习了keil和proteus联合使用的方法。

在调试时曾经遇到数码管倒计时显示时间两位不能同时显示,后来经过查找资料不断调试才领悟到原来在显示的过程中要循环显示才能使得显示稳定下来。

第三,在做原理图和PCB的过程中,使我进一步掌握了proteus软件的使用方法。

再次熟悉了各种作图工具的应用,而且培养了我在设计原理图时的一些技巧和好的习惯。

第四,在做实物的过程中,培养了我认真耐心的工作态度。

我在做板子过程中,首先由于我的布线比较紧密加上孔和焊盘过小使得在打孔是出现刮断线以及在焊接的时候出现了虚焊和联焊等问题,后来我不得不重新再做一次板;二是由于焊接前没检查断线问题,使得我的PCB在加载程序后只有灯亮,而数码管却不亮,后来经过我的仔细检查,原来是在给三级管供电的线有断,将其连接起来后,就能显示了,从而得以成功。

总之,通过这次课程设计,我掌握了用单片机设计交通灯的基体方法,增强了我寻找问题,解决问题的能力。

培养了我的设计思维,此次课程设计的成功不仅帮助我更好地掌握书本知识,尤其重要的是增强了我的自信,培养了我独立思考的能力。

但是此次设计不中之处是不能实现左右弯灯,不有人行道控制灯,不能进行流量控制。

十、参考文献

[1]《单片机基础》.李广弟、朱月秀、冷祖祁.北京航空航天大学出版社。

[2]华成英童诗白,《模拟电子技术基础(第四版)》,高等教育出版社。

[3]康华光,《电子技术基础数字部分(第五版)》,高等教育出版社。

[4]《51单片机C语言常用模块与综合系统设计实例精讲》.于永、戴佳、常江.电子工业出版社。

[5]《单片机课程设计指导》.杨居义.清华大学出版社。

[6]《零基础学单片机C语言程序设计》.赵建领、薛园国.机械工业出版社。

附录1:

系统总体结构电路原理图

1.总原理图

2、PCB制板图

3.整体电路仿真图

附录2:

程序清单

SECOND1EQU30H;东西秒寄存器

SECOND2EQU31H;南北秒寄存器

DBUFEQU40H;显示缓冲1

TEMPEQU44H;显示缓冲2

LED_G1BITP2.1;东西绿灯

LED_Y1BITP2.2;东西黄灯

LED_R1BITP2.3;东西红灯

LED_G2BITP2.4;南北绿灯

LED_Y2BITP2.5;南北黄灯

LED_R2BITP2.6;南北红灯

ORG00H

START:

MOVTMOD,10H;置T0工作方式1

MOVTH0,#3CH;置T0定时初值50mS

MOVTL0,#0B0H

CLRTF0

SETBTR0;启动T0

LOOP:

MOVR2,#20;置1S计数初值50mS*20=1S

MOVR3,#20;红灯20S

MOVSECOND1,#25;东西秒显示初值25S

MOVSECOND2,#25;南北秒显示初值25S

LCALLDISPLAY

LCALLSTATE1;调用状态1

WAIT1:

JNBTF0,WAIT1;查询50mS到否

CLRTF0

MOVTH0,#6CH;恢复T0定时初值50mS

MOVTL0,#0B0H

DJNZR2,WAIT1;判1S到否?

未到继续状态1

MOVR2,#20;置50mS计数初值

DECSECOND1;东西秒显示减一

DECSECOND2;南北秒显示减一

LCALLDISPLAY

DJNZR3,WAIT1;状态1维持20S

MOVR2,#10;置50mS计数初值

MOVR4,#2;闪烁200mS

MOVR3,#3;绿灯闪3S

MOVSECOND1,#5;东西秒显示初值5S

MOVSECOND2,#5;南北秒显示初值5S

LCALLDISPLAY

WAIT2:

LCALLSTATE2;调用状态2

JNBTF0,WAIT2;查询50mS到否

CLRTF0

MOVTH0,#0ACH;恢复T0定时初值50mS

MOVTL0,#0B0H

DJNZR4,WAIT2;判200mS到否?

未到继续状态2

CPLLED_G1;东西绿灯闪

MOVR4,#2;闪烁200mS

DJNZR2,WAIT2;判1S到否?

未到继续状态2

MOVR2,#10;置50mS计数初值

DECSECOND1;东西秒显示减一

DECSECOND2;南北秒显示减一

LCALLDISPLAY

DJNZR3,WAIT2;状态2维持3S

MOVR2,#20;置50mS计数初值

MOVR3,#2;黄灯闪2S

MOVSECOND1,#2;东西秒显示初值2S

MOVSECOND2,#2;南北秒显示初值2S

LCALLDISPLAY

WAIT3:

LCALLSTATE3;调用状态3

JNBTF0,WAIT3;查询100mS到否

CLRTF0

MOVTH0,#6CH;恢复T0定时初值100mS

MOVTL0,#0B0H

DJNZR2,WAIT3;判1S到否?

未到继续状态3

MOVR2,#20;置100mS计数初值

DECSECOND1;东西秒显示减一

DECSECOND2;南北秒显示减一

LCALLDISPLAY

DJNZR3,WAIT3;状态3维持2S

MOVR2,#20;置50mS计数初值

MOVR3,#20;红灯20S

MOVSECOND1,#25;东西秒显示初值25S

MOVSECOND2,#25;南北秒显示初值25S

LCALLDISPLAY

WAIT4:

LCALLSTATE4;调用状态4

JNBTF0,WAIT4;查询100mS到否

CLRTF0

MOVTH0,#6CH;恢复T0定时初值100mS

MOVTL0,#0B0H

DJNZR2,WAIT4;判1S到否?

未到继续状态4

MOVR2,#20;置100mS计数初值

DECSECOND1;东西秒显示减一

DECSECOND2;南北秒显示减一

LCALLDISPLAY

DJNZR3,WAIT4;状态4维持20S

MOVR2,#10;置50mS计数初值

MOVR4,#2;闪烁200mS

MOVR3,#3;绿灯闪3S

MOVSECOND1,#5;东西秒显示初值5S

MOVSECOND2,#5;南北秒显示初值5S

LCALLDISPLAY

WAIT5:

LCALLSTATE5;调用状态5

JNBTF0,WAIT5;查询100mS到否

CLRTF0

MOVTH0,#0ACH;恢复T0定时初值100mS

MOVTL0,#0B0H

DJNZR4,WAIT5;判200mS到否?

未到继续状态5

CPLLED_G2;南北绿灯闪

MOVR4,#2;闪烁200mS

DJNZR2,WAIT5;判1S到否?

未到继续状态5

MOVR2,#2;置100mS计数初值

DECSECOND1;东西秒显示减一

DECSECOND2;南北秒显示减一

LCALLDISPLAY

DJNZR3,WAIT5;状态5维持3S

MOVR2,#20;置50mS计数初值

MOVR3,#2;黄灯闪2S

MOVSECOND1,#2;东西秒显示初值2S

MOVSECOND2,#2;南北秒显示初值2S

LCALLDISPLAY

WAIT6:

LCALLSTATE6;调用状态6

JNBTF0,WAIT6;查询100mS到否

CLRTF0

MOVTH0,#6CH;恢复T0定时初值100mS

MOVTL0,#0B0H

DJNZR2,WAIT6;判1S到否?

未到继续状态6

MOVR2,#20;置100mS计数初值

DECSECOND1;东西秒显示减一

DECSECOND2;南北秒显示减一

LCALLDISPLAY

DJNZR3,WAIT6;状态6维持2S

LJMPLOOP;大循环

STATE1:

;状态1

SETBLED_G1;东西绿灯亮

CLRLED_Y1

CLRLED_R1

CLRLED_G2

CLRLED_Y2

SETBLED_R2;南北红灯亮

RET

STATE2:

;状态2

CLRLED_Y1

CLRLED_R1

CLRLED_G2

CLRLED_Y2

SETBLED_R2;南北红灯亮

RET

STATE3:

;状态3

CLRLED_G1

CLRLED_R1

CLRLED_G2

CLRLED_Y2

SETBLED_R2;南北红灯亮

SETBLED_Y1;东西黄灯亮

RET

STATE4:

;状态4

CLRLED_G1

CLRLED_Y1

SETBLED_R1;东西红灯亮

SETBLED_G2;南北绿灯亮

CLRLED_Y2

CLRLED_R2

RET

STATE5:

;状态5

CLRLED_G1

CLRLED_Y1

SETBLED_R1;东西红灯亮

CLRLED_Y2

CLRLED_R2

RET

STATE6:

;状态6

CLRLED_G1

CLRLED_Y1

SETBLED_R1;东西红灯亮

CLRLED_G2

CLRLED_R2

SETBLED_Y2;南北黄灯亮

RET

DISPLAY:

;数码显示

MOVA,SECOND1;东西秒寄存器

MOVB,#10;16进制数拆成两个10进制数

DIVAB

MOVDBUF+3,A

MOVA,B

MOVDBUF+2,A

MOVA,SECOND2;南北秒寄存器

MOVB,#10;16进制数拆成两个10进制数

DIVAB

MOVDBUF+1,A

MOVA,B

MOVDBUF,A

MOVR0,#DBUF

MOVR1,#TEMP

MOVR2,#4

DP10:

MOVDPTR,#LEDMAP

MOVA,@R0

MOVCA,@A+DPTR

MOV@R1,A

INCR0

INCR1

DJNZR2,DP10

MOVR0,#TEMP

MOVR1,#4

DP12:

MOVR2,#8

MOVA,@R0

DP13:

RLCA

MOVP3.0,C

CLRP3.1

SETBP3.1

DJNZR2,DP13

INCR0

DJNZR1,DP12

RET

LEDMAP:

DB3FH,6,5BH,4FH,66H,6DH;0,1,2,3,4,5

DB7DH,7,7FH,6FH;6,7,8,9

END

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

当前位置:首页 > 自然科学

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

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