您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 十字路口交通灯Proteus仿真
1《微机原理与接口技术》课程设计报告题目:十字路口交通灯设计学院:信息工程学院专业:通信工程目录1、摘要.........................................................................................12、硬件电路图.............................................................................23、AT89C51功能介绍................................................................34、交通灯程序设计思路.............................................................55、交通灯运行流程图.................................................................66、源代码函数说明....................................................................627、交通灯设置红绿灯时间结果图............................................88、心得与体会............................................................................99、源程序代码...........................................................................103摘要十字道口的红绿灯是交通法规的无声命令,是司机和行人的行为准则。十字道口的交通红绿灯控制是保证交通安全和道路畅通的关键。当前,国内大多数城市正在采用“自动”红绿交通灯,它具有固定的“红灯—绿灯”转换间隔,并自动切换。它们一般由“通行与禁止时间控制显示、红黄绿三色信号灯和方向指示灯”三部分组成。通常,生活中常见的红绿灯控制为,红灯六十秒,绿灯四十五秒,黄灯三秒等,因道路,车辆,城市交通规划而异,此次,基于proteus仿真十字路口的交通灯控制系统,设定南北方向绿灯15秒,黄灯5s,东西方向绿灯10s,黄灯5s。系统基于MSC-51系列单片机89C51为中心器件来设计交通灯,显示器件为LED红绿灯,LCD数码管。采用c51编程,简单易懂,将功能模块化,除了可以实现红绿灯按要求变化,还通过proteus里的按钮,设置了键盘函数,可以按要求调整红绿灯亮的时间,并且还有重置(初始化)按钮。一.功能概述1.设计任务:交通灯的硬件设计和软件设计2.设计目的:(1).初步了解和认识51单片机的工作原理,引脚图。(2).掌握单片机相关接口技术和相关外围芯片的特性。(3).通过实际的设计程序,查找资料,调试程序,熟悉keil和proteus软件仿真,理解并熟悉模块化程序设计方法和调试。3.基本要求:利用单片机的定时器产生秒信号,控制十字路口的红、绿、黄灯交替点亮和熄灭,并且用4只LED数码管显示十字路口两个方向的剩余时间。当东西方向亮绿灯时,南北方向红灯亮起;反之,如果南北方向亮绿灯,同时东西方向亮绿灯;绿灯亮时车辆行驶,红灯亮时车辆停止。即在同一时间内保证只有两个对应方向的车辆可以行驶。要求能用按键设置两个方向的通行时间(绿、红等点亮的时间)和暂缓通行时间(黄灯点亮的时间)。系统的工作应符合一般交通灯控制的要求。4.设计方案设计系统单片机89C51为中心器件来设计交通灯控制器,系统实用性强、操作简单、扩展性强、成本较低。本设计就是采用单片机模拟十字路口交通灯的各种状态显示。利用单片机完成交通信号灯控制器的设计,该交通信号灯控制器由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,数码管显示剩余时间。红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。用红、绿、黄发光二极管作信号灯,8管共阴极数码管显示剩余时间,矩阵键盘用来设置交通灯的显示时间和状态。4二.硬件电路图一.总体电路图二.部分电路图5。VCC:供电电压GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于2内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。6XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。选用P0口驱动数码管,由于选用的数码管是共阴极两位数码管,因此P0口必须7接上拉电阻才能驱动数码管显示。选用P1口驱动LED红绿灯亮,如此时P1=ox41;选用P2口来产生选通信号,用动态显示驱动的时候P2.0、P2.1、p2.2、p2.3为低电平对应的数码管点亮。XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz-24MHz内选择。电容取30PF左右交通灯程序思路:包含计时功能、动态扫描、以及状态的切换。南北方向各连接了一个数码管,东西方向也各连接了一个数码管,因此定义两组显示时间nbgreen,nbyellow,,dxgreen,dxyellow来分别表示南北东西绿灯时间,黄灯时间。为了让数码管正确显示时间,需要定义四个变量,shi1,ge1,shi2,ge2,将数码管中的“十位”和“个位”提取出来,用动态方式在数码管中显示出来,为了实现红绿灯状态的切换,定义了两个标志变量,count1,count2,通过判断标志变量的取值,来确定红绿灯和数码管显示的值。采用倒计时的方法,运用51单片机的计时电路,产生秒脉冲,当一个数码管的值倒计时到0时,切换成新的状态。状态表南北方向东西方向序号状态序号状态1绿灯亮15s,红黄灯灭1红灯亮20s,黄绿灯灭2黄灯亮5s,红绿灯灭3红灯亮15s,黄绿灯灭2绿灯亮10s,红黄灯灭3黄灯亮5s,红绿灯灭8系统结构图流程图源代码说明:1.延时函数:delay(intx)主要用来控制数码管动态显示,x控制延时长短。2.字路口剩余时间数码管显示函数:display(uchar,uchar,uchar,uchar);给P0东西南北方向的数码管的十位和个位送数据89c51LED共阴极数码管显示LED红黄绿灯开始交通初始化,南北绿灯,东西红灯定时器开始计时1*4按钮控制调用子程序调用键盘按钮9例如,P2=oxfe,P2.0~P2.7=11111110,W0=0,W1=W2=W3=1,(W0.W1,分别接上了南北数码管的控制端,W2,W3分别接上了东西数码管的控制端),W0=0表示南北共阴数码管的十位有效,(共阴极数码管控制端低电平有效),显示shi1(南北数码管值的十位),同理,P2=oxfd,显示ge1(南北数码管值的个位),P2=oxfb,显示shi2(东西数码管值的十位),P2=oxf7,显示ge2(东西数码管值的个位)。3.交通南北东西灯红黄绿工作顺序函数:traffic()。控制交通灯的运行规则4.键盘子函数mkeys()设定四乘四的键盘,从P3口输出数据,P3.0~P3.3作为行输出,P3.4~P3.7作为列输出。P3.4P3.5P3.6P3.7P3.0暂停(按钮1)设置(按钮2)设置完成后重启(按钮3)P3.1南北绿灯+(按钮5)南北绿灯—(按钮6)南北黄灯+(按钮7)南北黄灯—(按钮8)P3.2东西绿灯+(按钮1)东西绿灯—(按钮1)东西黄灯+(按钮1)东西黄灯—(按钮1)P3.3nbnum=0dxnum=5当南北绿灯减到0时,东西的红灯显示5scount=1nbnum=5调整状态南北黄灯亮,显示5snbnum=0dxnum=0南北黄灯,东西红灯都减到0count1=2,nbnum=15count2=1,dxnum=10调整状态,南北红灯亮值为15,东西绿灯亮值为10dxnum=0nbnum=5东西绿灯减到0时,南北红灯显示为5scount2=2dxnum=5,nbnum=5调整状态,东西黄灯亮5snbnum=0dxnum=0南北红灯,东西黄灯都减到0count1=3,nbnum=15count2=3,dxnum=20调整状态,南北绿灯亮值为15,东西红灯亮值为2010例如设计南北绿灯10s,黄灯3s,东西绿灯15s,黄灯3s1.先按下“设置”按钮2.然后按下“按钮5”和“按钮6”,观察南北数码管,此时显示的是绿灯的值。根据观察,设定好绿灯值为10。3.按下“按钮7”和“按钮8”,设定南北数码管,此时显示的是要设定的黄灯的值。根据观察,设定好黄灯值为34.按下“按钮9”和“按钮10”,设定东西数码管,此时显示的是要设定的绿灯的值。根据观察,设定好绿灯值为155.按下“按钮11”和“按钮12”,设定东西数码管,此时显示的是要设定的黄灯的值。根据观察,设定好黄灯值为3结果如图:(1).初始时,南北绿灯,东西红灯(2).南北黄灯,东西红灯11(3).南北红灯,东西绿灯。心得与体会通过这次课程设计,使我掌握了交通灯控制的基本思想与原理,学习到了一些有用的专业知识、专业技能分析和解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,电路图的绘制以及在常用编程设计思路技巧的掌握方面都向前迈了一大步。期间我查阅了许多资料,看了许多例子,也自己试着学习编程与调试。决定做交通灯的设计,是因为它具有实用性,原理很简单,程序思想明确,proteus内置了许多红绿灯的元件,如led灯,数码管等,程序编好后,出现了许多问题,如程序结果不是预期的结果,做好交通灯显示模块后,我参考网上的资料,加入了键盘函数,可以控制交通灯的运行,可以自己设置交通灯亮的时间,键盘的每个按钮的功能虽然简单,但是将其模块化却十分复杂,我体会到编程模块化思想的重要性,程序冗长但不失条理,添加一定的注释方便12理解并运用。由于使用的是单片机作为核心的控制元件,使得电路的可靠性比较高,功能也比较强大,而且可以随时的更新系统,进行不同状态的组合。但是在设计
本文标题:十字路口交通灯Proteus仿真
链接地址:https://www.777doc.com/doc-4141148 .html