职场文秘网

首页 > 领导讲话 > 宣传讲话 / 正文

智能交通系统毕业论文

2020-11-14 20:22:39

智能交通系统毕业论文 摘 要 随着现代社会的快速发展,各种各样的交通工具成为了代步工具,特别是近年来小汽车的普及,加重了现有交通资源的压力。优化交通网络可以缓解交通压力,但是投入成本较高,还要受很多环境因素的影响,对于道路交通的控制方法和控制技术的优化显得更容易实现,而交通灯是整个交通网的指挥系统。

本文研究的是以STC89C52RC单片机为控制器的智能交通灯控制系统,该系统在基础交通灯系统的基础上增加了如下功能:(1)自动实时监测车流量并将传回的数据进行处理,动态分配不同方向的通车时间,最大程度优化交通道路资源;
(2)紧急情况强制转换通车;
(3)根据车流量自动进入夜间模式等功能。本设计进行软硬件整体设计,并利用PROTEUS软件进行软件仿真,并进行了硬件板卡实现。

关键词:智能交通灯;
STC89C52;
智能控制;
74HC573 ABSTRACT With the rapid developments of modern society, all kinds of traffic tools has become the transport, especially the popularity of the car in recent years, which increased the pressure of the existing transport resources, Although optimizing the transportation networks can ease traffic pressure, the cost is higher,and which is influenced by many environment factors also.Optimizing the control methods and control technologies are more easy to implement, and the traffic light is the core command system for entire transportation network. This paper has researched the controller of the intelligent traffic light control system based on STC89C52RC single-chip microcomputer.The system of traffic lights on based system increased automatic real-time monitoring on the basis of the number of cars and will be back to the data, the dynamic distribution of different directions of traffic time, maximum optimization of traffic resources; Emergency coercion; According to the number of cars and the time, the control system can enter the night mode automatically. This design carries on the overall design flow of software and hardware, using the PROTEUS software for simulation, and the circuit board was implemented at last. KeyWords:Intelligent traffic lights; STC89C52; Intelligent control; 74 hc573 目 录 第一章 绪论 1 1.1 智能交通系统发展史 1 1.2 智能交通系统的发展现状 1 1.3 智能交通灯研究的意义 2 第二章 系统总体方案设计 3 2.1 通行状态设计 3 2.2 交通灯系统的功能设计 4 2.3 系统总体框图 5 第三章 硬件电路设计 6 3.1 STC89C52RC单片机简介 6 3.1.1 STC89C52RC主要特性 6 3.1.2 STC89C52RC单片机的工作模式 7 3.1.3 STC89C52RC引脚功能说明 7 3.2 各模块电路设计 12 3.2.1 时钟电路 12 3.2.2 复位电路 13 3.2.3 强制转换电路 13 3.2.4 车流量检测电路 13 3.2.5 数码管显示电路 14 3.2.6 红绿灯显示电路 14 第四章 软件设计 16 4.1 程序主体设计 16 4.2 模块化程序设计 17 4.2.1 主程序 17 4.2.2 初始化函数 17 4.2.3 定时函数 18 4.2.4 毫秒延时函数 18 4.2.5 交通灯函数 18 4.2.6 数码管显示函数 19 4.2.7 强制转换函数 20 第五章 仿真测试 21 5.1 软件仿真 21 5.2 硬件仿真 23 5.3 功能测试 26 第六章 总结 27 参考文献 28 致 谢 29 附录:
源程序 30 第一章 绪论 1.1 智能交通系统发展史 随着社会的快速发展和人口数量的急剧上升,有限的道路资源已经无法满足时代的需要,交通控制也就应运而生。交通控制在人类社会生产和生活中起着越来越重要的作用,没有有序的交通控制,我们的交通网将陷入瘫痪状态。同样,交通控制也在随着我们社会和科学的进步而发展,由最初的人工手动控制发展到机械控制,再发展到电气控制,到现在发展为今天的智能交通系统(ITS,Intelligent Transportation Systems)。

交通灯是交通控制的重要手段,早在19世纪就出现了最原始的交通灯。19世纪初,在英国约克城女性穿着不同颜色的衣服代表不同的身份。在交通灯出现之前,马车压人事件时常在英国会议大厦前上演。直到1868年12月,英国著名机械设计师德· 哈特由红绿色的服装代表不同身份这件人们习以为常的事情中受到了启发,于是他设计了英国也是世界上第一盏交通灯,它是在7米高的灯柱上挂着两盏红绿颜色的煤气灯,通过牵动皮带将不同颜色的灯提上来来告诉是通行还是禁行,最初的交通灯是煤气交通灯,不幸的是第一盏煤气交通灯仅面世23天就因为煤气爆炸炸死人而被迫停止。

爆炸噩梦一直影响着人们,销声匿迹几十年后终于在1914年,通过不断的实验研究,世界上第一台电气信号灯在美国克利夫兰市诞生了。但是到1918年为止,世界上各种各样的交通灯都还是只有红绿两种颜色。伴随着交通的发展和需要,第一盏名副其实的交通信号灯在1918年诞生了,它有红黄绿三种颜色组成,一直延续到今天,我们还是在使用三色交通信号灯。虽然三色信号灯诞生在美国,但是黄色信号灯的发明者是我国当时在美国深造的胡汝鼎。他怀着“科学救国”的抱负到美国深造,当时他在美国通用电器公司工作,某天,他在十字路口看到变为红灯时准备走过去,正好一辆转弯的汽车呼啸而过,差点撞到他,于是他反复思考,终于想到在绿色和红色之间加一个黄色灯提醒人们。他把这一想法反映给有关部门,很快这个建议得到了肯定,并应用到实际中。

1928年在上海的英租界出现的红绿灯是中国最早的交通灯。

1.2 智能交通系统的发展现状 纵观国际上的智能交通系统,在20世纪六七十年代智能交通系统开始萌芽。随着现代社会的快速发展和技术的进步,智能化系统逐步发展到交通系统,智能交通系统包括车辆控制系统、车辆监控系统、车辆高度管理系统。通过监控系统实时监测各路段的实时路况,然后通过卫星联网,实现管理中心与驾驶员的双向通讯,及时告知该路段中驾驶员附近路段的实时路况,避免走拥堵线路,通过这样进行高度管理,然后是汽车本身的智能化,可以根据卫星定位第一时间了解目前所在地和目的地之间的路况,智能提供最优路线给驾驶员。因此,实时性、系统性和交互性是智能交通系统的主要特点。

首先,实时性至关重要,如果监控、采集的数据不是实时的将没有任何意义,就不能有效的做到预防交通拥堵,因此,采集的交通数据要第一时间通过网络发送到交通管理中心,再通过管理中心针对性的将数据发送到相关区域中的驾驶员。

其次是系统性,交通网相互交织,非常复杂,但是必须由点到面,将各个路段的信息收集到一起,再由交通管理中心统一调度,系统管理,这样的交通才能井然有序。

最后是交互性,是智能交通系统中最难的,它不再是单纯的某种技术,而是将各种最先进的技术进行交互式组合形成的。涉及电子、通信、信息、交通工程和系统工程等诸多学科,就是将信息、计算机、数据通信、传感器、自动控制、运筹学、互联网进行有效的组合形成最终的智能交通系统。

智能交通系统通过传播实时的交通信息使出行者对自己所处的实时交通环境有一个全面的了解,进而选择最适合自己出行的路线,最大程度地缓和了道路堵塞、减少了环境污染和交通事故,提高了交通利用者的方便、舒适度。

1.3 智能交通灯研究的意义 现代社会交通拥堵严重,不仅浪费了很多时间,还加重环境的污染和交通事故率的增加,交通问题会造成巨大的经济损失。交通运输关系到国家经济的兴衰,是经济建设的重要组成部分。同时,交通问题也是一个世界性难题。作为智能交通系统的核心部分,智能交通灯的发展对智能交通系统有着决定性的作用。

第二章 系统总体方案设计 2.1 通行状态设计 十字路口车辆通行状态有四种,假设为东西方向和南北方向,四种状态如图2.1:
南北向绿灯、东西向红灯 南北向黄灯、东西向红灯 南北向红灯、东西向绿灯 南北向红灯、东西向黄灯 图2.1 四种通行状态 系统工作时按照上面四个状态依次循环工作,任何时刻只能有一个方向的车通行,四个状态的工作流程如下:
(1)南北向通行,东西向禁行,南北向绿灯55秒(初始值,工作一个周期后会根据车流量变化);

(2)南北向和东西向都禁行,南北向黄灯5秒(值不变);

(3)南北向禁行,东西向通行,东西向绿灯55秒(初始值,工作一个周期后会根据车流量变化);

(4)南北向和东西向都禁行,东西向黄灯5秒(值不变);

状态(4)完成后又变换到状态(1),反复循环。

红绿灯的状态表如下表2.1所示:
表2.1 红绿灯状态表 状态1 状态3 状态4 状态6 东西红灯 0 0 1 1 东西黄灯 1 1 1 0 东西绿灯 1 1 0 1 南北红灯 1 1 0 0 南北黄灯 1 0 1 1 南北绿灯 0 1 1 1 说明:1表示灭,0表示亮 2.2 交通灯系统的功能设计 除了常见的基本功能外还增加了车流量检测及自动控制红绿灯时间的功能,提高车辆行驶效率;
为了让特殊车辆快速通行,增加了强制转换功能;通过对车流量的统计,当某段时间内通过的车辆数量总和小于某数时将自动进入闲时模式。

(1)车辆检测技术 随着车辆拥有率的不断升高,道路拥堵特别是十字路口的堵塞变得尤为严重,因此,提高十字路口的通行效率也变得尤为重要,这就需要实时的按照车流量的多少智能调整两个方向的红绿灯时间,最大程度的保证车辆的通行。现今的检测技术主要有红外线检测器、地磁检测器、机械压电检测器、磁频检测器、波频检测器、视频检测器等。红外检测车流量是通过使用红外对接管,一个发射,一个接收,能接收到红外是一个电平(有高有低,看硬件参数的),有车的时候会挡住红外的接收,这样接收不到红外,没有车的时候一直可以接收到红外,这样一高一低电平通过单片机计数器可以实现车流量统计,本设计以120秒为一个检测周期,对采集到的数据进行运算,再分配两个方向的绿灯时间,例如南北方向的车流量为SN,东西方向的车流量为WE,那么南北方向下一个周期的绿灯时间为Tsn=(120-10)*SN/(SN+WE),舍去小数部分取整数,东西方向的绿灯时间为Twe=120-10-Tsn,公式中减去的10秒为两次5秒黄灯时间。一个周期是固定,但是不能让一边的时间太短或者太长,所以当任何一边的绿灯时间大于90秒时都取90秒,当任何一边的时间小于20秒时都取20秒。由于没有红外对接管,这里使用按键代替。

(2)强制转换功能 每次看到路上的急救车或者消防车被红绿堵在车流中,都是既焦急又无奈,因此设计了强制转换功能,当某个方向有特殊车辆只需按下该方向的强制转换按钮即可立即让该方向的车辆优先通过,这样就为消防和医院的急救争取了时间。

(3)闲时模式 当车流量很少时,特别是夜间,每个方向的车流量都很少,有时甚至没有,这样如果时间设置的很长很容易让司机产生焦虑,因而不顾交通规则强行通过,车流量很少的时候车速往往很快,这样很容易产生交通事故。通过车流量检测,当两个方向的车辆总数少于一定数量时将自动进入闲时模式,即每个方向都是15秒绿灯时间,一旦车流量超过设置的数值时会自动恢复到正常工作状态。

2.3 系统总体框图 系统外接5V直流电源,并和内部时钟电路、复位电路构成单片机最小系统。在最小系统的基础上,由按键电路和检测电路组成输入电路,按键控制特殊情况强制转换,检测电路实时车流量检测,单片机对输入的信号进行运算和处理,产生输出信号,用来控制交通灯模块和数码管驱动,再通过数码管驱动控制数码管显示剩余时间。

电源 交通灯模块 单片机(MCU) STC89C52 时钟电路 数码管驱动模块 (74HC573) 复位电路 按键电路 检测电路 数码管显示 图2.2 系统总体框图 第三章 硬件电路设计 此设计以STC89C52单片机为主控制器,搭载按键、红外对管、发光二极管、数码管驱动及数码管,构成一个完整的智能交通灯系统。总电路图如图3.1所示:
图3.1 总体硬件电路图 通过单片机控制红外对管,当车辆通过时会不停的阻断红外信号,就会产生不断变化的高低电平,计数器T0和T1分别对东西和南北向的车流量进行计数,然后通过单片机计算东西向和南北向下一个周期的绿灯时间分别是多少,再将数据传给数码管驱动和交通灯,最后通过数码管驱动控制数码管显示剩余时间。本设计的硬件核心是单片机(MCU),型号是STC89C52RC。

3.1 STC89C52RC单片机简介 STC89C52RC单片机是深圳宏晶公司设计的一款高速、低功耗的单片机,并且兼容传统8051单片机。

3.1.1 STC89C52RC主要特性 (1)增强型8051单片机,有6和12两个时钟/机器周期可以任意选择,完全兼容传统8051 (2)工作电压:5V单片机(5.5V~3.3V)/3V单片机(3.8V~2.0V) (3)频率范围:0~40MHz,实际工作频率可达48MHz (4)用户应用程序空间ROM为8K字节 (5)片上集成512字节数据存储空间RAM (6)通用I/O口(32个) (7)支持ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器和仿真 器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序 (8)具有EEPROM功能 (9)具有看门狗功能 (10)共3个16位定时器/计数器 (11)PDIP40封装 3.1.2 STC89C52RC单片机的工作模式 (1)正常工作模式:典型功耗4mA~7mA (2)空闲模式:典型功耗2mA (3)掉电模式:典型功耗<0.1μA,可由外部中断唤醒,中断返回后,继续执行原程序 3.1.3 STC89C52RC引脚功能说明 STC89C52RC引脚图如图3.2所示 VCC(40引脚):电源电压 GND(20引脚):接地 P0端口(39~32引脚):P0口是一个漏极开路的8位双向I/O口。P0口可以作为普通的I/O口使用,但需加上拉电阻构成准双向口。当作为普通I/O口输入 时,应先向端口的输出锁存器写入1。在访问外部程序和数据存储器时,P0口可 以作为地址总线(低8位)和8位数据的分时复用总线。

P1端口(1~8引脚):8位准双向I/O口,具有内部上拉电阻。P1口是专为用户使用的准双向I/O口,当作为普通I/O口输入时,应先向端口的输出锁存器 写入1。

此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX),这是和89C51的区别。具体参见下表3.1:
在对Flash ROM编程和程序校验时,P1接收低8位地址。

表3.1 P1.0和P1.1引脚复用功能 引脚号 功能特性 P1.0 T2(定时器/计数器2外部计数输入),时钟输出 P1.1 T2EX(定时器/计数器2捕获/重装触发和方向控制) 图3.2 STC89C52RC引脚图 P2端口(P2.0~P2.7,21~28引脚):P2口是一个带内部上拉电阻的8位向I/O端口。P2的输出缓冲器可以驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。P2口可以作为地址总线(高8位)。

P3端口(P3.0~P3.7,10~17引脚):8位准双向I/O口,具有内部上拉电阻。P1口是专为用户使用的准双向I/O口,当作为普通I/O口输入时,应先向端口的输出锁存器写入1。

P3口除作为一般I/O口外,还有第二种复用功能,如下表所示:
表3.2 P3口引脚复用功能 引脚号 复用功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 (外部中断0) P3.3 (外部中断1) P3.4 T0(定时器0的外部输入) P3.5 T1(定时器1的外部输入) P3.6 (外部数据存储器写选通) P3.7 (外部数据存储器读选通) RST(9引脚):复位信号输入端,高电平有效。当单片机运行时,该引脚维持大于两个机器周期(24个时钟振荡周期)的高电平时,单片机将进行复位。在单片机正常工作时,该引脚电压低于0.5V。

ALE/(30引脚):ALE为低8位地址锁存允许信号。在系统扩展时,ALE的负跳沿将P0口发出低8位地址锁存在外接地址锁存器中,然后P0口再作为数据端口,以实现P0口的低8位地址和数据分时传送。

此外,单片机运行时,ALE端一直有正脉冲信号输出,此频率为时钟振荡器频率的1/6,该正脉冲信号可以作为时钟源或者定时信号使用。但是要注意的是,每次单片机访问外部RAM时要丢失一个ALE脉冲。因此,严格的说用户不宜用ALE作为精确的时钟源或者定时信号。

为该引脚的第二功能,在对片内Flash存储器编程时,此引脚作为编 程脉冲输入端。

(29引脚):片外程序存储器的读选通信号。在单片机读外部程序存储器时,此引脚输出脉冲的负跳沿作为读外部程序存储器的选通信号。此引脚接外部存储器的端,在访问外部RAM时,信号无效。

/VPP(31引脚):外部程序存储器访问允许控制端。为低电平时,单片机访问从0000H到FFFFH的外部程序存储器,内部程序存储器不起作用。当为高电平时,单片机读取内部程序存储器。VPP为该引脚第二功能,是编程电压输入端。在对片内Flash固化编程时应加+5V或+12V电压。

XTAL1(19引脚):片内振荡器反相放大器和内部时钟发生电路的输入端。

XTAL2(18引脚):片内振荡器反相放大器的输出端。

3.1.4 特殊功能寄存器(SFR) 在STC89C52RC片内存储器中,80H~FFH共128个单元位特殊功能寄存器(SFR),SFR的地址空间如下表3.3所示:
表3.3 STC89C52RC的特殊功能寄存器 特殊功能寄存器符号 名称 字节地址 位地址 B B寄存器 F0H F7H~F0H A(Acc) 累加器 E0H E7H~E0H PSW 程序状态字 D0H D7H~D0H TH2 定时器/计数器2(高字节) CDH — TL2 定时器/计数器2(低字节) CCH — RCAP2H 定时器2 16位扑捉/自动重载(高字节) CBH — RCAP2L 定时器2 16位扑捉/自动重载(低字节) CAH — T2MOD 定时器/计数器2方式控制 C9H — T2CON 定时器/计数器2控制 C8H CFH~C8H IP 中断优先级控制 B8H BFH~B8H P3 P3口 B0H B7H~B0H IE 中断允许控制 A8H AFH~A8H P2 P2口 A0H A7H~A0H SBUF 串行数据缓冲器 99H — SCON 串行控制 98H 9FH~98H P1 P1口 90H 97H~90H TH1 定时器/计数器1(高字节) 8DH — TH0 定时器/计数器0(高字节) 8CH — TL1 定时器/计数器1(低字节) 8BH — TL0 定时器/计数器0(低字节) 8AH — TMOD 定时器/计数器方式控制 89H — TCON 定时器/计数器控制 88H 8FH~88F PCON 电源控制 87H — DPH 数据指针高字节 83H — DPL 数据指针低字节 82H — SP 堆栈指针 81H — P0 P0口 80H 87H~80H 并非所有的地址都被定义,从80H~FFH共128个字节只有一部分被定义。还有相当一部分没有定义。对没有定义的单元读写将是无效的,读出的数值将不确定,而写入的数据也将丢失。

不应将“1”写入未定义的单元,由于这些单元在将来的产品中可能赋予新的功能,在这种情况下,复位后这些单元数值总是“0”。

STC89C52RC和其他89C51一样都有T0、T1两个定时器/计数器,都具有四种工作方式,通过工作方式控制寄存器TMOD进行模式和工作方式的选择,TMOD格式如表3.4所示:
表3.4 TMOD格式 D7 D6 D5 D4 D3 D2 D1 D0 GATE C/ M1 M0 GATE C/ M1 M0 T0方式字段 T1方式字段 TMOD各位功能如下:
(1)GATE——门控位 GATE=0时,仅用运行控制位TRx(x=0,1)来控制定时器/计数器计数;

GATE=1时,需用外中断引脚上的高电平与运行控制位TRx共同控制定时器/计数器计数。

(2)M1、M0——工作方式选择位 M1、M0有四种编码,分别代表四种工作方式,如表3.5所示 表3.5 M1、M0工作方式选择 M1 M0 工作方式 0 0 方式0: 13为定时器/计数器 0 1 方式1: 16位定时器/计数器 1 0 方式2:
8位的常数自动重新装载的定时器/计数器 1 1 方式3:
仅适用于T0,此时T0分成两个8位的计数器,T1停止计数 (3)C/——计数器模式和定时器模式选择位 C/=0,为定时器模式,对晶振12分频后的脉冲进行计数。

C/=1,为计数器模式,计数器对外部引脚T0或T1的外部脉冲(负跳变) 计数。

TCON 有八位,可按位寻址,该设计中只需用到高四位,故只对高四位进行说明:
(1)TF1/TF0——计数溢出标志位 当计数器溢出时,该位置“1”,应软件清“0”。

(2)TR1/TR0——计数运行控制位 该位置“1”时启动定时器/计数器工作;

该位清“0”时停止定时器/计数器工作。

STC89C52RC除了有定时器/计数器0和定时器/计数器1之外,还增加了一个定时器/计数器2。控制和状态位分别位于T2CON(见表3.6)和T2MOD(见表3.7)。

定时器2是一个16位定时/计数器,它既可以做定时器,又可以做事件计数器。其工作方式由特殊寄存器T2CON中的C/T2位选择。定时器2有三种工作模式:捕捉方式、自动重载和波特率发生器。工作模式由T2CON中的相关位选择(如表3.8所列)。定时器2 有2 个8位寄存器:TH2和TL2。

表3.6 特殊功能寄存器T2CON CFH CEH CDH CCH CBH CAH C9H C8H TF2 EXF2 RCLK TCLK EXEN2 TR2 C/ CP/ 表3.7 定时器2模式控制寄存器(T2MOD) D7 D6 D5 D4 D3 D2 D1 D0 - - - - - - T2OE DCEN 表3.8 定时器2工作方式 RCLK+TCLK CP/ TR2 模式 0 0 1 16位自动重装 0 1 1 16位捕获 1 X 1 波特率发生器 X X 0 (关闭) 自动重装模式该模定时器2递增计数到0FFFFH,并在溢出后将TF2置位,然后将RCAP2L 和RCAP2H中的16位值作为重新装载值装入定时器2。RCAP2L和RCAP2H的值是通过软件预设的。

3.2 各模块电路设计 3.2.1 时钟电路 时钟可以由内部方式产生或外部方式产生。内部方式的时钟电路如图3.3(a) 所示,在XTAL1和XTAL2引脚上外接定时元件,内部振荡器就产生自激振荡。定时元件通常采用晶振和两个30pF电容组成的并联谐振回路。

外部方式的时钟电路如图3.3(b)所示,XTAL1接地,XTAL2接外部振荡器。

(a)内部方式时钟电路 (b)外部方式时钟电路 图3.3 时钟电路 3.2.2 复位电路 复位就是对单片机的进行初始化操作。其主要功能就是将PC值初始化,使单片机从0000H单元开始执行程序。复位除了进入系统的正常初始化之外,当系统处于死循环状态时,为正常工作,可以按复位键重新启动。此设计采用的是按键电平复位,如图3.4所示:
图3.4 复位电路 3.2.3 强制转换电路 强制转换电路是在有特殊车辆或者紧急情况需要一边马上通行的情况下,按下相应的按键,该方向就会一直保持绿灯,紧急情况解除时只需要按复位键即可进入正常模式。

如图3.5所示,正常模式下P3.0和P3.1脚都是高电平,当按下南北向按键时P3.1脚会检测到低电平,通过程序控制使南北向绿灯常亮,东西向保持红灯亮;
反之,当按下东西向按键时,P3.0脚会检测到低电平,此时,东西向绿灯常亮,南北向保持红灯亮。

图3.5 强制转换电路 3.2.4 车流量检测电路 如图3.6所示,东西向检测按键接单片机P3.4脚,南北向接P3.5脚,初始状态两引脚都是高电平,当有车辆通过时,按键将被压下闭合,使得对应引脚变为低电平,计数器接收到该信号将自动加1,计数以120秒为一个周期,当到达120秒时计数器将自动置零重新计数。通过对计数器的数据进行运算,分配南北向和东西向的绿灯时间。

图3.6 车流量检测电路 3.2.5 数码管显示电路 如图3.7所示,两个74HC573锁存器,U2是位选锁存器,U3是段选锁存器,当锁存引脚为高电平时为直通状态,当为低电平时为锁存状态,锁定后数据将不再变化,直到解除锁定,通过一定的延时可以实现数码管的动态显示,但是由于延时时间很短,肉眼无法分辨,所以我们看到的是静态的。

图3.7 数码管显示电路 3.2.6 红绿灯显示电路 如图3.8所示,所有发光二极管正极接正5V电压,通过控制负 极的电平来决定是否点亮,例如,当P0.0脚为低电平时,南北方向的 红灯将被点亮,当P0.0为高电平时,南北方向的红灯将熄灭。

图3.8 红绿灯显示电路 特别需要注意的是,因为P0口内部是漏极开路型,所以在做I/O口使用时需要加上上拉电阻,否则电流不足以驱动发光二极管。如图3.9所示:
图3.9 P0口接上拉电阻 第四章 软件设计 4.1 程序主体设计 本设计采用keil软件进行软件设计,编译后生成hex文件可供proteus进行软件仿真和硬件下载到单片机仿真。软件系统由很多模块组成:主程序、初始化程序、延时函数、定时函数、交通灯函数、数码管动态显示函数、东西向和南北向强制转换函数等。对它们进行有序的组合才能让系统正常工作。程序流程图如图4.1所示:
开始 初始化 设定初值 P3.0和P3.1电平检测 东西向红灯 P3.0为低电平 P3.1为低电平 南北向绿灯 东西向绿灯 南北向黄灯5秒 南北向车流量 东西向车流量 南北向红灯 东西向绿灯 南北向红灯 南北向绿灯 东西向红灯 东西向黄灯5秒 图4.1 程序流程总图 4.2 模块化程序设计 4.2.1 主程序 在C语言中有且必须有一个主函数main,都是从main函数开始执行,又是以main函数结束。

void main(void) { init(); //初始化函数 k1=1; k2=1; for(;;) { light(); led(); changewe(); changesn(); } } 首先调用初始化函数,然后将强制转换按钮置高电平,最后进入一个for循环这是一个死循环,循环中调用了很多子程序,如交通灯函数、数码管显示函数、东西向和南北向的强制转换函数。

4.2.2 初始化函数 初始化函数是对计数器和定时器的一些模式和工作方式进行选择、赋初值以及启动计数器和定时器。我们需要对计数器T0、T1和定时器T2赋初值,因为计数器都是从0开始计数,故将计数器的初值都赋值为0,因为工作在方式1,所以,最大计数65536次,对于定时器T2,工作在16位自动重装模式,晶振频率为12MHz,故计数周期为T=12/12MHz=1us,最多计时65.5ms就会溢出,因此采用50ms计时,初值为X=65536-50000,所以RCAP2H = (65536-50000)/256,RCAP2L = (65536-50000)%256。

void init(void) { T2CON=0x01; //16位自动重装 TMOD = 0x55; //计数器T0、T1,工作方式1 TH0=0; //计数初值清0 TL0=0; //计数初值清0 ET0=1; //使T0中断可以溢出 EA =1; //开启总中断 IT0=1; TR0=1; //计数器0启动 TH1=0; //计数初值清0 TL1=0; //计数初值清0 ET1=1; //使T1中断可以溢出 IT1=1; TR1=1; //计数器1启动 RCAP2H = (65536-50000)/256;//晶振12M 60ms 16bit 自动重载 RCAP2L = (65536-50000)%256; ET2=1; //打开定时器中断 TR2=1; //打开定时器开关 } 4.2.3 定时函数 定时函数是通过定时器T2进行定时,主要有两个定时,一个是1秒定时,当一秒到了数码管显示时间将进行减1操作;
另外一个是120秒定时,本设计以120秒为一个周期通过计数器T1和T0分别对南北向和东西向车流量进行计数,然后对数据进行运算,求出两个方向的绿灯时间,最后对计数器清零,重新开始计数。

4.2.4 毫秒延时函数 void delay(uchar t) { uchar i; for(t;t>0;t--) { for(i=120;i>0;i--); } } 单片机的晶振是12M时,通过keil仿真该延时函数接近1ms(0.986us)的时间。其他函数中有很多地方需要用到延时函数,比如数码管动态显示、按键的消抖都需要很短暂的延时。

4.2.5 交通灯函数 void light() { P0=c[k]; } 交通灯由12个发光二极管组成,正极都接在正5V电压上,因为通过P0口控制发光二极管负极的高低电平来点亮或者熄灭发光二极管,该函数中通过在不同时间把数组c[4]={0x33,0x35,0x1E,0x2E}的某个元素赋值给P0口来控制交通灯。

4.2.6 数码管显示函数 void led() { P2=b[0]; //南北向个位数码管位选 L2=1; L2=0; P2=a[SN%10]; //南北向个位数码管段选 L1=1; L1=0; delay(20); P2=b[1]; //南北向十位数码管位选 L2=1; L2=0; P2=a[SN/10]; //南北向十位数码管段选 L1=1; L1=0; delay(20); P2=b[2]; //东西向个位数码管位选 L2=1; L2=0; P2=a[WE%10]; //东西向个位数码管段选 L1=1; L1=0; delay(20); P2=b[3]; //东西向十位数码管位选 L2=1; L2=0; P2=a[WE/10]; //东西向十位数码管段选 L1=1; L1=0; delay(20); } 通过锁存器74HC573可以动态的显示四位数码管,因为延时时间极短,人眼不能分辨,所以我们看起来是静态的,实际上是数码管在不停的动态扫描。这样做主要是为了节省I/O口。

4.2.7 强制转换函数 强制转换函数主要是不停的扫描按键电平,当相应方向按键为低电平时将会使该方向的绿灯点亮,另外一个方向的红灯点亮。该函数中要注意按键的消抖,本设计中采用软件消抖,就是检测到低电平时进行一个很短的延时,然后看按键是否还为低电平,如果是则确定是按键按下,然后执行后面的程序。

第五章 仿真测试 5.1 软件仿真 本设计通过使用Proteus进行软件仿真,将系统电路图绘制完成,在单片机上将Keil软件编译生成的hex输出文件载入就可以进行仿真。仿真结果如下:
图5.1 Proteus仿真(南北向绿灯、东西向红灯) 图5.2 Proteus仿真(南北向黄灯、东西向红灯) 图5.3 Proteus仿真(南北向红灯、东西向绿灯) 图5.4 Proteus仿真(南北向红灯、东西向黄灯) 图5.5 Proteus仿真(南北向、东西向强制转换电路) 5.2 硬件仿真 根据电路图使用万能板做成成品,将程序下载到单片机进行硬件仿真,仿真结果如下图:
图5.6 硬件仿真(南北向绿灯、东西向红灯) 图5.7 硬件仿真(南北向黄灯、东西向红灯) 图5.8 硬件仿真(南北向红灯、东西向绿灯) 图5.9 硬件仿真(南北向红灯、东西向黄灯) 图5.10 硬件仿真(南北向强制通行) 图5.11 硬件仿真(东西向强制通行) 5.3 功能测试 经过对设计所包括的功能进行一一测试,均测试通过。车流量检测电路正常工作,计数正确。当计数总数少于20时将进入闲时模式,每个方向15秒绿灯,5秒黄灯,总共40秒一个小周期,三个小周期构成一个大周期120秒,一个大周期内计数器总数大于20将自动进入正常模式。强制转换为单向通行时将不会自动恢复到正常模式,只有按复位键才能恢复正常。

第六章 总结 经过一个月的努力,查看各种书记、资料,通过网络搜索,认真学习了单片机的基础相关知识,对以前所学的知识进行了巩固,圆满完成了毕业设计。

首先是对交通信号灯的功能进行构思,通过不同的方案的比较,主要是车流量检测方案的选择,最终选择红外对管检测,原因是红外检测灵敏度高,操作方便,寿命长,维护方便,成本低。其次是对元器件的选择,设计中需要两个计数器和一个定时器,89C51只有两个定时器/计数器无法满足需要,因此选择STC89C52,它具有三个定时器/计数器,数码管驱动选择74HC573锁存器,编程简单,选择完成后就是对电路图的绘制,然后进行软件编程,编译后生成hex文件,通过proteus软件进行软件仿真,在仿真中不断的修改源程序,直至程序和仿真满足自己的目标。最后按照电路图在万能板上用电烙铁进行焊接,连接好电路。硬件电路连接好后将程序下载到单片机,连接电源线进行硬件仿真。

在整个过程中遇到各种问题,不过通过反复检查修改,问题逐渐减少,最后完全达到了自己最初的目标,软硬件都能正常仿真运行。通过本次设计学会了很多,也将大学四年所学的知识进行了整合运用,在实践中对知识的理解更透彻。

参考文献 [1]方俊锋.嵌入式8位MCU内核的设计研究[D].陕西:西安电子科技大学,2003. [2]孙玉芳.基于单片机的智能交通灯控制系统的研究[D].哈尔滨:哈尔滨工程大学,2009. [3]周蔚吾.道路交通信号灯控制设置技术手册[M].北京:知识产权出版社,2009. [4]迈尔斯(英).智能交通系统手册[M].北京,人民交通出版社,2007. [5]邹力.物联网与智能交通[M].北京,电子工业出版社,2012. [6]余锡存,曹国华.单片机原理及接口技术[M].陕西:西安电子科技大学出版社,2000. [7]李学海.标准80C51单片机基础教程[M].北京:北京航空航天大学出版社,2006. [8]雷丽文 .微机原理与接口技术[M].北京:电子工业出版社,1997. [9]张靖武,周灵彬.单片机原理、应用与PROTEUS仿真[M].北京:电子工业出版社,2008。

[10]张毅刚,彭喜元.单片机原理与应用设计[M].北京:电子工业出版社,2008. 致 谢 在论文完成之际,我首先向关心帮助和指导我的指导老师XX老师表示衷心的感谢并致以崇高的敬意!从论文的开题到完成,XX老师给了我很多意见和帮助,还给了很多参考资料,从旁引导我完成这篇论文。XX老师严谨的治学态度加上丰富的专业知识使我受益匪浅,在此,再次向佘老师表示衷心的感谢。

此外还要感谢一起生活四年的室友们,感谢那些一起努力的日子,在论文完成过程中给我的帮助,包括资料的收集,图书的借阅,还有论文的排版,没有你们的帮助,我的论文不可能完成的如此顺利。

最后,衷心感谢在百忙之中抽出时间审阅本论文的老师。

附录:
源程序 #include<reg52.h> #define uchar unsigned char sbit k1=P3^0; //东西向强制通行按键 sbit k2=P3^1; //南北向强制通行按键 sbit L2=P3^7; //位选锁存器使能端 sbit L1=P3^6; //段选锁存器使能端 uchar code a[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09}; uchar code b[4]={0x40,0x80,0x10,0x20}; //P1口低有效 uchar code c[4]={0x33,0x35,0x1E,0x2E}; //P0口 低电平有效 int SN=55,WE=60,SN_G=55,WE_G=55; //SN表示南北方向 WE表示东西方向 int n=0,p; uchar i,k=0,count=0,count1=0,count2,num=0; void delay(uchar t); void light(); void led(); void changesn(); void changewe(); /*******程序初始化**********/ void init(void) { T2CON=0x01; //16位自动重装 TMOD = 0x55; //计数器T0、T1,工作方式1 TH0=0; //计数初值清0 TL0=0; //计数初值清0 ET0=1; //使T0中断可以溢出 EA =1; //开启总中断 IT0=1; TR0=1; //计数器0启动 TH1=0; //计数初值清0 TL1=0; //计数初值清0 ET1=1; //使T1中断可以溢出 IT1=1; TR1=1; //计数器1启动 RCAP2H = (65536-50000)/256;//晶振12M 60ms 16bit 自动重载 RCAP2L = (65536-50000)%256; ET2=1; //打开定时器中断 TR2=1; //打开定时器开关 } /********定时函数*********/ void timer(void) interrupt 5 { TF2=0; //TF2清0 count++; n++; if(count>=20) //定时满1秒, { if(n>=2400) //定时满120秒 { n=0; count2=256*TH0+TL0; //东西向车流量 count1=256*TH1+TL1; //南北向车流量 p=count1+count2; TH0=0; TL0=0; TH1=0; TL1=0; if(p<=20) { SN_G=15; WE_G=15; } else { SN_G=110*count1/p; if(SN_G>20) { if(SN_G>90) { SN_G=90; WE_G=20; } else WE_G=110-SN_G; } else { SN_G=20; WE_G=90; } } } SN--; WE--; led(); count=0; if(SN==0||WE==0) { k++; if(k>3) //当k》3执行switch程序 k=0; switch(k) { case 0: SN=SN_G,WE=SN_G+5;break; case 1: SN=5,WE=5;break; case 2: SN=WE_G+5,WE=WE_G;break; case 3: SN=5,WE=5;break; } } } } /******延时T毫秒*********/ void delay(uchar t) { uchar i; for(t;t>0;t--) { for(i=120;i>0;i--); } } /*********交通灯函数*******/ void light() { P0=c[k]; } /*******数码管时间显示********/ void led() { P2=b[0]; //南北向个位数码管位选 L2=1; L2=0; P2=a[SN%10]; //南北向个位数码管段选 L1=1; L1=0; delay(20); P2=b[1]; //南北向十位数码管位选 L2=1; L2=0; P2=a[SN/10]; //南北向十位数码管段选 L1=1; L1=0; delay(20); P2=b[2]; //东西向个位数码管位选 L2=1; L2=0; P2=a[WE%10]; //东西向个位数码管段选 L1=1; L1=0; delay(20); P2=b[3]; //东西向十位数码管位选 L2=1; L2=0; P2=a[WE/10]; //东西向十位数码管段选 L1=1; L1=0; delay(20); } /*******东西向强制转换函数*******/ void changewe() { if(!k1) { delay(20); //按键防抖延时 if(!k1) { P0=0X1E; while(1) { for(i=0;i<=3;i++) { P2=b[i]; L2=1; L2=0; P2=0X00; //将所有数码管显示“88“ L1=1; L1=0; delay(20); } } } } } /******南北向强制转换函数*********/ void changesn() { if(!k2) { delay(20); //按键防抖延时 if(!k2) { P0=0X33; while(1) { for(i=0;i<=3;i++) { P2=b[i]; L2=1; L2=0; P2=0X00; //将所有数码管显示“88“ L1=1; L1=0; delay(20); } } } } } /********主函数********/ void main(void) { init(); //初始化函数 k1=1; k2=1; for(;;) { light(); led(); changewe(); changesn(); } } led(); changewe(); changesn(); } }

Tags: 毕业论文   智能交通   系统  

搜索
网站分类
标签列表