基于单片机的交通灯控制系统设计_第1页
基于单片机的交通灯控制系统设计_第2页
基于单片机的交通灯控制系统设计_第3页
基于单片机的交通灯控制系统设计_第4页
基于单片机的交通灯控制系统设计_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于单片机的交通灯控制系统设计摘要:对基于单片机的交通灯控制系统进行了设计。系统功能以MCS-51系列单片机作为控制核心,设计并制作交通灯控制系统,东西南北四个方向具有左拐、右拐、直行及行人四种通行指示灯,用计时器显示路口通行转换剩余时间,在特种车辆如119、120通过路口时,系统可转为特种车辆放行,其他车辆禁止通行状态,即特殊情况;在交通高峰期系统可以转为繁忙情况。在对系统功能分析的基础上,提出了三种设计方案,经比较,选择性能较优的LED动态循环显示方案进行了设计。设计包括硬件和软件两大部分。硬件部分包括单片机最小系统、时间显示、交通灯显示三部分。选用宏晶公司的STC89C52单片机作为控制核心,东西南北四个方向设置了LED时间显示和交通灯显示,时间显示采用两位LED显示器,交通灯显示则采用红、黄、绿色高亮发光二极管来模拟。软件采用了模块化的设计方法,主要分为主程序、定时器中断服务子程序、倒计时显示子程序、交通灯模拟显示子程序四部分。关键词:交通灯;单片机;LED;DesignoftrafficlightcontrolsystembasedonSCMAbstract:自己翻译1概述1.1交通灯的介绍1918年诞生的第一盏交通灯只有红绿两色,它是圆形四面投影器,被安装在纽约市五号街的一座高塔上,它的诞生,使城市交通大为改善。1925年,留学美国的中国电机专家胡汝鼎提出在绿灯之后加个黄灯的设想被采纳,于是诞生了真正意义上的三色交通灯。传统的交通灯主要由单片机来控制,它主要由红黄绿三色灯组成。工作原理是设置好南北向和东西向的各色灯的亮灭顺序和持续时间来指挥车辆通行,交通灯的发明和使用极大地保障了人民的生命安全。1.2课题研究背景与意义随着经济的增长和人口的增加,人们生活方式不断变化,人们对交通的需求不断增加。城市中交通拥挤、堵塞现象日趋严重,由此造成巨大的经济与时间损失。资料显示,对日本东京268个主要交叉路口的调查估计表明:每年在交叉路口的时间延误,折成经济报失为20亿美元;而在我国北京市,当早晚交通高峰时,交叉路口处的排队长度竟达1000多米,有的阻车车队从一个交叉路口延伸到另一个交叉路口,这时一辆车为通过一交叉路口,往往需要半个小时以上,时间损失相当可观。我国是一个历史悠久、人口众多的国家,城市数量随着社会的发展不断增多。随着城市化进程的大大加快,诱发的交通需求急剧增长,供需矛盾不断激化,严重的交通问题也随之而来。人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊,这一切要归功于城市交通控制系统中的交通灯控制系统。交通灯控制系统对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果,使城市交通得以有效管理。交通灯可以采用PLC、单片机等控制方法。利用单片机实现对交通信号灯的实时控制,只要采用一块单片机,加上简单的接口与驱动放大电路,即可实现,具有成本低,可靠性高的特点。1.3课题设计内容本课题对基于单片机的交通灯控制系统进行设计。以MCS-51系列单片机为控制核心,设计并制作交通灯控制系统,用于十字路口的车辆及行人的交通管理。东西南北四个路口具有左拐、右拐、直行及行人4种通行指示灯,并分别用计时器显示路口通行转换剩余时间,在特种车辆如119、120通过路口时,系统可转为特种车辆放行,其他车辆禁止通行状态;还可以在高峰期还可以转换为繁忙状态。设计交通灯控制系统硬件电路与软件控制程序,对硬件电路与软件程序分别进行调试,并进行软硬件联调,要求获得调试成功的仿真图。2整体设计2.1方案的选择与论证根据设计内容要求,提出了如下三种方案:方案一:采用STC89C52单片机作为控制核心,采用四组高亮红色、黄色、绿色二极管作为东西南北四个路口的通行指示灯;采用四组两位LED数码管作为四个路口的通行倒计时显示器,另外一组两位LED数码管作为特殊情况下的倒计时显示,LED显示采用动态扫描方式,以节省端口数。按以上系统构架设计,单片机端口资源刚好满足要求。方案一设计框图如图2-1所示:分组扫描分组扫描P0口STC89C52P2口P3口P1口2位LED显示(5组)上电复位手动键盘;东、南、西、北人行道指示灯东南西北主干道指示灯图2-1方案一:采用LED动态扫描的交通灯控制系统方案二:采用STC89C52单片机作为控制器,通行倒计时显示采用16×16点阵LED发光管,左拐、右拐、直行及行人4种通行指示也采用16×16点阵双色LED发光管。方案二设计框图如图2-2所示,LED点阵的列驱动采用74HC595,用串行端口扩展实现,行驱动采用1/16译码器74HC154动态扫描,译码器74HC154生成16条行选通信号线,再经过驱动器驱动对应的行线。每条行线上需要较大的驱动电流,应选用大功率三极管作为驱动管;方案二设计框图如图2-2所示:RXDRXDTXD单片机I/O口行驱动74HC154双色LED点阵显示(每个路口七个)列驱动74HC595电源图2-2方案二:采用16×16点阵LED发光管设计的交通灯控制系统方案三:采用AT89C2051单片机作为控制器,通行倒计时及左拐、右拐、直行、行人通行指示采用单块LCD液晶点阵显示器。三种方案的特点比较如下:方案一具有电路简单,设计方便,显示亮度高,耗电较少,可靠性高等特点;方案二的图案显示逼真,单片机占用端口资源少,缺点是需要大量的硬件,电路复杂,耗电量大,不太适合于模型制作;方案三设计占用单片机的端口最少,硬件也少,耗电也最少;虽然显示图案也很精美,但由于亮度太暗,晚上还得开背光灯,不够实用。可见方案一优于其他两种方案,因此本设计选用方案一,采用LED动态扫描的方案进行设计。2.2总体方案2.2.1工作原理本设计采用STC89C52RC单片机作为本系统的控制模块,采用单片机内部定时器计时,采用红、黄、绿色高亮发光二极管模拟交通信号指示灯,通过单片机内部程序执行控制红绿灯的亮灭以及数码管倒计时的显示,从而实现十字路口的交通的控制。2.2.2总体设计框图红绿灯红绿灯指示模块51单片机LED倒计时显示模块复位电路按键设置模块电源模块图2-3交通灯系统总体设计框图3仿真软件介绍本设计用到了Proteus和KeilC51两种软件,两者能完美的结合在一起,实现虚拟的实物效果,为以后的实物焊接提供了保障。3.1Proteus简介Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件。Proteus软件除了其具有和其它EDA工具软件的一样的原理布图,还可以电路仿真。不止是对单片机的仿真还对其外围器件进行仿真。其特点是:实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。支持主流单片机系统的仿真。如68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在改软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2等软件。支持大量的外围芯片和存储器,具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。运行Proteus软件出现以下窗口。如图3.1所示图3.1Proteus原理图编辑窗口点击P(元件选择按键),填写元件名称,选择所需要的元件,对于本电路我先添加主电路元件,然后在添加子电路元件,完成后连线,对于不便连接的元件节点,可以采用总线和网络标号的形式。完成后保存,电路图如图3.2所示图3.2仿真电路图3.2KEILC51编译器简介KeilC51软件是KeilSoftware公司推出的uVision3,是一款可用于多种8051MCU的集成开发环境(IDE),该IDE同时也是PK51及其它开发套件的一个重要组件。除增加了源代码、功能导航器、模板编辑以及改进的搜索功能外,提供了一个配置向导功能,加速了启动代码和配置文件的生成。此外其内置的仿真器可模拟目标MCU,包括指令集、片上外围设备及外部信号等。其提供逻辑分析器,可监控基于MCUI/O引脚和外设状态变化下的程序变量。编辑的C或汇编文件,分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的HEX文件,以供调试器使用进行源代码调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。注意晶振的频率,默认的是11.0592MHz,可以根据需要修改。调试时注意PC机与仿真器之间始终保持通信联络,导致独立Keil仿真器上一个指示数据接收的LED不断闪亮。使用KeilC51时,打开界面,并非即刻能够编辑程序的窗口,需要新建文件和设置,其步骤如下:打开Keil的操作界面,在“Project”中选择“NewuVisionProject…”新建一个文件,并命名(注意此时命名时不需要加后缀),如“温湿度”即可,确定后会弹出选择单片机的窗口。在相应的产品里选择所需要的单片机型号,本设计所用的单片机是AtmelAT89S52,则在相应的栏目里选中。然后接下来的窗口选择“是”,然后新建,在页面里面编辑程序,命名,要注意的是这次命名需要加后缀,如“温湿度.c”。在主窗口侧边栏找到“Target1”,右击其子标题栏“SourceGroup1”选择“AddFilestoGroup‘SourceGroup1’”。选择保存的“温湿度.c”文件添加,并在下拉单点击打开,此时,编译开始,指示灯亮。顺序编译,若出现错误,编译窗口下会出现错误提示,双击错误提示,则插入符号将出现在有错的地方,根据提示对程序进行修改,保存,再编译至无错,否则无法生成“HEX”在主菜单栏里选择“Project”按出下拉单,选择“OptionsforTarget‘Target1’”,在该窗口下,将晶振的频率(Xtel(MHz))设置为12MHz,然后选择“Output”在“CreateHEXFile”前面打钩,OK。在继续编译后出现“createhexfilefrom…”图3.3KeilC51软件新建工程界面4PROTEL99软件简介4.1Protel99SE的发展历史Protel是ProtelTechnology公司在20世纪80年代末推出的EDA软件,在电子行业中,它当之无愧地排在众多EDA软件的前面,是电子设计者的首选软件。20世纪90年代中期,Protel推出基于Windows95的3.X版本,采用了新颖的主从式结构,但在自动布线方面却没有出众的表现,而且是16位与32位的混合型软件,运行不太稳定。1998年,Protel公司推出了新版本的Protel98,极大地增强了自动布线能力,从而获得了业内人士的一致好评。1999年,Protel公司又推出了更新一代的电子线路设计系统——Protel99。Protel99SE是Protel99的增强版本,在文件组织方面既可以采用传统的Windows文件格式也可以采用Access数据库文件格式,同时具有更强大的功能和良好的操作性,给设计者的工作带来了更大的便利。4.2Protel99SE的主要特点Protel99SE是一个Client/Server型的应用程序,它提供了一个基本的框架窗口和相应的Protel99SE组件之间的用户接口,在运行主程序时各服务器程序可在需要的时间调用,从而加快了主程序的启动速度,而且极大地提高了软件本身的可扩展性。Protel99SE中的这些服务程序基本上可以分为5大组件,即原理图设计组件、PCB设计组件、布线组件、可编程逻辑器件组件和仿真组件。其中原理图设计组件和PCB设计组件是一般设计工作中的重点,而其他组件可以说是为这两个组件服务的。图2-1Protel99SE打开界面4.2.1原理图设计组件包括电路图编辑器、电路图元件库编辑器和各种文本编辑器。为用户提供了智能化的高速原理图编辑方法,能够准确地生成原理图设计输出,具有自动化的连线工具,同时具有强大的电气规则检测(ERC)功能。其主要特点归纳如下。1.模块化的原理图设计2.具有强大的原理图编辑功能3.功能强大的电气检测4.完善的库元件编辑和管理功能5.同步设计功能4.2.2PCB设计组件进行电路设计最终是要设计出一个高质量的可加工的PCB,这是一个电子产品的基础。因而PCB设计系统的功能往往是用户在选用EDA软件时最关心的,而Protel99SE在这方面做出了突出的表现。1.具有32位高精度设计系统2.丰富而灵活的编辑功能3.功能完善的元件封装编辑和管理器4.强大的布线功能5.完备的设计规则检查(DRC)功能4系统设计4.1硬件设计部分采用LED动态扫描的交通灯控制系统电路原理图见附录。系统由控制模块、通行灯显示模块、时间显示模块、电源模块四部分组成。4.2芯片介绍4.1.1单片机——STC89C51STC89C52是一种低功耗、高性能CMOS八位微控制器,具有8K在系统可编程Flash存储器,使用ATMEL公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许ROM在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使其为众多嵌入式控制应用系统提供灵活的解决方案。1主要特性(1)与MCS-51单片机产品兼容;(2)8K字节在系统可编程FlashROM存储器;(3)256字节RAM;(4)1000次擦写周期;(5)全静态操作:0Hz~33Hz;(6)三级加密程序存储器;(7)32个可编程I/O口线;(8)三个16位定时器/计数器;(9)八个中断源;(10)全双工UART串行通道;(11)低功耗空闲和掉电模式;(12)掉电后中断可唤醒;(13)看门狗定时器T0、T1、T2;(14)双数据指针;(15)掉电标识符。如图4.1所示STC89C52芯片的引脚图图4.1STC89C52引脚VCC:电源GND:地P0口:8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”P1口:具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流P2口:具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动四个TTL逻辑电平。对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动四个TTL逻辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流P3口亦作为STC89C52特殊功能(第二功能)使用,如下表所示。引脚号第二功能P3.0RXD(串行输入)P3.1TXD(串行输出)P3.2(外部中断0)P3.3(外部中断1)P3.4T0(定时器0外部输入)P3.5T1(定时器1外部输入)P3.6(外部数据存储器写选通)P3.7(外部数据存储器读选通)表4.1P3口的特殊功能图4.2单片机IO口RST:复位输入。晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。DISRTO默认状态下,复位高电平有效。ALE/:控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。在Flash编程时,此引脚()也用作编程输入脉冲。在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。这一位置“1”,ALE仅在执行MOVX或MOVC指令时有效。否则,ALE将被微弱拉高。这个ALE使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。:外部程序存储器选通信号()是外部程序存储器选通信号。当STC89C52从外部程序存储器执行外部代码时,在每个机器周期被激活两次,而在访问外部数据存储器时,将不被激活。/VPP:访问外部程序存储器控制信号。为使能从0000H到FFFFH的外部程序存储器读取指令,必须接地。为执行内部程序指令,应该接VCC。在Flash编程期间,也接收12伏VPP电压。XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。XTAL2:振荡器反相放大器的输出端。4.1.2数码管数码管有共阳和共阴之分,根据单片机连接电路,可以计算出数码管的真值表,在编程时调用数码管真值表就可以控制数码管显示相应的信息。图4-2数码管引脚图4.2模块功能介绍4.2.1控制模块控制模块电路如图4-4所示。主控制器采用STC89C52。STC89C52是宏晶公司生产的一款性能稳定的8位单片机,具有1个8KB的Flash程序存储器,1个512字节的RAM,3个16位的定时/计数器,4个8位的双向可位寻址I/O端口,1个串行口,6个中断源,两个中断优先级。STC89C52的P1口用于控制东西南北通行灯,P2口用于控制通行灯,P0口用于2位LED显示器的段码控制,P2口用于,2位LED显示器的位码控制,手动/自动转换采用P3.7扳键。接+5V电源端。晶振及复位按典型电路设计,元器件参数如图2-3中所示。晶振频率为12MHz。图2-3控制模块原理图4.2.2通行灯显示模块通行灯显示模块如图2-4所示。通行灯指示采用高亮度共阴红、黄、绿色发光二极管,左拐、直行、右拐及行人各一组。发光二极管的共阴极通过电阻接地,阳极接P1口或P3口(东西南北为P1口,人行道为P2口)。图2-4通行灯和时间显示模块4.2.3时间显示模块通行剩余时间显示模块如图2-4所示(以北路口为例)。路口通行剩余时间采用高亮红色共阴LED发光数码管显示,采用共阴数码管,如用单片机吸收电流驱动,列扫描驱动使用三级管,按每段6mA电流算,全显示字型“8”时,每个数码管需6mA×8=48mA。由于时间显示每个路口相同,4组需192mA,因此设计中采用反相器以保护单片机的端口。4.2.4复位电路模块单片机复位电路采用按键复位电路,当按键S1按下电容C3充电,RES端口持续两个机器周期后单片机实现复位,其复位电路如下图所示:图3.5按键复位电路4.2.5电源电路电源电路如图2-5所示。整个系统采用的电源电压只需+5V电压,将交流电经变压器变换为15V交流电,再用整流桥得到13.5V左右的直流电,采用不可调的3端稳压器件LM7805将电源稳定在5V直流输出。图2-5系统电源电路4.3原理图与PCB电路图图4-4交通灯系统原理图图4-5交通灯PCB图图4-6交通灯PCB三维视图5软件设计部分软件介绍编程软件采用的是keiluvision2软件,程序采用C语言编程。软件部分经本人调试可以运行,能够正确显示结果。具体模块由一个C(kellen.C)主函数文件和一个h文件构成。H文件如下所示:reg51.h;(8051的相关参数初始化)5.3软件设计算法模拟本系统主要实现由51单片机对交通灯模组进行控制,交通灯模组模拟实际的十字路口情况,分析其规律如下:图1模拟交通灯控制板布局示意图图中:——

表示2位7段的LED数码管(用作倒计时显示);——表示双色LED(用作红黄绿灯);——表示小按键(用来模拟车流)。

这是一个典型的十字路口,分别用1、2、3、4表明四个流向的主车道,用L、S、R、P分别表示各主车道的左行车道、直行车道、右行车道以及人行横道。通过分析得知,除了四个右行车道外,在同一时间,最多只能有两个车道通行,如1L、1S通行时,其它车道都会被阻断。所以在设计红绿灯时,可以两两组合,共有四组(如lL-1S、2L-2S、3L-3S、4L-4S);而各车道的红灯时间和人行横道通停时间都由这四个组合的绿灯时间决定。通行顺序如下图所示。图2-2交通通行顺序5.2主程序框图开始开始系统初始化1L、1S、3R、4R、2P通信各路口倒计时开始2L、2S、4R、1R、3P通信各路口倒计时开始3L、3S、1R、2R、4P通信各路口倒计时开始4L、4S、2R、3R、1P通信各路口倒计时开始结束图5-1主程序流程图5.3主函数解析voidmain(void){ Busy_LED=0; Special_LED=0; timer0_init(); int0_init(); ext_init();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; }}6仿真与调试打开用Proteus软件编辑好的电路图,双击单片机导入程序,如图6-1所示。图6-1程序导入界面导入程序仿真后,如图6-2所示,其结果显示编辑的程序,以及电路图符合设计要求。图6-2仿真结果图图6-3稳压电源仿真电路7总结本次专业课程设计:基于单片机的交通灯控制系统,已经基本完成。通过这次毕业设计,我掌握了一些实践性质的设计的基本步骤:首先,明确设计任务,并且要对市场上控制器要有初步了解,还要知道前人做了哪些工作,本设计方案的可利用程度等等。其次,要对整个设计系统做深入的方案论证、计算并且结合现有实际条件,确立自己的设计方案,进而,就是对自己确立的方案进行硬件实现,包括所用原器件选型,以及控制部分整个单片机系统的硬件选型与设计,并用Protel绘制出整个系统总体电路图。接着我们就进入到软件编程设计了,要画出各部分的大体流程图,弄清楚各个部分实现的功能,最后对整个系统进行软件编程实现。到此为止,这个系统的设计基本上已经完成了,最后就是要经过生产实践的检验,确定我们的设计是否符合实际要求,具有可利用价值。本系统采用的单片机控制,实现对交通灯信号以及时间的显示,用单片机C语言编程,尽可能多的利用程序实现功能,以减少硬件电路,提高了系统的可靠性和可扩展性。整个设计过程同时也是一个很好的学习机会,例如运用Protel绘制电路图,经过这次设计后自己在这方面有很大地进步,画图的熟练度有了明显的提高;在查找资料方面,认识到:图书资料、网络资料和期刊等都很有价值,以后做设计的时候要注意查找完整的资料,不要只偏重一个方面。当然整个设计过程学到的知识和经验远远比运用Protel、学会查找多方资料多得多,这些对于自己以后的学习和工作将受益匪浅。但必须认识到的是,在设计中也存在着不足之处,例如单片机控制系统在可靠性方面相对于可编程控制器(PLC)控制系统略为欠缺,并且自己深入实践不够,所做的系统也不是很完善。但是我想通过以后的学习和努力一定会有所提高,能够做出更好的设计。虽然到现在为止,有些东西我还是不懂和不理解,但我学会了面对问题,自己尽量解决,先分析,然后解决,一条道通不过然后尝试着其它的方法,最终把问题克服掉。最重要的是锻炼了和同学的协作完成任务,提高了合作能力。我感觉这是这次设计过程中收获最大的,这将是我未来的工作中用之不尽宝贵的经验。总体来说,经过这次课程设计,我受益良多,也得到了很多经验。我明白了只有自己真正接触尝试了,才知道自己的真实水平。也使我看清了自己的知识水平与各种综合能力,找出了自己的不足和差距。我将明确自己在今后要奋斗的目标与方向,勇往直前。致谢感谢老师、学校、同学、父母等。自己写参考文献1.周润景,张丽娜.基于PROTEUS的电路及单片机系统设计与仿真.北京航空航天大学出版社,20062.李朝青.单片机原理及接口技术.北京航空航天大学出版社.20093.沈德金,陈粤初.MCS-51系列单片机接口电路与应用程序实例.北京航空航天大学出版社.19904.数字电子技术基础.高等教育出版社.2001.8.胡汉才.单片机原理及接口技术.清华大学出版社.1996.9.何利民.MCS-51系列单片机应用系统设计系统配置与接口技术[M].北京:北京航空航天大学出版社,200110.百度、谷歌、电子发烧友、VeryCD互联网共享等网站。附录源程序/***********************************************************十字路口交通灯控制C程序***********************************************************/#include<reg51.h>typedefunsignedcharuint8;typedefunsignedintuint16;/*****定义控制位*******************************************/sbitTime_Show_LED2=P2^5;//Time_Show_LED2(直行时间显示)控制位sbitTime_Show_LED1=P2^4;//Time_Show_LED1(直行时间显示)控制位sbitEW_LED2=P2^3; //东西数码管个位控制sbitEW_LED1=P2^2; //东西数码管十位控制sbitSN_LED2=P2^1; //南北数码管个位控制sbitSN_LED1=P2^0; //南北数码管十位控制sbitSN_Yellow=P1^6;//SN黄灯sbitEW_Yellow=P1^2;//EW黄灯sbitNomor_Button=P3^5;//交通正常按键sbitBusy_Btton=P3^6;//交通繁忙按键sbitSpecial_Btton=P3^7;//交通特殊按键sbitSpecial_LED=P2^6;//交通特殊指示灯sbitBusy_LED=P2^7;//交通繁忙指示灯sbitEW_ManGreen=P3^0;//EW人行道绿灯sbitSN_ManGreen=P3^1;//SN人行道绿灯sbitEW_ManRed=P3^3;//EW人行道红灯sbitSN_ManRed=P3^4;//SN人行道红灯bitFlag_SN_Yellow;//SN黄灯标志位bitFlag_EW_Yellow;//EW黄灯标志位charTime_EW;//东西方向倒计时单元charTime_SN;//南北方向倒计时单元uint8EW=60,SN=40,EWL=19,SNL=19;//程序初始化赋值,正常模式uint8EW1=60,SN1=40,EWL1=19,SNL1=19;//用于存放修改值的变量codeuint8table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//1~~~~9段选码codeuint8S[8]={0x28,0x48,0x18,0x48,0x82,0x84,0x81,0x84};//交通信号灯控制代码/**********************延时子程序**************************/voidDelay(uint8a){ uint8i; i=a; while(i--);}/*****************显示子函数******************************/voidDisplay(void){ uint8h,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中断服务程序******************/voidineterrupt_extern0(void)interrupt0{ 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{ staticuint8counter; TH0=0x3C; TL0=0xB0;//定时器定时20ms重新装入初值 counter++; if(counter==10) { if(Flag_SN_Yellow==1)//测试南北黄灯标志位 { SN_Yellow=~SN_Yellow; } if(Flag_EW_Yellow==1)//测试东西黄灯标志位 { EW_Yellow=~EW_Yellow; } } if(counter==20) { Time_EW--; Time_SN--; if(Flag_SN_Yellow==1)//测试南北黄灯标志位 {SN_Yellow=~SN_Yellow;} if(Flag_EW_Yellow==1)//测试东西黄灯标志位 {EW_Yellow=~EW_Yellow;} counter=0; }}voidtimer0_init(){ TMOD|=0x01; TMOD&=0x01; //定时器0工作方式设置 TH0=0x3C; TL0=0xB0; //定时器定时20ms装初值 TR0=1; //打开定时器0}voidint0_init()//定时器0初始化子函数{ ET0=1; //定时器0中断使能打开 EA=1; //CPU总中断使能打开 }voidext_init()//外部中断初始化子函数{ IT0=1; //INT0负跳变触发 EX0=1;//开外部INTO中断 }/*********************主程序开始***********************/voidmain(vo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论