-1绪论今天,红绿灯安装在各个路口上,已经成为指挥交通车辆最普遍的交通技术但是这种技术早在19世纪就已经出现了世界上最早的交通信号灯出现于1858年,在英国伦敦道口上安装了以燃煤气为光源的红,蓝两色的机械扳手式交通信号灯,用以指挥车辆的通行接着1868年,在英国伦敦威斯敏斯特区的议会大厦前的广场上,出现了世界上最早的煤气红绿灯再到20世纪初,美国出现了以电气启动的红绿灯,这种红绿灯由红黄绿三种颜色圆形的投光器组成红灯亮表示制止车辆通行,绿灯亮表示允许车辆通行,黄灯闪烁表示警告到了20世纪中期相继出现了带有各种红外线的红绿灯、压力探测红绿灯、扩音器红绿灯等各种交通信号灯交通信号灯的出现,使交通规则得到了很大的改善,对于车辆的管理和通行,交通事故的发生得到了明显的减少1968年,联合国"道路交通和道路标志信号协定"对各种交通信号灯做了明确的规定。
绿灯表示通行,在绿灯下,车辆向相应的方向行驶,除非另一种标志制止*一种转向红灯表示制止,在红灯下,车辆必须在相应的停车线后停车黄灯表示警告,在黄灯下,已经穿越停车线的车辆和行人应继续向前,而为超出停车线的车辆在停车线后等待对于左转和右转的车辆在通过道口时,应先让在道口上行驶的车辆或者人行道行走的行人优先通行随着经济的快速开展,交通运输中出现了一些传统方法难以解决的问题如:道路拥堵、塞车、交通事故等现象越来越严重,直接造成的经济损失也越来越大,而且还在以一定的速率在不断的增长由于人民生活水平的提高,人们对交通平安也提出了更高的要求在交通中管理引入单片机交通灯控制代替交管人员在穿插路口效劳,提高交通的管理质量和效劳要求,同时也提高了交通运输的平安性并在一定程度上尽可能的降低由道路拥堵造成的经济损失,同时也大大的降低了人力资源的消耗 中国是世界人口大国,而中国的车辆也在不断的增加,交通灯的管理控制更是起着重要的作用,而智能交通灯的出现更是发挥了他举足轻重的低位它不仅可以替代了更多的人力资源,从而也带来了更多的经济和社会效益,为创造美好城市发挥着更大的作用。
2课题的设计要求和设计方案2.1 设计要求2.1.1题目概述 道路交通信号灯是道路交通平安的产品,它可以加强道路交通管理,减少交通事故的发生,提高道路使用效率,改善交通状况的一种重要工具它适用于各种十字、丁字等穿插路口,由道路交通信号灯控制,指导车辆和行人平安而有序地通行2.1.2设计任务设计一种交通信号灯的控制系统要求直观,简单能够满足十字路口交通等的使用需求2.1.3设计要求1. 交通路口为十字路口2.马路为双向六车道,即要有左转灯,直行灯,右转灯3.要考虑人行横道的信号灯4.有显示设备可以显示通信时间5.要求通行时间可调2.2 设计方案供电方案系统要在正常而稳定的状态下工作,必须要有可靠的电源而本次基于单片机的设计需要显示的芯片较多,电源供给量大,因此本次设计了如下三种方案方案一:利用独立的稳压电源供电优点是可提供稳定而可靠电源,而且可以利用220V电压转化,不受各种因素的限制;缺点是各模块都采用独立电源,会增加本次设计的难度,而且对其他电路还会造成一定的干扰方案二:采用USB转接口5V电压供电,这样简单明了,但是单单一个5V电源供电可能会显得电源缺乏,而无法满足实际的需要方案三:采用USB转接口5V双电源电压供电,这样把本次设计分为两大模块,一是交通信号灯控制系统,二是万年历系统,采用双电源供电,一个为交通信号灯控制系统提供电源,另一个为万年历系统提供电源。
这样即简单而又可提供稳定的电源考虑到实际情况和电路的简洁,本设计采用了第三套方案,此方案在电路的设计上可以把系统分为两大模块,使系统设计简单化,从而又可以提供稳定而可靠电源而且在单电源断电的情况下不影响另一模块的工作2.2.2 输入方案 该系统要求能手动及智能控制改变交通信号灯的通行时间和万年历时间的调整方案一:采用8155扩展I/O 口及键盘、显示等该方案的优点是:使用灵活可编程,并且有RAM,及计数器假设用该方案,可提供较多I/O 口,但操作起来稍显复杂方案二: 直接在I/O口线上接上按键开关该方案优点是:编程更加简洁,使用更加简单,且本钱更低缺点就是功能有限综合考虑本设计的实际需要,在使用输入的时候不需要过于复杂的功能,因此直接在I/O口线上接上按键开关足以满足本次系统设计的需要,故采用方案二2.2.3显示界面方案本设计涉及到倒计时、状态灯、时间、温度等显示功能基于功能需求,本设计考虑如下四种方案:方案一:完全采用数码管显示这种方案只显示有限的符号和数码字符,无法胜任功能需求方案二:完全采用点阵式LED 显示这种方案实现复杂,且须完成大量的软件工作;但功能强大,可方便的显示各种英文字符,汉字,图形等。
方案三:采用LCD1602液晶显示,这种显示比拟乐观,但是工作量大,而且设计复杂,再加上需要到的LCD1602较多,从经济上也不划算方案四:采用数码管、LED与LCD1602相结合的方法因为设计既要求倒计时数字输出,又要求有状态灯输出,同时还要显示出年、月、日、时、分、秒、星期和温度为了方便观看并考虑到实际情况,用数码管显示交通信号灯的倒计时,用LED显示交通灯的状态灯、用LCD1602显示年、月、日、时、分、秒、星期和温度这种设计方案既满足系统功能要求,又减少了系统实现的复杂度交通灯方案.1交通灯规则方案本设计的交通灯以十字路口为模型,在实现根本的功能前提下增加了时间及温度的液晶显示从而还增加了路口顶峰期的智能化人工管理机制 实际生活中交通信号灯的规则千变万化,在不同的路口上看到的交通信号灯的规则不一样,但是总体还是相差不大,也有一些根据实际的需要而设置不同的交通规则,本次系统交通规则的设置是根据现实生活中的交通规则和多加考虑各种现实因素结合起来而制定了以下交通规则以下列图所示为一种红绿灯规则的状态图:图2.2 状态S2南北左拐通行图2.1 状态S1南北直行通行图2.4 状态S4东西左拐通行图2.3 状态S3东西直行通行共四种状态,分别设定为S1、S2、S3、S4,交通灯以这四种状态为一个周期,循环执行如以下列图所示:图2.5 交通灯状态循环图依据上述车辆行驶的状态图,可以列出正常模式下各个路口交通信号灯的逻辑表如下表所示(其中逻辑值"1〞表示直行通行,逻辑值"0〞表示制止通行,逻辑值"L〞表示左转通行):表2.1 正常模式下工作表S1的状态ESWN逻辑值0101显示时间正常模式下为40SS2的状态ESWN逻辑值0L0L显示时间正常模式下为20SS3的状态ESWN逻辑值1010显示时间正常模式下为40SS4的状态ESWN逻辑值L0L0显示时间正常模式下为20S程序就是在上述四种状态下循环转化的,而每种状态下又包括绿灯通行和黄灯闪烁警告状态。
系统在正常模式下循环一个周期所需要的时间为120S,数码管显示的工作模式为半周期60..2各种模式下通行时间 本系统结合实际的需要,而在上述四种状态的每种状态下再细分为绿灯通行、黄灯闪烁两种状态,总共八种工作状态系统在正常工作模式下又可分为三种工作模式,分别为:正常模式、繁忙模式和特殊模式各种模式下的时间分配如下表2.2:表2.2 各模式下时间分配表S1S2S3S4S5S6S7S8周期正常模式35S5S15S5S35S5S15S5S120S繁忙模式25S5S10S5S25S5S10S5S90S特殊模式50S5S15S5S50S5S15S5S150S2.2.5 万年历设计方案电路设计框图本系统的电路系统框图如图2.6所示AT89C51单片机对DS1302和DS18B20写入控制字并读取相应的数据,继而控制LCD1602作出对应的显示,同时也向交通信号灯外部发出定时中断,从而改变交通信号灯的工作模式LCD1602液晶显示模块AT89C51主控模块键盘控制模块DS18B20温度模块定时外部中断模块DS1302时钟模块图2.6统硬件框图3芯片的介绍及应用3.1 AT89C51单片机介绍及应用单片微型计算机简称单片机,同时又称为微控制器、嵌入式微控制器等,它属于第四代电子计算机。
它把各种芯片电路集成在一块芯片上,因此它具有体积小、抗干扰能力强、功耗低、可靠性高以及低廉的价格它广泛应用于工业过程控制、测控系统及各种智能仪器仪表等因此国际上逐渐采用微控制器(MCU)代替单片微型计算机(SCM)这一名称微控制器可以更准确的反响出单片机的本质,但单片机这一名称以为大多数人所承受,所以单片微型计算机即是单片机,同时又称为微控制器3.1.1单片机的引脚及功能AT89C51单片机的 引脚图如图3.1所示图3.1 AT89C51单片机引脚图VCC:电源电压GND:地P0口:P0口是一个漏极开路型8位双向I/0口,即数据/地址总线的复用口当它作为输出端口使用时,每位能驱动8个TTL逻辑门电路P1口:Pl 口是一个带内部上拉电阻的8位双向I/O口,Pl口的输出缓冲级能驱动4个TTL逻辑门电路当我们对端口写入"1”时,通过内部上拉电阻来把端口拉到高电平,此时P1口可做为输入端口当P1口做为输入口时,由于内部存在上拉电阻,当被外部引脚拉低时会输出数据P1口除了以上功能外,最重要的是它的第二功能如表3.1所示表3.1 P1口引脚的第二功能端口引脚第二功能:P1.5MOSI〔用于ISP编程〕P1.6MOSI〔用于ISP编程〕P1.7MOSI〔用于ISP编程〕P2口:P2口也是一个带有内部上拉电阻的8 位双向I/O 口。
P2 的输出缓冲级也能驱动4 个TTL逻辑门电路当我们对端口写入"1”时,通过内部上拉电阻来把端口拉到高电平,此时P2口可做为输入端口当P2口做为输入口时,由于内部存在上拉电阻,当被外部引脚拉低时会输出数据当访问外部程序存储器或16位地址外部数据的存储器时,P2口输出高8位数据地址当访问8 位外部数据存储器地址时,P2口的内容在整个访问过程将不会改变P3 口:P3 口也是一个带有内部上拉电阻的8 位双向I/0 口P3 口输出缓冲级也能驱动4 个TTL逻辑门电路当我们对端口写入"1”时,通过内部上拉电阻来把端口拉到高电平,此时P3口可做为输入端口当P3口做为输入口时,由于内部存在上拉电阻,当被外部引脚拉低时会输出数据P3口除了以上用途外,最重要的是它的第二功能如表3.2所示表3.2 P3口引脚的第二功能端口引脚第二功能:P3.0R*D〔串行输入〕P3.1T*D〔串行输出〕P3.2/INT0〔外中断0〕P3.3/ INT1〔外中断1〕P3.4T0〔定时/计数器0外部输入〕P3.5T1〔定时/计数器1外部输入〕P3.6/ WR〔外部数据存储器写选通〕P3.7/ RD(外部数据存储器读选通〕P3口还可用于接收一些Flash闪速存储器的编程及程序的校验控制等。
RST:复位输入引脚振荡器在工作时,RST引脚将会出现两个或两个以上的机器周期高电平来使单片机进展复位WDT 溢出将使该引脚输出高电平,设置SFR AU*R的DISRT0 位〔地址8EH〕可翻开或关闭该功能DISRT0位缺省为RESET输出高电平翻开状态ALE/:在访问外部数据存储器或程序存储器时,ALE〔地址锁存〕主要是利用输出脉冲来锁存地址低8位字节ALE还可以用于对外输出时钟信号或定时功能,因为ALE时刻以时钟振荡器的1/6频率输出固定的脉冲信号值得注意的是:当我们在访问外部数据存储器时将会跳过一个ALE脉冲在F1ash存储器编程期间,该引脚还可用于输入编程脉冲还可以通过特殊的功能存放器中的8EH单元的D0位置来制止ALE工作执行该操作后,需要通过MOV*和MOVC指令ALE才能被激活,从而恢复工作状态在执行单片机外部程序时,ALE应设置为无效程序的储存是在〔〕允许输出外部程序存储器时进展,当单片机需要进展读写数据时,此时该引脚在每个周期下就会两次有效,从而发出两次脉冲,当访问外部的数据存储器时,则是发出一次脉冲信号/VPP:外部访问允许当EA端设置为低电平时,CPU可单独访问外部程序存储器〔即:0000H-FFFFH地址〕。
TAL1:振荡器的反相放大器和内部时钟发生器的输入端3.1.2单片机最小系统的设置本次基于单片机交通信号灯控制系统的设计的单片机最小系统设置的如以下列图所示:图3.2 AT89C51单片机最小系统图3.2 LCD1602芯片介绍及应用液晶显示器的介绍液晶显示器有多种分类方法,通常按显示的方式分可分为字符式、段式、点阵式等液晶显示器即可显示黑白又可显示多彩色灰度,因此可分为黑白显示器和彩色显示器如果按驱动方式分,它又可以分为单纯矩阵驱动〔Simple Matri*〕、静态驱动〔Static〕和主动矩阵驱动〔Active Matri*〕三种液晶显示器它具有厚度薄、体积小,适用于大规模集成电路的驱动等特点,目前已广泛应用在数字摄像机、便携式电脑、MP3、MP4、PDA移动通信工具等领域液晶显示器各种图形的显示原理液晶显示器是利用液晶的物理特性,通过上下电压来控制显示的区域,高电平则亮,低电平则灭,这样就可以显示出图形液晶显示器图形的显示是通过N*M个液晶显示单元构成,通过控制各个显示单元的亮暗而到达显示图形的目的例如一个液晶显示器有64行显示屏,而每行有128列,每字节又由8列组成,因此每行可显示16个字节,即整个显示器可显示1024个字节。
最后通过控制液晶显示相应位置的亮暗从而显示出每字节上的内容 LCD1602的根本参数及引脚功能LCD1602采用标准的14脚〔无背光〕或16脚〔带背光〕接口,本次设计采用16脚〔带背光〕来显示年、月、日、时、分、秒、星期和温度各引脚接口说明如表3.3所示:第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:VL是显示器比照度调整端,当接地信号时液晶比照度最高,当接正电源时比照度最弱,比照度的上下将会影响液晶显示器的显示,比照度过高时会产生"鬼影〞因此我们通常接一个10K的电位器来调节第4脚:RS是存放器的选择,高电平表示数据存放器、低电平表示指令存放器第5脚:R/W是信号线的读写,当高电平时表示正在进展读操作,当低电平时表示正在进展写操作,如果RS和R/W同时为低电平时可进展显示地址或写入指令,如果RS为低电平且R/W为高电平时可进展读取信号,如果RS为高电平R/W为低电平时可进展写入数据第6脚:E端是使能信号端,当E端由高电平变化为低电平时,液晶模块命令开场执行第7~14脚:D0~D7是8位双向数据线第15脚:背光源正极第16脚:背光源负极表3.3引脚接口说明表编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极 LCD1602的指令说明及时序LCD1602内部液晶显示模块控制器指令共11条,如表3.4所示:LCD1602的读写操作、光标操作以及屏幕显示等都是通过各种指令程序而实现的,具体说明如下:〔注:1为高电平,0为低电平〕指令1:清显示,指令码由01H复位到00H位置。
指令2:光标复位,执行时光标将返回到00H位置指令3:光标以及显示模式的设置光标的移动方向为:高电平表示右移,低电平则表示左移S:屏幕文字是否进展右移或者进展左移高电平表示有效,低电平表示无效指令4:显示控制开关B:光标闪烁的控制,高电平表示闪烁,低电平则表示不闪烁C:光标开关的控制,高电平表示有光标,低电平则表示无光标 D:整体显示的开关控制,高电平表示翻开显示,低电平则表示关闭显示指令5:光标或者显示移位 S/C的控制高电平表示文字移动的显示,低电平表示光标的移动指令6:功能命令的设置DL为高电平表示4位总线,低电平则表示8位总线F: 低电平表示显示5*7的点阵字符,高电平表示显示5*10的点阵字符 N:低电平表示单行显示,高电平表示双行显示 指令7:字符发生器RAM地址设置指令8:DDRAM地址的设置指令9:光标地址和读忙信号 BF:表示忙标志位,高电平时表示忙,此时模块不能进展命令或者数据的承受,低电平则表示不忙指令10:写数据指令11:读数据表3.4控制命令表序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L**6置功能00001DLNF**7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数据到CGRAM或DDRAM〕10写入的数据内容11从CGRAM或DDRAM读数11读出的数据内容LCD1602液晶显示器有多种,其中市场上最常见的是HD44780。
HD44780内置了DDRA〔80字节〕,CGRAM〔64字节,用来存放用户自定义字符,每个字符需要用到8个字节,所以以一共可以存放8个用户自定义字符〕,CGROM〔内存了160个字符,包括了标准的ASCII码表上的字符等〕与HD44780相兼容的芯片时序表如表3.5所示:表3.5根本操作时序表读状态输入RS=L,R/W=H,E=H输出D0—D7=状态字写指令输入RS=L,R/W=L,D0—D7=指令码,E=高脉冲输出无读数据输入RS=H,R/W=H,E=H输出D0—D7=数据写数据输入RS=H,R/W=L,D0—D7=数据,E=高脉冲输出无图3.3 读操作时序图3.4写操作时序 LCD1602液晶显示是一个慢显示器件,所以每次在执行指令时一定要先进展确认模块的忙标志位是否为低电平,否而指令将会失效要进展字符的显示,首先要进展输入显示字符的地址,实际就是输入显示的内容LCD1602内部显示地址如图3.5所示图3.5 1602LCD内部显示地址对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标将会自动右移液晶模块在繁忙状态下将不能输入指令3.2.5 LCD1602液晶显示模块原理图P2.5P2.6A P2.7T8 P0.09 P0.1C P0.25 P0.31 P0.4 P0.5 P0.6 P0.7VSS VEE VDDRS LRW CE D1D0 6D1 0D2 2D3 D4D5D6D75V10K图3.6 LCD1602显示电路3.3 DS1302芯片介绍及应用DS1302是美国 DALLAS 公司推出的一种高性能、低功耗的时钟芯片,它采用 SPI 三线接口与 CPU 进展同步通信,并可采用突发方式一次传送一个或多个字节的时钟信号和 RAM数据。
它可提供年、月、日、星期、时、分、秒的计时显示,各月天数它可进展自动的调整,同时还具有闰年的补偿功能工作电压范围为2.5~5.5VDS1302芯片采用双电源供电,即有主电源和备用电源同时还可设置备用电源的充电方式,提供了对备用电源进展电流充电的能力DS1302也可用于数据的记录, 特别是对于*些特殊意义的数据点的记录上,它能实现数据和数据出现的时间同时记录,因此在各种测量系统中得到广泛的应用 DS1302引脚功能DS1302芯片的外部引脚分配如图3.7所示图3.7 DS1302的外部引脚分配Vcc1:表示主电源;Vcc2:表示备份电源如果 Vcc2>Vcc1+0.2V, 则 Vcc2向 DS1302供电,如果 Vcc2< Vcc1,由则Vcc1向 DS1302供电SCLK:串行时钟,输入,控制数据的输入与输出I/O:三线接口时的双向数据线CE:输入信号DS1302在进展读写数据时,此位必须为高该引脚有两个功能:首先是CE 开场控制字进展访问移位存放器的逻辑控制;其次是CE 提供完毕单字节或者多字节数据的传输方法3.3.2DS1302读写说明DS1302是 SPI 总线方式来驱动它不仅需要向存放器写入控制字, 同时还需要读取相应存放器的数据。
1:DS1302的读写存放器DS1302的时间存放器总共有12个,其中读存放器〔81H-8DH〕和写存放器〔81H-8DH〕是以BCD码格式进展数据的存取表3.6 DS1302的读写存放器写存放器读存放器Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit080H81HCH10秒秒82H83H10分分84H85H12/24010时时AM/PM86H87H0010日日88H89H00010月月8A8BH00000星期8C8DH10年年8E8FHWP0000000DS1302小时存放器〔84H、85H〕的位7应用于DS1302是运行的模式即12小时制还是24小时制当位7为1时,表示12小时模式,此时相应的存放器位5为高时表示AM,为低时表示PM当位7为0时,表示24小时模式DS1302秒存放器〔80H、81H〕的位7应用于时钟暂停标志〔CH〕位当该位为1时,时钟振荡器停顿,DS1302处于低功耗状态;当该位为0时,时钟开场运行DS1302 控制存放器〔8EH、8FH〕的位7是写入保护位,其它7位均为0当WP位为0时可以开场进展对时钟和RAW进展写入,当WP位为1时,制止对存放器的写入操作。
2:DS1302中静态RAM地址 DS1302在静态工作模式下的RAW地址如表3.7所示表3.7 静态 RAM 的地址表读地址写地址数据范围C1HC0H00-FFHC3HC2H00-FFHC5HC4H00-FFH.........FDHFCH00-FFH3:DS1302的工作模式存放器DS1302的工作模式存放器又分为时钟突发模式存放器、RAW突发模式存放器等突发模式是指一次传送多个字节的时钟信号和 RAM 数据 突发模式存放器如表3.8所示表3.8突发模式存放器工作模式存放器读存放器写存放器时钟突发模式寄器CLOCK BURSTBFHBEHRAW突发模式存放器RAW BURSTFFHFEH4:DS1302控制字符表DS1302的控制字最高位〔位7〕必须是1,才能进展数据的写入,否则不能写入数据;次高位〔位6〕表示RAW数据或者时钟日历的存取,当为1时表示RAW数据存取,为0则表示时钟日历的存取;接着是数据操作地址〔位5-位1〕;最后是位0表示数据的读写操作,当为1时表示读操作,为0表示写操作如表3.9所示表3.9 控制字〔即地址及命令字节〕5:DS1302的读写时序DS1302数据的读写规则是在控制字的根底上从低位到高位的输出,每当控制字指令输入后下一个SCLK脉冲上升沿到来时,数据就会被写入到DS1302中,数据从最低位开场写入,下一个SCLK脉冲的下降沿到来时,就会读出DS1302里面的数据,读出的规则也是从低位到高位。
图3.8 数据读写时序3.3.3 DS1302时钟采集模块原理图AT P1.589 P1.6C5 P1.71*1 D *2CE S1 VCC2I/0 30 VCC1SCLK 2GND3V5V32.768MHz图3.9 DS1302原理图此图为DS1302时钟芯片模块采集原理图,*1和*2接的是时钟晶振,,大小为32.768MHz3.4 DS18B20芯片介绍及应用DS18B20数字温度计是DALLAS公司生产的One-Wire,即单总线器件,它具有体积小而且线路简单的优点它只有三个引脚,分别是接高电源、地信号和一条数据信号线,设计简单而又方便因此它广泛应用于温度的测温系统 DS18B20除了体积小、线路设计简单优点外,它在实际应用中不需要其它外部任何器件即可实现温度的测温功能,测量温度范围为-55—+125 °C 之间,如超出检测的温度,DS18B20将会发出报警信号数字温度计的读取可以从9位到12位选择可用数据线供电,供电范围+3.0-5.5V电压3.4.1DS18B20引脚功能DS18B20器件的封装引脚排列及引脚功能的描述如图3.10和表3.10。
图3.10〔底视图〕表3.10 DS18B20引脚功能序号名称引脚功能描1GND地信号2DQ数据输入/输出引脚开漏单总线接口引脚当被用在寄生电源下,也可以向器件提供电源3VDD可选择的VDD引脚当工作于寄生电源时,此引脚必须接地3.4.2DS18B20的应用及原理图DS18B20采用的是one-Wire总线协议方式连接,实际就是在一根数据线进展数据的双向传输,,然而对于51单片机在硬件上并不支持单总线协议方式的连接,因此我们采用软件的方法来模拟单总线的协议方式来完成对DS18B20温度芯片的访问DS18B20的读写是在一根I/O线上进展,因此,对数据的读写有着严格的要求DS18B20的通信协议也有着严格的要求来确保数据传输的正确性和完整性DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性该通信协议又细分了几种信号的时序,即:初始化时序、读时序、写时序然而在这几种时序的工作下都是以主机作为主设备,单总线器件作为从设备数据的传输是在主机先启动读入时序,读出数据后进入写时序命令,从而启动读写时序功能,完成数据的传输数据和命令的传输都是低位在先下面为DS18B20在本次设计的温度采集模块原理图3.11所示。
VCCDQ DS18B20GNDAT89C51VCCP1.0图3.11 DS18B20温度采集原理图 温度采集模块图主要是由DS18B20芯片进展,通过AT89C51单片机进展数据的传输和承受,从而再送到LCD1602,从LCD1602显示出来DS18B20只有三个引脚,分别是VCC为正电源接5V电压,GND地信号接大地,最后是DQ数据输入/输出引脚连接AT89C51单片机的P1.0引脚4程序的设计流程4.1 交通灯程序设计的流程倒计时显示的理论分析利用定时器中断,设置 TH0=(65536-50000)/256,TH1=(65536-50000)%256,即每0.05秒中断一次每到第20次中断即过了20*0.05秒=1秒时,使时间的计数值减1,便实现了倒计时的功能状态灯显示的理论分析黄灯闪烁同样可以利用定时器中断每到第10次中断即过了10*0.05秒=0.5秒时,使黄灯标志位反置,即可让黄灯1秒闪烁一次 交通灯主程序设计流程交通灯系统在正常模式下工作的1. 首先,正常进入系统开场运行,交通灯在默认正常模式下工作,数码管显示时间为602. 交通信号灯开场正常工作,右转弯为常亮灯〔绿色〕。
南北直行方向绿灯亮,其它方向亮红灯,数码管开场倒计时,南北方向从40倒计,东西方向从60倒计3. 35S后,南北直行方向灭绿灯,闪烁黄灯,闪烁时间为5S4. 40S后,南北直行方向亮红灯,左转方向亮绿灯,亮时15S,同时数码管从20倒计,其它不变5. 55S后,南北左转方向灭绿灯,闪烁黄灯,闪烁时间为5S6. 60S后,南北左转方向黄灯灭,亮红灯,数码管从60倒计,东西直行方向亮绿灯,数码管从40倒计,其它不变7. 95S后,东西直行方向灭绿灯,闪烁黄灯,闪烁时间为5S8. 100S后,东西直行方向灭黄灯,亮红灯,左转方向亮绿灯,亮时为15S,同时数码管从20倒计,其它不变9. 115S后,东西左转方向灭绿灯,闪烁黄灯,闪烁时间为5S10. 120S后,东西左转方向灭黄灯,亮红灯,数码管从60倒计南北直行亮绿灯,数码管从40倒计开场南北直行通行东西制止南北左转通行东西制止AT89C51初始化南北直行黄灯闪烁南北左转黄灯闪烁通行35秒YN闪烁5秒YN通行15秒YN闪烁5秒YN东西黄灯闪烁东西直行通行南北制止东西左转通行南北制止东西直行黄灯闪烁通行35秒YN闪烁5秒YN通行15秒YN闪烁5秒YN图4.1 程序设计流程图4.2万年历的设计流程万年历的设置一方面可以更好的显示时间和温度,其次可以对交通信号灯系统的控制,定时向交通信号灯控制系统发出外部中断,从而该变当前工作模式,以致在实际中更具有实用性。
图4.2 万年历主程序流程图此次万年历的设计功能主要是两个,一个是通过LCD1602显示时间和温度,另一个则是为交通信号灯提供外部定时中断,从而改变当前的工作模式而万年历的设计流程和普通设计的一样,开场先是对各种芯片的初始化,接着是从DS1302、DS18B20读取时间和温度信息,从而传送到AT89C51单片机进展时间、温度的别离转化,再传送到LCD1602显示出来,其次是时间的调整和校正,通过调整按键可以对秒、分、时、星期、日、月和年进展加减1的修改最近是定时发出外部中断,利用IF语句进展判断,适合条件则输出低电平到交通信号灯,否则为高电平从而到达了实验的目的4.3万年历时间的调整流程本次万年历系统的设计只是采用DS1302进展时间的扫描和读取,而没用进展掉电保存电路的设计,因此在每次硬件的开启,系统都是进入初始化设置,以致要进展时间的调整和校正开场控制调整切换键加按键减按键秒加1秒减1控制调整切换键加按键减按键分加1分减1控制调整切换键加按键减按键时加1时减1控制调整切换键加按键减按键星期加1星期减1控制调整切换键加按键减按键日加1日减1控制调整切换键加按键减按键月加1月减1控制调整切换键加按键减按键年加1年减1退出时间调整按键完毕图4.3 时间调整控制图时间的调整程序设计。
首先,系统在正常工作下,由DS1302时钟芯片进展时间的读取,传递到AT89C51单片机进展对时间进展别离和转化,最后由LCD1602显示出来在进展时间的调整和校正时,先进入调整模式,即按下第一个按键,执行调整程序,先是进入秒程序调整,按加减按键相应的进展加1或减1,再按调整切换键进入分程序调整,按加减减进展相应的加1减1,再接着是时、星期、日、月、年的调整按加减键进展相应的加减1,在进展调整途中,如果按退出时间调整按键都将会退出时间调整程序如图4.3时间调整控制图所示4.4交通信号系统工作模式的工作流程开场初始化正常模式60S早上7:00 中断函数繁忙模式45S早上 9:00中断函数正常模式60S繁忙模式45S上午11:00中断函数正常模式60S下午14:00中断函数繁忙模式45S下午17:00中断函数正常模式60S晚上19:00中断函数完毕返回正常模式按键正常模式60S特殊模式按键特殊模式75S繁忙模式按键繁忙模式45SNYNYNY图4.4 工作模式切换图开场进入系统时,默认模式为正常模式60S,到了早上7:00时上班顶峰期,万年历发出中断,从而使系统进入繁忙模式45S,从而可以减少路口上交通的拥堵。
时间到了早上9:00,车辆逐渐减少,万年历又发出定时中断使系统进入正常模式,到了11:00,万年历再次发出定时中断,重新使系统进入繁忙模式,减少车辆的拥堵到了下午14:00,万年历发出定时中断,使系统进入正常模式,在正常模式下运行到下午17:00下班时间,为了减少交通的拥堵,万年历发出定时中断,使系统进入繁忙模式,到了晚上19:00,道口上车辆减少,万年历最后发出定时中断,使系统在正常模式下正常运行系统在正常模式、繁忙模式和特殊模式下运行时,还可以进展外部手动进展中断来进展通行时间的调整如:在正常模式下按下繁忙模式,系统将会进入繁忙模式,当下次中断再次到来时,系统会根据中断的要求而进入相应的模式,不会受上次中断或下次中断的影响 5软硬件的仿真调试5.1 PROTEUS仿真图整个交通灯控制系统在PROTEUS仿真图中的仿真如下所示,双向通行,倒计时是2位时间提醒每个路口分别有左转、直行和右转,分别有红灯、绿灯和黄灯提示每个路口还相应配有行人的红绿灯指示 图右上角数码管显示的工作模式,60代表是在正常模式下工作,45和75分别代表是在繁忙模式和特殊模式,右下角是开关调节按键,左边三个开关从上到下是交通灯各种模式转换开关,右边四个是时间调节开关,从而更具有实用性。
图5.1 PROTEUS仿真图5.2 硬件实物图此次硬件实物的设计分为两局部,一局部是电子器件的设计,另一局部是显示界面的设计电子器件的设计主要是单片机的最小系统设置、DS1302时钟模块的设置、DS18B20温度模块的设置以及非门74HC04的设置等;显示界面的设置主要是LCD1602液晶显示模块、各个方向数码管倒计时、数码管显示系统工作模式、各个道口的交通灯、人行道的交通灯以及控制开关调节按键的设置两局部的分开设计可以使实物显得更美观,同时对于实物的器件的修改和调整也提供了更好的条件也更联系了实际生活,显得简单、整洁和美观显示界面如图5.2所示图5.2 硬件实物图结 论本次基于单片机的交通信号灯控制系统的设计是在一般交通灯的根底上加上时间的智能控制,从而改变各方向通行的时间因此本次智能交通灯的设计可以更好的解决了车流量较大的十字路口车辆的通行,与一般交通灯相比,它更具有实用性、简单化和智能化从而也更好的应用到实际生活中,因此具有一定的实用价值此次基于单片机的交通信号灯控制系统的设计可以说得到了成功,但是还是存在很多的缺乏和缺陷如:工作模式的时间只有三种选择,而不能通过按键进展随意更改,工作模式时间的智能切换也不能进展手动调节,以及对通过道口车流量的统计、车辆速度的检测和拍摄功能等都还没实现,而且此次设计需要用到的电子元器件较多,从经济上不划算,因此本次基于单片机的交通信号灯控制系统的设计也还存在着很大的缺乏,还有待改善。
致谢历时三个月的毕业设计已经告一段落经过自己不断的搜索努力以及张玉薇教师的耐心指导和热情帮助,本设计已经根本完成同时系里兴趣小组实验室的开放和大局部兴趣小组同学也为我的设计提供指导,在他们的帮助和指导下得到了完成在此对于他们的帮助给与深刻的致谢在本次基于单片机的交通信号灯的控制系统设计中一路遇到了很多的困难,首先从开场电路原理图的设计、画PCB图和制板都遇到了困难先是对芯片的不理解,专业知识的不够从而导致在程序的编写中经常出错接着是在最后的调试中,由于本次设计分为两块电路板,线路繁多因此也很容易混乱等问题但是在教师和同学的帮助和鼓励下一一得到了解决通过这次毕业设计,使我对自己有了一个深刻的认识认识到了自己专业知识的缺乏和专业知识的重要性,同时也理解了理论要联系实际含义通过这次的毕业设计也检验了自己大学四年的学习成果,认识到了自己的缺乏和缺陷,在今后的工作和学习中将会继续努力,不断完善,从而为今后的开展打下良好的根底由于自身水平有限,设计中一定还存在很多缺乏之处,敬请各位教师批评指正参考文献[1] 张毅刚.单片机原理及接口技术.哈尔滨:哈尔滨工业大学出版社,1990.[5] 谭浩强.单片机课程设计. 北京:清华大学出版社,1989.[6] [7] 童诗白.模拟电子技术根底〔第三版〕。
北京:高等教育出版社,2001[8] 李光飞.单片机课程设计实例指导,北京:北京航空航天大学出版社. 2004[9] 王萍.电子技术实验教程.北京:机械工业出版社,2021[10] 朱兆优.单片机原理与应用.北京:电子工业出版社,2021[11] 阎石.数字电子技术根底〔第五版〕.北京:高等教育出版社,2021附录程序:1: 十字路口交通灯控制C程序1: /*********************************************************** 十字路口交通灯控制 C 程序 ***********************************************************/ *include *define uchar unsigned char *define uint unsigned int /*****定义控制位*******************************************/sbit Time_Show_LED1=P2^4; //Time_Show_LED1(直行时间显示)控制位sbit Time_Show_LED2=P2^5; //Time_Show_LED2(直行时间显示)控制位sbit SN_LED1=P2^0; //SN_LED1控制位sbit SN_LED2=P2^1; //SN_LED2控制位sbit EW_LED1=P2^2; //EW_LED1控制位sbit EW_LED2=P2^3; //EW_LED2控制位sbit SN_Yellow=P1^6; //SN黄灯sbit EW_Yellow=P1^2; //EW黄灯sbit EW_ManGreen=P3^0; //EW人行道绿灯sbit SN_ManGreen=P3^1; //SN人行道绿灯sbit Special_LED=P2^6; //交通特殊指示灯sbit Busy_LED=P2^7; //交通繁忙指示灯sbit Nomor_Button=P3^5; //交通正常按键sbit Busy_Btton=P3^6; //交通繁忙按键sbit Special_Btton=P3^7; //交通特殊按键 sbit EW_ManRed=P3^3; //EW人行道红灯sbit SN_ManRed=P3^4; //SN人行道红灯sbit *=P1^7;sbit y=P1^3;bit Flag_SN_Yellow; //SN黄灯标志位bit Flag_EW_Yellow; //EW黄灯标志位char Time_EW; //东西方向倒计时单元char Time_SN; //南北方向倒计时单元uchar EW=60,SN=40,EWL=19,SNL=19; //程序初始化赋值,正常模式uchar EW1=60,SN1=40,EWL1=19,SNL1=19; //用于存放修改值的变量uchar code table[10]={0*3F,0*06,0*5B,0*4F,0*66,0*6D,0*7D,0*07,0*7F,0*6F}; //0-9段选码uchar code S[8]={0*28,0*48,0*98,0*88,0*82,0*84,0*89,0*88}; //交通信号灯控制代码/**********************延时子程序**************************/void Delay(uchar a){ uchar i; i=a; while(i--){;} }/*****************显示子函数******************************/void Display(void) { uchar h,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中断效劳程序******************/ void INT0_srv(void)interrupt 0 using 1 { E*0=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;//开特殊信号灯 } E*0=1; //开中断 } /**********************T0中断效劳程序*******************/ void timer0(void)interrupt 1 using 1 { static uchar count; TH0=(65536-50000)/256; TL0=(65536-50000)%256; count++; if(count==10) { if(Flag_SN_Yellow==1) //测试南北黄灯标志位 {SN_Yellow=~SN_Yellow;} if(Flag_EW_Yellow==1) //测试东西黄灯标志位 {EW_Yellow=~EW_Yellow;} } if(count==20) { Time_EW--; Time_SN--; if(Flag_SN_Yellow==1) //测试南北黄灯标志位 {SN_Yellow=~SN_Yellow;}。