当前位置:文档之家› 十字路口交通灯设计报告

十字路口交通灯设计报告

1

青岛理工大学琴岛学院

设 计 报 告

课题名称:单片机实训

学 院:青岛理工大学琴岛

专业班级:电子信息科学与技术10—2

学 号:***********

学 生:***

指导教师:**

青岛理工大学琴岛学院教务处

2013年05月04日

2 学 生 *** 指导教师 **

课题名称 基于Proteus的十字路口交通灯设计 设计时间 2012.05.04-2013.05.08

设计地点 八教205机房

设计目的 1、 掌握单片机控制知识,学习扩展外部设备的基本技能。

2、 通过设计学以致用,加强单片机的实践操作能力。

一、课程设计目的和意义

1.目的

十字路口交通灯设计要求接入设备使用简便对应于系统组态的编程简单,具有人性化的人机界面,配备应用程序库加快编程和调试速度。随着城市发展 我国许多大中城市的交通压力都非常大,部分交通路口的信号灯工作时间不合理,交通违章记录不确切。所以改善与提高现有的交通系统的工作效率,加强路口信号灯的控制是非常重要的!在这种背景下,结合我国城市道路交通的实际情况,开发出真正适合我们自身特点的智能信号灯控制系统已经成为当前的主要任务。随着电子技术的发展,利用单片机技术对交通灯进行智能化管理,已成为目前广泛采用的方法。

设计一个十字路口的交通灯控制电路,每条道路上各配有一组红、黄、绿交通信号灯,其中红灯亮,表示该道路禁止通行;黄灯亮表示该道路上未过停车线的车辆禁止通行,已过停车线的车辆继续通行;绿灯表示该道路允许通行。该电路自动控制十字路口两组红、黄、绿交通灯的状态转换,实现十字路口自动化。

在另一方面,通过这一次设计学会单片机方式下扩展I/O接口的方法,学习LED灯的使用,进一步学习MCS-51的编程方法以及学习模拟交通灯控制的实现方法。

2.意义

在日常生活中,交通信号灯的使用,使交通得以有效管理,对于疏通交通流量、提高道路通行能力、减少交通事故有明显效果。交通灯控制系统由AT89C51单片机、键盘、LED显示、交通灯延时组成,系统具有基本交通灯功能,使交通实现有效控制。

为了使行人通过十字路口时更加方便、安全,也使车辆通行秩序化、规范化,就必须设计出更加完善、更加人性化和更加规范化的交通灯,以保障行人和车辆的安全通行,减少社会公共财富的流失。

通过让学生自己设计交通灯的电路和程序,让学生能够掌握ISIS和keil这两个单片机实训当中的常用软件的基本使用方法,并使学生达到能够自己设计基本电路及相关程序的目的,从而使学生进一步的了解这门课程,培养学生在这方面的爱好。

3 二、课程设计的内容

1、设计内容说明

设计基于单片机的智能交通红绿灯控制系统,要求能通过按键或遥控器设置系统参数,系统运行时,“倒计时等信息”能通过数码管或点阵发光管显示,设计时应考虑交通红绿灯控制的易操作性及智能性。以单片机的最小系统为基础设计硬件,用C语言设计软件。

本系统需要采用MSC-51系列单片机AT89C51作为中心器件来设计交通灯控制器,实现以下功能:

初始东西绿灯亮,南北红灯亮,东西方向通车。

延时20s,东西路口绿灯熄灭,黄灯闪烁3次。

黄灯闪烁后,东西路口红灯亮同时南北路口绿灯亮,南北方向开始通车。

延时25s,南北绿灯熄灭,黄灯闪烁5次。

黄灯闪烁后,南北路口红灯亮同时东西路口绿灯亮,东西方向开始通车。

2、相关应用软件简介

(1)、Proteus7与Keil3 C51的原理及仿真

Proteus软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP、WIN7等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。

(2)、Keil3 C51与Proteus的联调:

这是本设计仿真的核心。在所有仿真软件以及编译器之间,只有Proteus和Keil C51之间才能实现C语言编译8051、AVR等系列单片机程序.hex文件和proteus单片机模块的完美联调。在联调中需要用到右图所示的驱动,且需要设置Proteus启动远程调试功能,以及Keil的Option for Target‘Target1’选项中通过修改Tools.int目录调试出“调试”中的“Proteus VSM Simulator”一栏,就可以实现与Proteus的联合仿真。

4 3、设计实现的过程

设计的重点:

(1)、研究交通灯控制系统组成和原理

(2)、熟悉交通灯的控制任务和要求

(3)、深入研究交通灯硬件配置和软件设计

(4)、研究是否需要导入创新

设计思路:

(1)、参阅相关的技术资料,如:顺序控制设计方法,交通灯控制原理等。

(2)、深入了解和分析控制要求,确定控制方案。

(3)、分析方案的可实施性,从而优化并完善方案。

(4)、根据设计要求分配I/O,设计合理的硬件原理图、接线图。

(5)、编写程序并进行仿真调试。

(6)、进一步修改并完善设计。

图1-1

5 具体实现的功能及设定:

在本次实验中,本队使用了单片机仿真方式设计出了较为合理的交通灯方案,我们也对传统交通灯进行了适当改进,使其更适应当今复杂多变的交通环境。

首先设定的是工作方式,只有确定了工作方式才能更好的进行设计电路和程序。

工作方式:

(1)正常显示:

南北亮红灯,从24秒开始倒计时;东西亮绿灯,20秒开始倒计时

东西倒计时到0,绿灯灭,黄灯亮3秒,并倒计时

东西红灯亮,从31秒倒计时;南北绿灯亮,从25秒倒计时

南北倒计时到0,绿灯灭,黄灯亮5秒,并倒计时

(2)信号灯时间调节按钮功能:

SET:按1下为调节东西绿灯显示时间;按2下为调节东西黄灯时间;按3下为调节南北绿 灯时间;按4下为调节南北黄灯时间。调时间时数码管以每秒钟3次的频率闪动,红灯时间=绿灯时间+黄灯时间+1

ADD:时间+1,长按加10

SUB:时间-1,长按减10

(3)紧急情况中断功能

SW1闭合:正常显示状态和调时间状态时闭合,所有计时停止,数码管熄灭,东西南北信号灯统一亮红灯

SW1断开:数码管点亮,继续从中断时间计时,信号灯继续亮红灯,待缓冲倒计时结束后恢复正常信号灯显示

常信号灯显示。

考虑到本系统运行在“自动”时,有很多个环节的运作与东西南北方向通行的倒计时(对时钟脉冲作减计数)有关。例如减计数小于等于3s,黄灯闪动;减计数至0s,红绿灯交替并读入设定值;减计数至当前值,时间牌显示等。因此,选计数型控制器时合适的。具体应该选用输出是两位BCD码的减计数器。

减计数至小与等于3s,黄灯闪动。这意味着,应能将01~03s从计数结果中识别出来,故应有“3秒译码电路”承当对01~03秒的译码任务;并有“黄灯闪动控制电路”控制黄灯的闪动。

减计数至0s,红绿灯交替。与以上分析类似,应有“00秒译码电路”承当对00秒的译码任务;并有“红绿灯交替控制电路”控制红绿灯的交替。减计数至0s,读入设定值,故应利用“00秒译码电路”的输入,使计数器有以读入设定值。设定值分20~60s 5个档,故拥有“设定值读入电路”,能根据开关的选位,给出相应的设定值。

时间牌按秒显示,黄灯每秒闪动两次,故应有“秒脉冲和半秒脉冲发生器”为计数器和黄灯控制提供所需要频率的矩形脉冲。

6 4、重点分析

(1)、延时模块:

void delay_ms(unsigned int a)

{

int i;

while(a--)

{

i = 70;

while(i--);

}

}

注释:

此模块通过一个内置循环,实现程序的延时功能,当运行delay ms()函数时自动循环a*70次。

(2)、紧急中断模块:

void exter0() interrupt 0

{

P1_2=0;

P1_5=0;

P1_3=1;

P1_0=1;

P2=0;

P0=0;

}

注释:

该模块实现的是中断功能,此程序运行时通过给单片机的p1.2、p1.5、p1.3、p2端口置高低电平来实现功能。

(3)、红绿灯切换模块

switch(cntEW)

{

case 1:

scdEW = yellowEW;

P1_3 = 1;

P1_4 = 0;

P1_5 = 1;

cntEW++;

break;

case 3:

scdEW = greenSN + yellowSN + 1;

P1_3 = 1;

P1_4 = 1;

P1_5 = 0;

cntEW++;

break;

相关主题