基于单片机的智能交通灯设计

摘 要

交通控制系统对于车辆控制、交通监控、运营车辆管理起到了很高效的作用。要保持安全且高效的交通秩序,
在制定一系列的交通法规的同时,也要通过一定的科技手段来实现。传统的交通灯控制系统都是固定的红绿灯时
间,不能灵活切换,容易造成汽车“空等”现象,通过率低,有一定的局限性,已经不符合当代的交通控制标准,
因此,智能化交通控制系统应运而生。本设计旨在对当下的交通控制技术尚存的不足进行分析与改进,将交通信号
灯与单片机控制相结合,提出了智能交通灯控制系统设计。系统能够智能监测十字路口的车流量,并通过车流量的
大小来智能调节剩余的红绿灯倒计时,当通过路口的车流量大时,绿灯时间自动延长,车流量小时,绿灯时间自动
缩短,使得红绿灯及倒计时时间可以自主进行动态调节。解决了交通管理系统过于死板、缺乏灵活性、不能根据路
口实际情况灵活调节汽车通过率等问题。
  此系统对交通信号灯的控制是依靠AT89C51单片机来实现的,并且,用红外传感器(光电开关)来进行车流量的
检测,单片机根据检测到的车流量大小来控制系统智能切换红绿灯的剩余时间,发光二极管模拟信号灯的状态,数
码管来显示红绿灯倒计时,这些模块共同构成智能交通灯的控制系统,使得交通控制系统能够更加人性化,灵活性更高。
关键词:AT89C51; 交通控制; 车流量检测; 交通灯

第1章 绪论

1.1智能交通灯的研究背景和意义
  时代在进步,人们逐渐富裕起来,购买私家车的家庭日益增多,导致汽车数量大幅度的增加,大幅度增长的汽
车数量,不仅排出的汽车尾气会污染环境,而且还会增加道路的交通压力,造成交通不便,如今,交通问题已经成
为一个很棘手的问题。如何解决这个问题是重中之重。针对此现象,有人提出限制私家车出行的观点,出行乘坐地
铁或者公交车,这个方法固然可行,但是有的时候公交交通工具的确没有私家车方便,并且,私家车的数量庞大,
单纯的通过限行来缓解交通压力,产生的效果也不够好。所以,我们需要有一些专门用来疏通交通的设备,通过这
些设备来缓解交通压力,所以,交通灯出现了,通过“红灯停,绿灯行”的方式,使汽车能够在道路上有规律的通
行,交通信号灯对于疏通交通,车辆分流,保障通行效率有显著的效果。
  但是,传统的交通灯往往都是固定的通行时间,不管是早高峰汽车特别多时,还是夜晚汽车数量少时,红绿灯
的时间都是固定不便的,不能根据具体情况灵活变化,缺乏灵活性。例如:在十字路口中,两个方向的红绿灯时间
相同,当其中一个方向的车流量过大时,往往绿灯的通行时间不够用,一个方向的车流量较小时,通行时间就会过
剩,造成空等现象,浪费时间。
  针对以往交通灯存在的问题,一种新型的智能交通灯诞生,这种智能交通灯不仅具有传统交通灯的功能,还能
够实现更有意义的功能。例如:①当路口其中一个方向没有汽车通过时,系统可以自动切换交通灯,使另一个方向
能够通行 ;②当路口一个方向的车流量较少时,该路口下个绿灯的时间就会变短,当车流量较大时,下个绿灯的通
行时间就会增加。这些功能实现了路口红绿灯的自主动态调节,既能够降低道路的拥堵问题,提高通行率,也能够
降低能源的使用,更加节能、环保。方便人们的生活。
1.2国外交通信号灯的发展现状
   二十世纪六十年代,联合国颁布了《道路交通和道路标志信号协定》,该协定定义了交通灯的作用。用绿灯来
表示可以通行,绿灯亮起时,行人和车辆可1800年,英国的一座城市中,用红色或者绿色服装代表女性不同的身
份。所以,红颜色的衣服表示她们已经结过婚了,绿颜色的衣服表示她们还没成婚。由于伦敦大厦的门前经常发生
马车撞人的事故,再结合红色和绿色衣服的启发,有人提出了煤气交通信号灯的想法,此信号灯由一个立起来的柱
子顶端插着两个红色和绿色的煤气灯组成 ,这便是世界上第一个交通信号灯。在使用时,灯柱底下有专门的人员用
手牵着皮带,通过皮带的转动来带动信号灯转换提灯的颜色。不久后,设计师在煤气信号灯外面分别加了红色和绿
色的灯罩。白天使用煤气灯,只通过不同颜色的灯罩来提醒行人,在夜晚时,才点亮煤气灯,照亮灯罩[1]。
  后来,欧洲一些国家通过煤气信号灯,发明了通过设置提醒标牌的方法用来疏导交通。这些标牌上标注着“前
进”和“停止”字样,由道路警察来进行翻转,车辆和行人按照牌子上的指示通行。在第二次工业革命完成后,人
们发现,只依靠手动控制交通灯的方法逐渐产生弊端,比如,道路警察不一定能够准确的判断实际情况,更加大了产生事故的概率,另外,指示牌也不能够在夜晚使用,从而限制了它的使用范围。
1912年,美国人通过研究得出人类对不同颜色具有不同的辨别和反应能力的结论,红光相比于其他颜色更能吸引
人,又因为绿色是它的互补色。因此第一盏电动交通信号灯被设计出来。后来,人们又在此交通灯的设计基础上进
行改进,他们讲几条街道的红绿灯连接在一起,由一个工作人员来控制多个道路的信号灯转换,使得转换更高效,
迅速。
  在后来的时间内,随着科技的发展,第一只晶体管被制作出来,紧接着,集成电路板也诞生了。于是,1963
年,加拿大的街道上出现了第一个可以实现自动控制的交通灯,由一个芯片同时控制多个路口的信号灯,只需要预
先设定好运行过程,信号灯就能够按照设定的方式进行转换,彻底实现自动控制。
以直行或者转弯,也可以再增加一个信号灯用来控制转弯方向的通行。红灯表示禁止通行,红灯后,车辆和行人都
应该在道路的停车线内停车。
  自从交通灯和交通法规出现以后,交通的管控在疏导交通、减缓交通拥挤、降低交通事故等方面有显著效果。
如今,交通控制更加的智能、方便,更具人性化。
1.3我国的交通信号灯发展状况
  随着世界上各种交通信号灯的发展,我国的胡汝鼎提出了黄色信号灯这一概念,由此,世界上第一盏红、黄、
绿三色信号灯诞生。
  当只有红、绿两色信号灯的时候,人们并不知道绿色的交通灯什么时候会转换成红色的交通灯,所以,在绿灯
的时候,都加速通行,正因为没有红绿灯切换预警装置,导致路口发生事故的概率增加。于是,胡汝鼎想到了在红
绿灯之间加入一个黄色的信号灯,并且按照红、黄、绿排列,黄色信号灯起到警示作用,用来提醒车辆或者行人注
意信号灯的转换[2]。
  十字路口是城市道路交通的组成部分,路口处的汽车通过率是衡量城市道路通行能力的因素,因此,用交通信
号灯控制道路通行是非常重要的。20世纪80 年代以来,国家一边研究如何改善城市中心交通;同时又通过从国外引
进或者国内自主研发的方式,建立城市道路交通控制系统。北京、上海等城市,交通控制系统主要是由SCOOT 系
统、TRANSYT 系统和 SCATS 系统结合起来使用;而中小城市,交通控制系统还是使用国产的单点信号机和集中协调
式信号机。虽然这些控制系统的效果很好,但是仍然需要进行一些改进[3]。
  (1)完善信号控制。单点信号控制系统只能实现两相位控制,在实际情况中,应该采用多相位控制,增加控制
效率,提高道路的通过性。
   (2)解决混合交通的问题。现在的交通控制都是将机动车和非机动车放在一起同时控制的,容易造成通行冲
突,因此,设计一种可以对多个相位进行控制的信号系统是非常重要的。
  (3)智能检测车流量。应该研究并设计一种可以进行车流量自动监测的交通控制系统,并且能根据车流量的大
小自动调整红绿灯倒计时。从而实现动态控制。
1.4课题研究任务和技术要求
   本课题中,需要利用所学知识,设计出一个十字路口交通灯的智能控制系统,要求系统能够指挥车辆在设定好
的时间内在路口完成直行运行,南往北方向或北往南方向的信号灯一致,同时亮或同时熄灭。东西方向同理。并且
还要具有能够显示点亮的信号灯还剩余多长时间的功能。因为是智能控制交通灯,所以,系统需要能够自行判断路
口的汽车数量,并根据汽车数量来自动调整路口的通行时长。
研究任务:
(1)研究车流量的检测装置,要求能够自主检测车流量。
(2)研究交通灯的控制系统需要用到哪种型号的单片机,并研究控制方案,
要求十字路口各个方向的交通灯正常工作:东西和南北方向的红绿灯分
时点亮和熄灭,路口通行的时间都能够进行控制调节:在通行方向亮过
绿灯后,黄灯再进行闪烁,禁行方向则亮红灯。并且能通过检测到的车
流量大小来智能改变红绿灯的时间。
(3)研究交通灯以及交通灯倒计时的显示方案,要求各个方向都有红绿、
黄灯用来指示交通,并且每种交通灯的倒计时时长都能够显示出来。
(4)研究人机交互系统。保证系统具有死机复位开关和突发情况紧急转换开关。
技术要求:
(1)熟悉单片机的功能以及应用方法。
(2)对智能交通灯控制系统的软硬件进行设计。
(3)在自己制作的交通灯设计系统上实现所设计的功能,并完成仿真。

第2章 智能交通灯的方案设计

2.1课题总体方案
   本设计以AT89C51单片机为核心,设计出一个模拟十字路口交通信号灯的模型,并采用用红、绿、黄单色LED灯
来模拟交通灯,用光电开关来检测车流量大小,交通灯的驱动电路采用74HC245芯片,交通灯的状态变化由单片机来
控制,接入数码管来显示倒计时,用这些模块来组成一个可以进行车流量检测的智能交通灯控制系统。
1.控制器的选择:选用AT89C51来进行系统的控制。51单片机的I/O接口有四个八位和一个全双工异步串行口,这些
接口方便连接数码管和交通灯;2个十六位计数器/定时器和5个中断源,可以更好地对车流量模块进行中断检测;
T0、T1端口为计数器端口,可以对外部信号进行计数,从来进行车流量的检测。
2.车流量检测方案:采用光电开关作为车流量检测模块。光电开关可以通过被检测物体有没有对发射出的光束进行
遮挡或者反射,来反馈有无被检测物体。当汽车经过红外传感器时,传感器发射出的光束被汽车遮挡,从而检测到
有汽车经过。在车流量密集时,可以通过单片机的控制,来减少或增加道路的红绿灯时间,车流量大时,绿灯时间
长;车流量小时,红灯时间短。系统可添加一个蜂鸣器模块,当红灯亮时,红外传感器检测到此时有汽车经过,即
判断该车已闯红灯,单片机迅速传出使蜂鸣器工作的信号,蜂鸣器响起,实现了闯红灯自动报警的功能。
3.按键输入方案:系统采用独立按键。矩阵式按键的特点就是按键并在一起,因此它可以只用连接很少的I/O接口即
可,为单片机节约输入输出接口用来连接其他元器件,但是矩阵式按键编程繁琐,不太容易编程,所以不采用矩阵
按键。在设计交通灯控制系统时所要用到的按键并不多,一个按钮连接一个I/O口就能够输入信号。通过按键装置来
增加多种信号灯模式:在夜晚能见度不高时,可以通过按键来使路口的四个黄灯全部闪烁,来提示司机观察路口情
况并减速慢行;在路口发生事故等紧急情况时,通过按键来使四个红灯全部长亮,此时所有路口均不能通行,可以
减少二次事故;当系统出现死机等故障时,能够通过复位按键来进行系统复位操作。
4.显示方案:用发光二极管来模拟交通信号灯。发光二极管具有节能环保耐用的特点,并且,它还能够工作在高速
状态,不会因为启动或关闭过于频繁而烧坏。用液晶屏或者数码管都可以进行倒计时显示。液晶屏虽然功耗低,更
节能环保,但是它只能通过外界光的反射来显示数字,在光线昏暗的条件下显示效果没有数码管好;数码管的单色
性好,亮度高,只需要连接一个驱动电路就能够点亮数码管。因此,采用数码管和LED灯相结合的方式来指挥交通。
5.编程语言的选择:汇编语言虽然程序执行效率高,资源占用少,但是汇编语言在编程时速度慢且易出现错误,读
者也难理解编程语句。和汇编语言相比,C语言在编写时语句更为精炼,所以更为简便灵活,并且,C语言的语句更
接近人类的逻辑思维,显得更接地气,容易让读者读懂。所以汇编语言可能更适合作为计算机等机器的程序设计语
言,C语言适合对一些软件系统进行编程。结合这两种编程语言的优缺点后,在智能交通灯的控制系统中我选用C语
言作为编程语言。
6.电源选择:当交通灯控制系统实际安装到道路中时,需要采用220v电源供电,在模拟交通灯的控制系统时,只需
用+5v电压,采用常用的LM7805电源即可。
2.2通行方案的设计
  在十字路口中,当东西向红灯亮起时,南北向此时为绿灯,经过几十秒的倒计时后,东西向和南北向的红绿灯
显示状态就会调换过来。当然,在红绿信号灯转换之前,还有几秒钟的黄灯闪烁时间,模拟交通灯的红绿灯运行状
态具体有四种,如下:
  ①东西向可以通行,此时红灯灭绿灯亮,南北向黄灯熄灭的同时红灯亮起,红灯的倒计时为20秒,东西向禁止
通行。
②东西向绿灯熄灭的同时黄灯亮起,黄灯的倒计时为5秒。此状态下,东西方向没有行驶超过停止线的车辆都要停车
等红灯。
  ③南北向可以通行,此时红灯灭绿灯亮,东西向黄灯熄灭的同时红灯亮起,红灯的倒计时为25秒。南北向禁止
通行。
④南北向绿灯熄灭的同时黄灯亮起,黄灯的倒计时为5秒。此状态下,南北方向没有行驶超过停止线的车辆都要停车
等红灯。
  因为本系统还增加了红外传感器系统,并对各个方向的车流量进行检测,所以,能够依照检测到的车流量来智
能改变红绿灯的倒计时时间,实现红绿灯时间的动态调节,方案如下:
  (1)假定一辆车通过路口的平均时长为两秒钟,默认绿灯的是东西向,倒计时为20秒,此时南北向红灯倒计时
长25秒。当东西向通车时,光电开关开始工作并记录通过的汽车数量,同时,南北方向禁止通车,如果有车强行通
过时,光电开关就会检测到有车闯红灯,蜂鸣器就会警报提示。
  (2)当20秒之内东西方向通过的汽车数量超过10辆(20/2)时,该方向下一次绿灯的时间就会增加5秒;那
么,25秒之内南北方向通过的汽车数量超过13辆(25/2)时,该方向下一次绿灯的时间也随之增加5秒。
  (3)当20秒之内东西方向通过的汽车数量少于10辆时,该方向下一个绿灯的时间就会减少5秒,即15秒(最低
值);那么,25秒之内南北方向通过的汽车数量少于13辆时,该方向下一个绿灯的时间也随之减少5秒钟。
显示时间选择如下表2.1:

3.1控制系统硬件构成
通过单片机、交通信号灯显示模块、数码管显示模块、车流量检测模块、按键输入模块、电源模块等基本模块来组
成智能交通灯控制系统的硬件设计[4]。硬件设计模块图如图3.1所示。在这里插入图片描述

图3.1 系统硬件设计模块图
  1.车流量检测模块:通过传感设备对驶过路面的车辆进行检测,从而获取该道路上的交通参数。以此达到对十
字路口交通状况的自动监测,使得单片机能够根据检测到的道路状况对信号灯和倒计时显示进行自动调节。
2.红绿灯显示模块:系统采用红黄绿三色LED灯来模拟十字路口的交通信号灯运行状态,从而控制道路的通行和禁
行。单片机还应该送出一个信号,用来点亮挂在路口从远处也可清晰看见的红绿灯,并采用220V电压供电。
3.单片机:AT89C51单片机是一种性能高且功耗低的控制芯片,它能够为许多控制类应用提供很好的控制作用。它能
够接受车流量检测信号,外部接口还能够输出控制信号来控制红绿灯的运行。
4.数码管显示模块:在路口处安装一个绿灯通行剩余时间和红灯等待剩余时间的显示电路,采用数码管作为显
示模块,并加装一个数码管驱动芯片来使数码管的显示效果增强,用来提醒司机和行人。
5.按键输入模块:按键输入用来设置智能交通灯的运行模式,起到人机交互的作用。可设置紧急模式和夜间模式,
紧急模式下,四个方向的红灯全部点亮,汽车全部不允许通过;夜间模式下,四个方向的黄灯闪烁,用来提醒司机
通过路口时要减速慢行。
3.2.单片机的选型
3.2.1单片机简介
   单片机是集成式电路芯片的一种,大致可以这样讲,一块单片机就可作为一部计算机。它是一种把中央处理器
CPU、主存RAM、固定存储器ROM、各种I/O口等合成到一起的一个微机系统。它并非单一逻辑功能,而是一个复杂的
计算机系统[5]。
  从1990年开始,跟着科技发展的脚步,单片机技术也已经一步步走向成熟,并且,对单片机的学习也是掌握计
算机原理的不二之选。单片机具有体积小、耗能低、处理数据能力强的特点,因此,单片机也被应用到各种设备
中。例如:小米手环,得益于单片机体积小耗能低的优势,使得手环可以更小巧轻便并且待机时间长;火灾烟雾报
警器,单片机处理数据速度快,能力强,使得报警器可以迅速准确的对火情作出判断,避免了火灾隐患。
智能交通灯采用AT89C51单片机作为控制模块,
AT89C51引脚功能介绍
●VCC:供电电压
●GND:地
  ●P0口:一种双向I/O口,没有内部上拉电阻。当单片机有内部存储器时,P0口起到输入或者输出的作用。当单
片机没有内部存储器时,P0口只能起到地址或者数据总线口的作用。
  ●P1和P2口:双向I/O口,带有内部上拉电阻,输入时需要对端口写1,无高阻态,只能起到输出或者输入作
用。能驱动4个TTL电路。
●P3口: P3口的功能和P1口大致相同,但是P3端口具有许多附加功能
端口引脚的第二功能:
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 INTO(外中断0)
P3.3 INT1(外中断1)
P3.4 TO(定时/计数器0)
P3.5 T1(定时/计数器1)
P3.6 WR(外部数据存储器写选通)
P3.7 RD(外部数据存储器读选通)
  ●RST:复位引脚。作为复位输入使用,RST引脚处连接电阻和电容,构成一个RC回路,使得RST出现高电平从而
复位。
  ●ALE / PROG:ALE为地址锁存允许信号输出端,高电平时有效,PROG为编程脉冲的输入端,低电平时有效。
  ●PSEN:外部程序存储器的读/输出使能信号输出端。当指令需要从外部存储器传送到CPU时,该引脚可以把指
令发送到数据总线并锁存在指令锁存器中。
●EA / VPP:进行内部或者外部存储器的选择,在高电平时,允许内部存储器的指令进行执行,低电平时,允许外
部存储器的指令进行执行。
●XTAL1:振荡器反相放大器的及内部时钟发生器的输入端.
●XTAL2:振荡器反相放大器的输出端。
3.2.2单片机最小系统
  能使单片机进行简单运行的最少元件组合就是单片机的最小系统,其中包括单片机、时钟电路以及复位电路。
因为51单片机其内部具备程序存储器,所以再连接一个复位电路和一个时钟电路即可。
①时钟电路:使得单片机形成一种规律运动的电路。晶体振荡器、晶振控制芯片以及电容组成时钟电路。工作时,
单片机接上振荡器,产生高频脉冲,脉冲经分频后,作为单片机内部时钟信号,使得单片机各部件协调工作。
  有一个高增益的反相放大器在单片机内部,XTAL1为其输入端,XTAL2为其输出端,在内部时钟电路中,在输入
端和输出端引脚两端连接两个电容和晶体振荡器形成振荡电路,1.2MHz~12MHz为其频率取值;在外部时钟电路中,
输出端引脚接外部时钟,输入端接地,且保证时钟频率低于12MHz[6]。
②复位电路:一种能够在外部使单片机重新启动的电路。复位电路包括上电复位和按键复位。
  上电复位其原理是在单片机的RST引脚处连接电阻和电容,并将电容接到VCC电阻接到GND,使其形成一个RC充放
电回路,当要进行复位工作时,电阻给电容充电,电容器电压上升到VCC,RST保持一段时间的高电平,此时,复位
完成。
  按键复位其原理是在电容上并联一个按键开关,开关工作时电容放电,RST达到高电平,在电容放电时,RST也
会保持一段时间的高电平来进行复位。
单片机最小系统电路图3.3所示。在这里插入图片描述

图3.3单片机最小系统电路图
3.3数码管驱动芯片
  因为单片机的驱动能力过低或不足以驱动数码管工作,因此需要在单片机外部增加一个驱动器来使单片机的驱
动能力提高。74HC245芯片的作用就是把串行信号转换为并行信号,用三个I/O口控制八个数码管的引脚,从而增加
单片机的控制能力。
74HC245各引脚介绍
  ●DIR:起到控制方向的作用。当该引脚为高电平时,信号由A端输入到B端,当引脚为低电平时,信号由B端输
入到A端。
  ●A0-A7:信号A的输入、输出端,A、B两端为同一组,DIR引脚为高电平时,则A端输入、B端输出;DIR引脚为低
电平时,则B端输入、A端输出。
●B0-B7:B信号的输入或输出端,与A0-A7同理。
●E:使能引脚,具有开关的作用。当该引脚为高电平时,为高阻状态,芯片无信号输出;该引脚为低电平时,芯片
才能有输出信号。
●GND:电源接地。
●VCC:电源正极。
在本系统中,引脚1连接VCC,引脚19连接地。整个芯片A端输入,B端输出。
3.4车流量检测电路
车流量检测的方法有更多,例如:
①空气管道检测法。可以在道路下方铺设一条塑料管道,其中一端连接计数器,当有车辆经过时,管道内部空气受
到压力就会挤压并触动计数器,从而对车辆进行计数。
  ②磁感应检测法。在地表埋设线圈,汽车通过线圈时,会使线圈磁场产生变化,磁感应检测器检测到磁场的变
化并据此计算出车流量。
  ③红外传感器检测法。由一个不断发射光束的发送器和一个接收器组成红外传感器,当发送器发射的光束被汽
车遮挡掉,此时接收器接收不到光束,可以判断此时有车通过,由此完成一次计数。
  ④视频车流量检测法。先用摄像头来获取视频信号,并经过图像处理技术转换成数字图像,由计算机对数字图
像再进行处理,来对车辆进行计数。
本课题选用红外传感器作为车流量检测装置。红外传感器电路图如图3.5所示。在这里插入图片描述

图3.5 红外传感器电路图
  红外线传感器在本系统中采用光电接近开关,简称为光电开关。由发射器、接收器和检测电路组成,发射器通
电后不断地发射光束,光束经过反射后会回到接收器,通过接收反射回来光的强弱,来检测有无物体经过,只要是
能够遮挡住光线的物体都能够被检测到。光电开关体积小,能耗低,使用寿命长,检测距离远,因此被广泛应用到
各种领域。

3.5、交通灯显示电路
  发光二极管,简称LED。它通过电子和电洞相结合产生辐射,释放能量来产生光亮。所以,发光二极管将电能转
换成光能会更高效。其初期只能产生红光,在后期通过化学方法,在二极管表面覆着一层荧光粉涂层,便制造出了
其他颜色的二极管。二极管的响应速度快是其一大特点,一接通电源,LED灯立刻会点亮,因此,LED灯多用于指示
灯,显示屏等方面。
  本系统采用红、绿、黄,三色LED灯来作为指示灯,分别控制各方向的道路通行指示情况。LED灯采用共阴极电
路,将全部的发光二极管阴极接地,南北方向的红黄绿灯分别连接到单片机的P2.6、P2.5、P2.4引脚上,东西方向
的红黄绿灯分别连接到单片机的P2.3、P2.2、P2.1引脚上。在电路板上用发光二极管来表示亮灯状态。此时,单片
机送出一个信号,用来点亮挂在路口从远处也可清晰看见的红绿灯,并采用220V电压供电。
3.6数码管显示电路
  数码管,也称作辉光管。它的发光原理是在玻璃管中加入稀有气体氖或者氩,并给玻璃管里的其中一个阴极充
电,数码管就会发光。玻璃管内的气体不同时,数码管就会发出不同颜色的光。可以用来显示数字或其他信息,因
此,数码管通常被用作各种电器上的显示元件。
  LED数码管由七个或八个发光二极管构成一个数字“8”的形状,可分成七段LED数码管和八段LED数码管。顾名
思义,七段LED数码管具有七个二极管,八段LED数码管具有八个二极管,其中,八段数码管多出了一个在右下角作
为小数点的二极管。这八个发光二极管分别由A、B、C、D、E、F、G、DP来表示,用来显示数字“0~9”,当我们需
要显示一个数字时,只需要给指定的二极管通电,二极管就会发光,就能够形成我们需要显示出的数字了。例如,
需要显示数字“4”时,需要F、G、B、C段亮,A、E、D段不亮。LED数码管各段的引脚定义如图3.9所示[7]。
   数码管按照发光二极管单元连接方式区分的话,可分为共阳极数码管和共阴极数码管,将二极管的阳极都接到
一起构成公共阳极的数码管叫做共阳极数码管,将二极管的阴极都接到一起构成公共阴极的数码管叫做共阴极数码
管,共阳极数码管在点亮时需要将公共阳极接到+5v,且阴极为低电平;共阴极数码管在点亮时需要将公共阴极接到
GND上,且阳极为高电平。
   在本系统中,选用双位共阴极数码管并进行动态显示。单片机的P0口接一个上拉电阻输出一个高电平,在通过
74HC245驱动芯片来产生一个驱动作用,使得单片机可以输出大电流来使数码管发光更明亮。数码管的发光二极管分
别连接到单片机的P0.1~P0.7口,,数码管的十位显示连接到P1.0和P1.2口,个位显示连接到P1.1和P1.3口。当P0口
为低电平且P1.0和P1.2为高电平,P1.1和P1.3为低电平时,数码管只显示十位上的数字;当P0口为低电平且P1.1和
P1.3为高电平,P1.0和P1.2为低电平时,数码管只显示个位上的数字。
3.7按键电路
  在智能交通灯系统中,除了单片机自动控制系统之外,还要能够人为控制系统,按键就是很直接的人为控制系
统的方法。
   独立按键通过读取单片机接口的电平高低来辨别按键是否按下。将按键的一端接地,另一端接单片机的I/O
口,系统工作时将此接口置于高电平上,当按键键按下时,该接口与地短路变为低电平。在按键松开后,芯片内部
的上拉电阻能够使I/O口继续保持高电平。
   按键的触点在按键闭合和断开时,都不能立马响应,会有一些抖动,这些按键抖动对系统识别按键开和关产生
影响,导致系统误处理,因此,进行按键消抖是非常重要的。可以采取软件消抖的方法,在按键按下或释放后,系
统执行一个延时程序,即10ms左右的延时,让抖动在这个延时期间消失后,再对按键的状态进行处理,当按键仍为
闭合状态的电平,则确定按键已按下。
当单片机I/O口P3.1为低电平时,k1键按下;P3.2为低电平时,k2键按下;P3.3为低电平时,k3键按下;P3.4为低电
平时,k4键按下;P3.7为低电平时,k5键按下。其功能介绍见下表3.12所示。
表3.12 按键功能介绍
  
按键 功能介绍
K1 紧急情况,四个方向均禁行
K2 东西方向绿灯,南北方向红灯
K3 南北方向绿灯,东西方向红灯
K4 开始按键
K5 查看当前通行时间
3.8蜂鸣器电路
  蜂鸣器,发出的声音像蜜蜂的声音一样,于是被称为蜂鸣器。它是一种一体化结构的发声器件,因此,它被广
泛应用于计算机、报警器、警报器等电子产品中。当计算机里面有一些零部件松动的时候,在开机时就会有报警的
声音,这个声音由蜂鸣器发出。
  从结构上来看,有压电蜂鸣器和电磁蜂鸣器。压电式蜂鸣器由振荡器、蜂鸣片、共鸣箱等部分构成,当接入1.5
~15v直流电时,振荡器产生振动,输出信号,阻抗匹配器推动蜂鸣片工作,进而发出声音。电磁蜂鸣器由振荡器、
磁力线圈、振动膜等部分构成,通电后,振荡器产生信号使磁力线圈产生磁场,磁场和磁铁共同作用使振动膜振动
并发出声音。从驱动方法上看,分为有源蜂鸣器和无源蜂鸣器。有源蜂鸣器内部具有驱动线路,不用外部驱动就可
以发声;无源蜂鸣器只能通过外部驱动来发声。
  本系统采用有源蜂鸣器,因为其内部已经具有振荡电路,只需要通电就可以发出声音,不需要再额外设置音频
输出电路来控制它发声了,程序控制更加方便。有源蜂鸣器在通入直流电源后,再经过振荡系统的放大,最后在振
动系统的作用下发出声音。蜂鸣器的电路图和实物图如图3.13和3.14所示。在这里插入图片描述

图3.13蜂鸣器电路图 图3.14有源蜂鸣器实物图

第4章 系统的软件设计

4.1编程语言
   汇编语言虽然程序执行效率高,资源占用少,但是汇编语言在编程时速度慢且易出现错误,读者也难理解编程
语句。和汇编语言相比,C语言在编写时语句更为精炼,所以更为简便灵活,并且,C语言的语句更接近人类的逻辑
思维,显得更接地气,容易让读者读懂。所以汇编语言可能更适合作为计算机等机器的程序设计语言,C语言适合对
一些软件系统进行编程。结合这两种编程语言的优缺点后,在智能交通灯的控制系统中我选用C语言作为编程语言。
4.2编程软件
  Keil uVision4软件针对性强,专门用于软件编程;方便度高,用户打开软件就可以进行编程,方便且容易上手
操作,因此,本设计采用Keil uVision4软件来编程。
4.3主程序流程图
  在智能交通灯的程序设计中,其中心思想是:先对程序的变量进行初始化,然后再设定程序的初始状态1:此时
东西方向亮绿灯,南北方向为红灯,经过一段时间之后,东西方向的绿灯变为黄灯并闪烁,南北方向仍为红灯,当
东西方向的黄灯闪烁结束后,程序进入状态2:此时南北方向亮绿灯,东西方向为红灯,经过一段时间后,南北方向
的绿灯变为黄灯并闪烁,东西方向仍为红灯,当南北方向黄灯闪烁结束后,程序再次变为状态1,这就是交通灯运行
的一个周期。
  在程序状态1和状态2工作时,四个方向的车流量检测程序一直在工作,通行方向的车流量检测程序用来检测并
计算车流量的大小,禁行方向的车流量检测程序用来检测有没有车辆闯红灯,如果有车闯红灯,单片机则控制蜂鸣
器报警;检测到的车流量大小传递到单片机中,根据车流量的大小,单片机会在下个周期对红绿灯倒计时的长短进
行自动调节,由此实现交通灯的动态调节。
本设计的总流程图如图4.1所示。在这里插入图片描述

图4.1总流程图
4.4按键处理程序流程图
  在交通灯控制程序运行时,除了系统自动控制交通灯的显示状态之外,还可以通过按键人为控制交通灯的显示
状态,按键连接单片机I/O口,通过判断该接口的电平高低来判断按键是否按下,然后再通过按键程序来实现各种操
作。
按键流程图如图4.2所示。
在这里插入图片描述

图4.2按键处理程序流程图
4.5定时器中断处理流程图
  智能交通灯的倒计时时长需要用数码管来显示,数码管的倒计时主要依靠定时器中断程序,定时器开始工作
后,计数器在初始值上加1计数,如果系统定时为50ms,那么计50000个数后,定时就会溢出并进入中断,当需要设
定1s的时间时,程序只需要扫描20次的定时中断,于是就能够精确的控制数码管的显示时间。定时中断系统的程序
流程图具体情况如图4.3所示。
在这里插入图片描述

图4.3定时中断系统的程序流程图
在中断时,采用外部中断0只允许东西通行;外部中断1只允许南北通行;在通常情况下,外部中断0高于外部中断1
的优先级。 外部中断流程图如图4.4所示。在这里插入图片描述

图4.4外部中断流程图
4.6部分程序介绍
4.6.1头文件
#include <reg51.h> //头文件
#define uchar unsigned char
#define uint unsigned int //宏定义
uchar buf[4]; //秒显示的变量
uchar sec_dx=20; //东西数默认
uchar sec_nb=30; //南北默认值
float set_timedx=20; //设置东西方向的时间
float set_timenb=30; //设置南北方向的时间
int n;
uchar data countt0,countt1,flag,flag1,flag2,count2,flag3,flag5;//定时器0中断次数
在程序头文件中,对初始状态进行定义,默认东西方向的倒计时20秒,南北方向的倒计时30秒。
4.6.2 主程序
void main()
{
TMOD=0X01; //定时器设置
TH1=0X3C;
TL1=0XB0;
TH0=0X3C; //定时器0置初值 0.05S
TL0=0XB0;
EA=1; //开总中断
17
ET0=1; //定时器0中断开启
ET1=1; //定时器1中断开启
TR0=1; //启动定时0
TR1=1; //关闭定时1
EX0=1; //开外部中断0
EX1=0; //开外部中断1
logo(); //开机初始化
P2=0Xc4; // 开始状态,东西绿灯,南北黄灯
sec_nb=sec_dx+5; //南北通行时间多5秒
while(1) //主循环
{
key(); //调用按键扫描程序
display(); //调用显示程序
}
}
在主程序中,设定了单片机运行时的中断方式和定时器类型。
4.6.3显示程序
void display(void)
{
buf[1]=sec_nb%10; //第1位 东西秒十位
buf[2]=sec_nb%10; //第2位 东西秒个位
buf[3]=sec_dx%10; //第3位 南北秒十位
buf[0]=sec_dx%10; //第4位 南北秒个位
P1=0xff; // 初始灯为灭的
P0=0x00; 灭显示
P1=0xfe; //片选LED1
P0=table[buf[1]]; //送东西时间十位的数码管编码
delay(1); //延时
P1=0xff; //关显示
P0=0x00; //灭显示
P1=0xfd; //片选LED2
P0=table[buf[2]]; //送东西时间个位的数码管编码
delay(1); //延时
P1=0xff; //关显示
P0=0x00; //关显示
P1=0Xfb; //片选LED3
P0=table[buf[3]]; //送南北时间十位的数码管编码
delay(1); //延时
P1=0xff; //关显示
P0=0x00; //关显示
P1=0Xf7; //片选LED4
P0=table[buf[0]]; //送南北时间个位的数码管编码
delay(1); //延时
}
   上面这段程序,表示的是信号灯显示以及数码管显示时长的程序,例如,各个方向的红绿灯被点亮的同时,数
码管也在显示红绿灯的倒计时。
4.6.4车流量按键模拟程序
18
void key(void)
if(k9!=1) //如果确定按下
{
if(Green_nb1)
{
flag1++; //南北车流量加
if(flag1>=99)
flag1=0;
}
else if(Red_nb
1)
{
BUZZ=0;
countt1=0;
}
//车辆最大计数99
if(flag0)
{
do
{
display(); //调用显示,用于延时
}
while(k9!=1);
}
if(flag
1)
{
sec_nb=set_timenb; //给东西南北赋值
sec_dx=set_timedx;
do
{
display(); //调用显示,用于延时
}
while(k9!=1);
}
if(flag==2)
{
sec_nb=flag1; //给东西南北赋值计数
sec_dx=flag2;
do
{
display(); //调用显示,用于延时
}
while(k9!=1);
}
  这段程序是南北方向模拟车流量大小的程序,也可以说是一个按键计数的程序,当按一次按键时,此方向的汽
车数量就增加一辆。东西方向同理。
4.6.5外部中断程序
//外部中断0
19
20
void int0(void) interrupt 0 using 1 //只允许东西通行
{
TR0=0; //关定时器0
TR1=1;flag3=0; //关定时器1
P2=0x00; //灭显示
Green_dx=1; //东西方向置绿灯
Red_nb=1; //南北方向为红灯
sec_dx=00; //四个方向的时间都为00
sec_nb=00;
}
//外部中断1
void int1(void) interrupt 2 using 1 //只允许南北通行
{
TR0=0; //关定时器0
TR1=1;flag3=0; //关定时器1
P2=0x00; //灭显示
Green_nb=1; //置南北方向为绿灯
Red_dx=1; //东西方向为红灯
sec_nb=00; //四个方向的时间都为00
sec_dx=00;
}
  此部分程序为外部中断服务程序,中断服务程序就是执行中断处理的具体内容:如果南北方向有特殊情况要求
通过时,南北方向转换为绿灯,东西方向为红灯;如果东西方向有特殊情况要求通过时,东西方向转换为绿灯,南
北方向为红灯。
4.6.6延时函数程序
void delay(int ms)
{
uint j,k;
for(j=0;j<ms;j++) //延时ms
for(k=0;k<124;k++); //大约1毫秒的延时
}
  C语言的延时函数程序,顾名思义,程序起到延时作用。例如,单片机1μs可以处理一条语句,系统刚读取完当
前I/O口状态,如果没有进行延时处理,就去读取另一条语句,可能导致程序处理错误,加入延时程序后,能够让系
统有足够的时间来正确处理程序。但是代码的毫秒延时是不精确的,可以提供延时的效果,但是不能精确到延时所
需的时间。

第5章 系统的仿真

5.1 Protues仿真软件简介
  Proteus是英国Electronics公司制作的仿真软件。它可以直接在软件中绘画原理图,并且可以直接转换为PCB
图,原理图绘画,调试代码以及单片机仿真,都可以在Proteus软件中完成。本次的智能交通灯控制系统设计采用
Proteus7.8 软件来进行仿真。
Proteus具有以下特点:
  (1)只有Proteus软件可以把电路仿真、PCB设计和虚拟模型仿真这三种功能结合到一起做成一个软件。
(2)原理图绘制完成后,可以一键进入PCB设计,并且支持元器件的自动布局和布线。使用更加方便,快捷。
  (3)Proteus软件拥有充分的器件库和虚拟仪表资源,并提供了非常丰富的模拟信号和数字信号用于系统调
试。
本次的智能交通灯控制系统设计采用Proteus7.8 软件来进行仿真。
5.2准备仿真
   ①首先需要在Proteus软件中绘制原理图。要绘制原理图,就要先选择元件,再把元件连接起来,所有连在一
起的元件组成原理图。
  先打开Proteus软件,进入软件后点击工具按钮,接着在元件库中选择所用的元件,也可以直接在搜索框中直接
搜索所用元件,选好所用的元器件后单击ok键,选择好的元件就会出现在元件列表框中,鼠标单击要使用的元件,
然后再移动鼠标到合适位置,再次点击鼠标,元器件就绘制完成。单击右键旋转元件并调整好方向,然后再放置电
源和接地线,最后把元件之间进行连线即可。画原理图时,需要注意给总线和元器件加上网络标号。通过接入一个
开关按键来模拟光电开关信号,手动控制按键的开关次数,就可以模拟需要的车流量了,进而达到仿真效果。
   ②装载仿真程序。双击选择单片机,先把程序编译成HEX代码,选再择Keil生成的HEX文件,点击保存按钮,程
序即可下载到单片机中。
  鼠标点击“Debug”,在下拉菜单中点击“Go”按钮,然后再次点击“Debug”,在下拉菜单中点击
“StopRunning”按钮,最后点击View选项中的“SerialWindows#1”即可看到程序运行结果。
③开始仿真。选择好AT89C51单片机,点击开始按钮,仿真开始。
5.3仿真结果
1.接通电源时,系统开始运行,此时交通灯的运行状态:东西方向亮绿灯,倒计时为20秒;南北方向亮红灯,倒计
时为25秒。状态如图5.1所示:在这里插入图片描述

图5.1 默认状态仿真图
  2.按下模拟车流量减少的按键,手动使东西方向的车流量低于10辆后,则下一个周期东西绿灯时间就会减少5
秒,变为15秒。同理,使南北方向的车流量低于15辆后,则下一个周期南北绿灯的时间也会减5秒,变为20秒。状态
如图5.2所示:
在这里插入图片描述

图5.2 车流量小时状态仿真图
3.按下模拟车流量增大的按键,手动使车流量超过10辆后,那么下个周期东西方向绿灯时,绿灯时间就会加5
秒,即25秒。状态图如图5.3所示:在这里插入图片描述

图5.3车流量大时状态仿真图
4.当按下突发事件处理按键后,四个方向红灯长亮;按下夜间模式按键后,四个方向黄灯闪烁。仿真图分别如图
5.4、5.5所示:在这里插入图片描述

图5.4 紧急情况时交通灯状态仿真图在这里插入图片描述

图5.5 夜晚时交通灯状态仿真图
5.4仿真结果分析
   通过仿真过程,可以看到,系统开机后能够进行正常的仿真。路口的信号灯也可以实现预想的状态切换。数码
管能够正常的进行倒计时显示。一个信号灯状态周期结束后能够开始开始下一个周期,实现交通灯的循环控制;通
过模拟车流量的大小,系统可以对车流量大小进行准确的判断,并且作出相应的倒计时时长变化,实现了交通灯的
智能化,所以,此仿真符合课程设计要求。

第6章 结束语

经过这次毕业设计,我受益匪浅。我对学到的东西做出了总结,如下:
  (1)通过撰写毕业设计,我对word软件的使用更加熟练。在没做毕设之前,只有偶尔会使用word软件来进行基
础的文字编辑,没有深入地使用此软件。通过毕设的书写和修改,我学到了word软件的很多知识,例如:如何自动
生成目录,怎么排版,页眉和页码如何添加。这些方法我之前根本不回,现在可以熟练掌握了。
  (2)在做毕业设计时,会用到大学四年学到的相关专业知识,有的知识已经淡忘了,因此,需要对之前学过的
知识进行复习,通过复习,我相当于又重新学了一遍知识。
  (3)在做系统设计时,需要进行软件编程,一开始我对C语言了解的不算太多,觉得编程很难,但是我没有放
弃,通过认真学习编程的方法,现在可以独立编程一些基本程序。我觉得这种不放弃的精神尤为重要,不光是在做
毕设时,在今后的学习和生活中,都要拥有这种顽强,坚持,不放弃的精神。
  (4)加强了我的自学能力和沟通能力。在做毕设时,如果遇到不清楚,不了解的知识,我会通过网络或者书籍
来查找相关知识,自己先自学一下。如果这些问题通过自学还是不能解决的话,我会和小伙伴或者指导老师一起讨
论一下,在讨论问题时,潜移默化的增加了我的沟通能力。

附录

附录一 原理图
在这里插入图片描述
附录二 PCB图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值