为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 基于单片机的交通灯设计

基于单片机的交通灯设计

2018-01-10 34页 doc 208KB 32阅读

用户头像

is_348501

暂无简介

举报
基于单片机的交通灯设计基于单片机的交通灯设计 课程名称: 基于单片机的交通灯设计 系 部: 物理与机电工程学院 专业班级: 06电 本(3)班 学生姓名: 指导教师: 完成时间: 报告成绩: 评阅意见: 评阅教师 日期 1 目录 1.设计要求 2.设计内容 3芯片简介 3.1 MSC-51芯片简介 3.1.1 MCS-51单片机内部结构 3.1.2.MCS-51的引脚说明 3.2 AT89C51简介 3.2.1 主要特性 3.2.2 管脚说明 3.2.3 振荡器特性 3.2.4 芯片擦除 4.系统硬件设计 ...
基于单片机的交通灯设计
基于单片机的交通灯设计 课程名称: 基于单片机的交通灯设计 系 部: 物理与机电工程学院 专业班级: 06电 本(3)班 学生姓名: 指导教师: 完成时间: 成绩: 评阅意见: 评阅教师 日期 1 目录 1.设计要求 2.设计内容 3芯片简介 3.1 MSC-51芯片简介 3.1.1 MCS-51单片机内部结构 3.1.2.MCS-51的引脚说明 3.2 AT89C51简介 3.2.1 主要特性 3.2.2 管脚说明 3.2.3 振荡器特性 3.2.4 芯片擦除 4.系统硬件设计 4.1交通管理的论证 4.2车检测电路 4.3. 系统总方框图 4.3.1交通灯运行状态分析 4.3.2时间显示电路 4.3.2 交通灯硬件线路图 4.3.3复位电路 4.3.4外部震荡电路 4.3.5 交通灯控制原理图 5. 控制器的软件设计 5.1每秒钟的设定 5.2计数器硬件延时 5.2.1 计数器初值计算 5.2.2 计算公式 5.2.3 1秒的方法 5.2.4相应程序代码 5.3 软件延时 5.5 程序设计 5.5.1流程图如图所示 5.5.2 交通灯控制系统主程序 6.调试与检测 6.1 硬件调试 6.1.1静态调试 6.1.2动态调试 6.2软件调试 7.实训心得体会 附:参考文件 2 引言 当今,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。但这一技术在 19世纪就已出现了。 1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指 挥马车通行。这是世界上最早的交通信号灯。1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的 议会大厦前的广场上,安装了世界上最早的煤气红绿灯。它由红绿两以旋转式方形玻璃提灯组成,红色 表示“停止”,绿色表示“注意”。1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。 电气启动的红绿灯出现在美国,这种红绿灯由红绿黄三色圆形的投光器组成,1914年始安装于纽 约市5号大街的一座高塔上。红灯亮表示“停止”,绿灯亮表示“通行”。 1918年,又出现了带控制的红绿灯和红外线红绿灯。带控制的红绿灯,一种是把压力探测器安在 地下,车辆一接近红灯便变为绿灯;另一种是用扩音器来启动红绿灯,司机遇红灯时按一下嗽叭,就使 红灯变为绿灯。红外线红绿灯当行人踏上对压力敏感的路面时,它就能察觉到有人要过马路。红外光束 能把信号灯的红灯延长一段时间,推迟汽车放行,以免发生交通事故。 信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明 显效果。1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了。绿灯是通 行信号,面对绿灯的车辆可以直行,左转弯和右转弯,除非另一种标志禁止某一种转向。左右转弯车辆 都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。红灯是禁行信号,面对红灯的车 辆必须在交叉路口的停车线后停车。黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分 接近停车线而不能安全停车时可以进入交叉路口。 3 1.设计要求 利用单片机的定时器定时,令十字路口的红绿灯交替点亮和熄灭,并用数码管显示倒计时间。 设计内容 假设一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1南北绿灯通 车,东西红灯。过一段时间转状态2,南北绿灯闪几次转亮黄灯,延时几秒,东西仍然红灯。再转状态 3,东西绿灯通车,南北红灯。过一段时间转状态4,东西绿灯闪几次转亮黄灯,延时几秒,南北仍然 红灯。最后循环至状态1。 人行道 人人行 行道 道 人行道 4 3.芯片简介 3.1 MSC-51芯片简介 3.1.1 MCS-51单片机内部结构 8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。 8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明: (1) 中央处理器: 中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。 (2) 数据存储器(RAM) 8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用 寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的 RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。 图1 (3) 程序存储器(ROM): 8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。 (4) 定时/计数器(ROM): 8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。 (5) 并行输入输出(I/O)口: 8051共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。 (6)全双工串行口: 5 8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步 通信收发器,也可以当同步移位器使用。 (7)中断系统: 8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不 同的控制要求,并具有2级的优先级别选择。 (8) 时钟电路: 8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。 单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。 下图是MCS-51系列单片机的内部结构示意图2。 图2 3.1.2.MCS-51的引脚说明: MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明: MCS-51的引脚说明: 6 MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明:如图3 图3 (1) Pin9:RESET/V 复位信号复用脚,当8051通电,时钟电路开pd 始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。初始化后,程序计数器 PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,8051的初始态。 8051的复位方式可以是自动复位,也可以是手动复位,见下图4。此外,RESET/V还是一复用脚,pd V掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。 cc 图4 (2)Pin30:ALE/当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。而访 问内部程序存储器时,ALE端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否 工作,也可以当作一个时钟向外输出。更有一个特点,当访问外部程序存储器,ALE会跳过一个脉冲。 如果单片机是EPROM,在编程其间,将用于输入编程脉冲。 (3)Pin29:当访问外部程序存储器时,此脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上,由CPU读入并执行。 (4)Pin31:EA/V程序存储器的内外部选通线,8051和8751单片机,内置有4kB的程序存储器,pp 当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。如EA为低电平,则不管地址大小,一律读取外部程序存储器指令。显然,对内部无程序存 储器的8031,EA端必须接地。 在编程时,EA/V脚还需加上21V的编程电压。 pp 3.2 AT89C51简介 7 AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方 案。外形及引脚排列如图所示 3.2.1 主要特性 ?与MCS-51 兼容 ?4K字节可编程闪烁存储器 ?寿命:1000写/擦循环 ?数据保留时间:10年 ?全静态工作:0Hz-24MHz ?三级程序存储器锁定 ?128×8位内部RAM ?32可编程I/O线 ?两个16位定时器/计数器 ?5个中断源 ?可编程串行通道 ?低功耗的闲置和掉电模式 ?片内振荡器和时钟电路 3.2.2 管脚说明: 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口作为第八位地址接收。ASH编程和校验时接收高八位地 址信号和控制信号。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址 数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FL P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如下表所示: 口管脚 备选功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) 8 P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振 荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数 据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。 在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 3.2.3 振荡器特性: XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振 荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过 一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。 3.2.4 芯片擦除: 整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作 必须被执行。 此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模 式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式 下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。 单片机的结构和特殊寄存器,这是你编写软件的关键。至于串口通信需要用到那些特殊功能寄存器 呢,它们是SBUF,TCON,TMOD,SCON等. (1) SBUF 数据缓冲寄存器这是一个可以直接寻址的串行口专用寄存器。有朋友这样问起过“为何 在串行口收发中,都只是使用到同一个寄存器SBUF?而不是收发各用一个寄存器。”实际上SBUF 包含了两个独立的寄存器,一个是发送寄存,另一个是接收寄存器,但它们都共同使用同一个寻址地址-99H。CPU 在读SBUF 时会指到接收寄存器,在写时会指到发送寄存器,而且接收寄存器是双缓冲寄存器,这 样可以避免接收中断没有及时的被响应,数据没有被取走,下一帧数据已到来,而造成的数据重叠问题。 发送器则不需要用到双缓冲,一般情况下我们在写发送程序时也不必用到发送中断去外理发送数据。操 作SBUF寄存器的方法则很简单,只要把这个99H 地址用关键字sfr定义为一个变量就可以对其进行读 写操作了,如sfr SBUF = 0x99;当然你也可以用其它的名称。通常在标准的reg51.h 或at89x51.h 等头文件中已对其做了定义,只要用#include 引用就可以了。 (2) SCON 串行口控制寄存器通常在芯片或设备中为了监视或控制接口状态,都会引用到接口控制 寄存器。SCON 就是51 芯片的串行口控制寄存器。它的寻址地址是98H,是一个可以位寻址的寄存器, 9 作用就是监视和控制51 芯片串行口的工作状态。51 芯片的串口可以工作在几个不同的工作模式下,其 工作模式的设置就是使用SCON 寄存器。它的各个位的具体定义如下: SM0 SM1 SM2 REN TB8 RB8 TI RI SM0、SM1 为串行口工作模式设置位,这样两位可以对应进行四种模式的设置。串行口工作模式设 置。 SM0 SM1 模式 功能 波特率 0 0 0 同步移位寄存器 fosc/12 0 1 1 8位UART 可变 1 0 2 9位UART fosc/32 或fosc/64 1 1 3 9位UART 可变 在这里只说明最常用的模式1,其它的模式也就一一略过,有兴趣的朋友可以找相关的硬件查 看。表中的fosc 代表振荡器的频率,也就是晶振的频率。UART 为(Universal Asynchronous Receiver)的英文缩写。 SM2 在模式2、模式3 中为多处理机通信使能位。在模式0 中要求该位为0。 REM 为允许接收位,REM 置1 时串口允许接收,置0 时禁止接收。REM 是由软件置位或清零。如果 在一个电路中接收和发送引脚P3.0,P3.1 都和上位机相连,在软件上有串口中断处理程序,当要求在 处理某个子程序时不允许串口被上位机来的控制字符产生中断,那么可以在这个子程序的开始处加入 REM=0 来禁止接收,在子程序结束处加入REM=1 再次打开串口接收。大家也可以用上面的实际源码加 入REM=0 来进行实验。 TB8 发送数据位8,在模式2 和3 是要发送的第9 位。该位可以用软件根据需要置位或清除,通常 这位在通信协议中做奇偶位,在多处理机通信中这一位则用于表示是地址帧还是数据帧。 RB8 接收数据位8,在模式2 和3 是已接收数据的第9 位。该位可能是奇偶位,地址/数据标识位。在模式0 中,RB8 为保留位没有被使用。在模式1 中,当SM2=0,RB8 是已接收数据的停止位。 TI 发送中断标识位。在模式0,发送完第8 位数据时,由硬件置位。其它模式中则是在发送停止位 之初,由硬件置位。TI 置位后,申请中断,CPU 响应中断后,发送下一帧数据。在任何模式下,TI 都必须由软件来清除,也就是说在数据写入到SBUF 后,硬件发送数据,中断响应(如中断打开),这时 TI=1,表明发送已完成,TI 不会由硬件清除,所以这时必须用软件对其清零。 RI 接收中断标识位。在模式0,接收第8 位结束时,由硬件置位。其它模式中则是在接收停止位的 半中间,由硬件置位。RI=1,申请中断,要求CPU 取走数据。但在模式1 中,SM2=1时,当未收到有效的停止位,则不会对RI 置位。同样RI 也必须要靠软件清除。常用的串口模式1 是传输10 个位的,1 位起始位为0,8 位数据位,低位在先,1 位停止位为1。它的波特率是可变的,其速率是取决于定时器1 或定时器2 的定时值(溢出速率)。AT89C51 和AT89C2051 等51 系列芯片只有两个定时器,定时器0 和定时器1,而定时器2是89C52 系列芯片才有的。 (3) 波特率在使用串口做通讯时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可 以进行正常通讯。波特率是指串行端口每秒内可以传输的波特位数。有一些初学的朋友认为波特率是指 每秒传输的字节数,如标准9600 会被误认为每秒种可以传送9600个字节,而实际上它是指每秒可以传 送9600 个二进位,而一个字节要8 个二进位,如用串口模式1 来传输那么加上起始位和停止位,每个 数据字节就要占用10 个二进位,9600 波特率用模式1 传输时,每秒传输的字节数是9600?10=960 字节。51 芯片的串口工作模式0的波特率是固定的,为fosc/12,以一个12M 的晶振来计算,那么它的波 特率可以达到1M。模式2 的波特率是固定在fosc/64 或fosc/32,具体用那一种就取决于PCON 寄存器中的SMOD位,如SMOD 为0,波特率为focs/64,SMOD 为1,波特率为focs/32。模式1 和模式3 的波特率是可变的,取决于定时器1 或2(52 芯片)的溢出速率。那么我们怎么去计算这两个模式的波特率设 置时相关的寄存器的值呢?可以用以下的公式去计算。 波特率=(2SMOD?32)×定时器1 溢出速率 上式中如设置了PCON 寄存器中的SMOD 位为1 时就可以把波特率提升2 倍。通常会使用定时器1 工作在定时器工作模式2 下,这时定时值中的TL1 做为计数,TH1 做为自动重装值 ,这个定时模式下, 10 定时器溢出后,TH1 的值会自动装载到TL1,再次开始计数,这样可以不用软件去干预,使得定时更准 确。在这个定时模式2 下定时器1 溢出速率的计算公式如下: 溢出速率=(计数速率)/(256-TH1) 上式中的“计数速率”与所使用的晶体振荡器频率有关,在51 芯片中定时器启动后会在每一个机器周期使定时寄存器TH 的值增加一,一个机器周期等于十二个振荡周期,所以可以得知51 芯片的计数速率为晶体振荡器频率的1/12,一个12M 的晶振用在51 芯片上,那么51 的计数速率就为1M。通常用11.0592M 晶体是为了得到标准的无误差的波特率,那么为何呢?计算一下就知道了。如我们要得到9600 的波特率,晶振为11.0592M 和12M,定时器1 为模式2,SMOD 设为1,分别看看那所要求的TH1 为何值。代入公式: 11.0592M 9600=(2?32)×((11.0592M/12)/(256-TH1)) TH1=250 12M 9600=(2?32)×((12M/12)/(256-TH1)) TH1?249.49 上面的计算可以看出使用12M 晶体的时候计算出来的TH1 不为整数,而TH1 的值只能取整数,这样它就会有一定的误差存在不能产生精确的9600 波特率。当然一定的误差是可以在使用中被接受的, 就算使用11.0592M 的晶体振荡器也会因晶体本身所存在的误差使波特率产生误差,但晶体本身的误差 对波特率的影响是十分之小的,可以忽略不计。 4 系统硬件设计 4.1交通管理的方案论证 东西、南北两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人 安全通行。红灯亮禁止通行,绿灯亮允许通行。黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯 燃亮时间为东西、南北两干道的公共停车时间。设东西道比南北道的车流量大,指示灯燃亮的方案如表 2 60S 5S 80S 5S „„ 东西道 红灯亮 黄灯亮 绿灯亮 黄灯亮 „„ 南北道 绿灯亮 黄灯亮 红灯亮 黄灯亮 „„ 表2 (1)当东西方向为红灯,此道车辆禁止通行,东西道行人可通过;南北道为绿灯,此道车辆通 过,行人禁止通行。时间为60秒。 (2)黄灯闪烁5秒,警示车辆和行人红、绿灯的状态即将切换。 (3)当东西方向为绿灯,此道车辆通行;南北方向为红灯,南北道车辆禁止通过,行人通行。 时间为80秒。 东西方向车流大 通行时间长。 (4)这样如上表的时间和红、绿、黄出现的顺序依次出现这样行人和车辆就能安全畅通的通行。 (5)此表可根据车流量动态设定红绿灯初始值。 11 4.2车检测电路 用来判断各方向车辆状况,比如:20秒内可以通过的车辆为20辆,当20秒内南往北方向车辆通过车辆达不到20辆时,判断该方向为少车,当20秒内北往南方向车辆通过车辆也达不到20辆时,判断该方向也为少车,下一次通行仍为20秒,当20秒时间内南往北或北往南任意一个方向通过的车辆达 20辆时证明该状态车辆较多,下一次该方向绿灯放行时间改为40秒,当40秒内通过的车辆数达45辆时车辆判断为拥挤,下一次绿灯放行时间改仍为40秒,当40秒车辆上通过车辆达不到45辆时,判断为少车,下次绿灯放行时间改为20秒, 依此类推。绿灯下限时间为20秒,上限值为40秒,初始时间为20秒。这样检测,某次可能不准确,但下次肯定能弥补回来,累积计算是很准确的,这就是人们常 说的“模糊控制”。因为路上的车不可能突然增多,塞车都有一个累积过程。这样控制可以把不断增多 的车辆一步一步消化,虽然最后由于每个路口的绿灯放行时间延长而使等候的时间变长,但比塞车等候 的时间短得多。本系统的特点是成本低,控制准确。十字路口车辆通行顺序如图4-2所示: 图4-2 十字路口车辆通行顺序 由于南往北,北往南时间显示相同,所以只要一个方向多车,下次时间就要加长东往西,西往东也 一样,显示时间选择如表3。 表3 显示时间选择 车辆情况 本次该方向下次该方向通本次该方向本次该方向 通行时间 行时间 通行时间 通行时间 南往北少车,北往南少车 20秒 20秒 40秒 20秒 南往北少车,北往南多车 20秒 40秒 40秒 40秒 南往北多车,北往南少车 20秒 40秒 40秒 40秒 南往北多车,北往南多车 20秒 40秒 40秒 40秒 东往西少车,西往东少车 20秒 20秒 40秒 20秒 东往西少车,西往东多车 20秒 40秒 40秒 40秒 东往西多车,西往东少车 20秒 40秒 40秒 40秒 12 东往西多车,西往东多车 20秒 40秒 40秒 40秒 4.3. 系统总方框图 4.3.1 交通灯运行状态分析 13 4.3.2时间显示电路 在交通信号灯的正上方安装一个可以显示绿灯通行时间,红灯等待时间的显示电路,采用数码管显示电路是一种很好的方法。由于东往西方向和西往东方向显示的时间相同,南往北方向和北往南方 向显示的时间也相同,所以只需要考虑四位数码管显示电路,其中东西方向两位,南北方向两位,两位 14 数码管可以时间的时间为0-99秒完全可以满足系统的要求,数码管连接方法如图4-4 图4-4 数码管连接方法 4.3.3复位电路 单片机复位电路原理是在单片机的复位引脚rst 上外接电阻和电容,实现上电复位,而复位时间是(时钟周期=12×振荡周期,振荡周期=1/f),这个时间只能大不能小,具体数值可以由rc电路计算出 时间常数。电路如图(1)所示。 MCS-51 9 图(1) 复位电路 4.3.4外部震荡电路 为了使单片机更加稳定的工作,在外部给其提供时钟,采用12MHz的晶体振荡器,使频率更加的稳定。具体电路如图(2)。 18 19 MCS-51 图(2)外部晶振电路 15 4.3.5 交通灯控制原理图 16 5 控制器的软件设计 17 5.1每秒钟的设定 延时方法可以有两种一中是利用MCS-51内部定时器才生溢出中断来确定1秒的时间,另一种是采用软延时的方法。 5.2计数器硬件延时 5.2.1 计数器初值计算 定时器工作时必须给计数器送计数器初值,这个值是送到TH和TL中的。他是以加法记数的,并能从全1到全0时自动产生溢出中断请求。因此,我们可以把计数器记满为零所需的计数值设定为C 和计数初值设定为TC 可得到如下计算通式: TC=M-C 式中,M为计数器摸值,该值和计数器工作方式有关。在方式0时M为213 ;在方式1时M的值为216; 在方式2和3为28 5.2.2 计算公式 T=(M-TC)T计数 或TC=M-T/T计数 T是单片机时钟周期T的12倍;TC为定时初值 计数CLK 如单片机的主脉冲频率为T12MHZ ,经过12分频 CLK 13 方式0 TMAX=2*1微秒=8.192毫秒 16 方式1 TMAX=2*1微秒=65.536毫秒 显然1秒钟已经超过了计数器的最大定时间,所以我们只有采用定时器和软件相结合的办法才能 解决这个问题. 5.2.3 1秒的方法 我们采用在主程序中设定一个初值为20的软件计数器和使T0定时50毫秒.这样每当T0到 50毫秒时CPU就响应它的溢出中断请求,进入他的中断服务子程序。在中断服务子程序中,CPU 先使软件计数器减1,然后判断它是否为零。为零表示1秒已到可以返回到输出时间显示程序。 5.2.4相应程序代码 (1)主程序 定时器需定时50毫秒,故T0工作于方式1。 初值: 16 TC=M-T/ T=2-50ms/1us=15536=3CBOH 计数 ORG 1000H START: MOV TMOD, #01H ; 令TO为定时器方式1 MOV TH0, #3CH ;装入定时器初值 MOV TL0, #BOH ; MOV IE, #82H ;开T0中断 SEBT TRO ;启动T0计数器 MOV RO, #14H ;软件计数器赋初值 18 LOOP: SJMP $ ;等待中断 (2)中断服务子程序 ORG 000BH AJMP BRT0 ORG 00BH BRTO:DJNZ R0,NEXT AJMP TIME ; 跳转到时间及信号灯显示子程序 DJNZ:MOV RO,#14H ;恢复R0值 MOV TH0, #3CH ;重装入定时器初值 MOV TL0, #BOH ; MOV IE, #82H RET1 END 5.3 软件延时 MCS-51的工作频率为2-12MHZ,我们选用的8031单片机的工作频率为6MHZ。机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/6M)=2us。我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定1秒的时间。具体的延时程序分析: DELAY:MOV R4,#08H 延时1秒子程序 DE2:LCALL DELAY1 DJNZ R4,DE2 RET DELAY1:MOV R6,#0 延时125ms 子程序 MOV R5,#0 DE1: DJNZ R5,$ DJNZ R6,DE1 RET MOV RN,#DATA 字节数数为2 机器周期数为1 所以此指令的执行时间为2ms DELAY1 为一个双重循坏 循环次数为256*256=65536 所以延时时间=65536*2=131072us 约为125us 。 DELAY R4设置的初值为8 主延时程序循环8次,所以125us*8= 1秒 由于单片机的运行速度很快其他的指令执行时间可以忽略不计。 5.5 程序设计 5.5.1流程图如图所示 19 8051 5.5.2 交通灯控制系统主程序 ORG 0000H SJMP A3 ORG 0030H A3: MOV SP,#60H ;设栈指针初值 MOV A, #24H MOV P1, A SETB P3.2 CLR P3.3 CLR P3.4 SETB P3.5 ;全部红灯亮 MOV R4,#00H ;显示0秒 MOV R7,#00H ;显示0秒 MOV R2,#03H LCALL XI ;调用子程序 A2 : MOV A,#0CH MOV P1,A SETB P3.2 SETB P3.3 CLR P3.4 CLR P3.5 ;东西红灯,南北绿灯 20 MOV R4,#14H ; 显示20秒 LOOP2 : MOV R2,#03H LCALL XI DJNZ R4,LOOP2 ;判断20秒显示时间到否 MOV R2,#03H LCALL XI LOOP8: MOV R2,#03H ;南北黄灯闪3次 LCALL XI MOV R4,#05H ;设南北黄灯亮长显示5秒 SETB P3.2 CLR P3.3 A1: MOV A,#14H MOV P1 ,A SETB P3.4 CLR P3.5 ;东西红灯,南北黄灯 MOV R2,#01H ;定时 LCALL DELAY ;调用延时子程序 MOV A ,#04H MOV P1 ,A CLR P3.4 CLR P3.5 ;东西红灯,南北不亮即意思要南北黄灯闪烁 MOV R2 ,#01H ;定时 LCALL DELAY DJNZ R4,LOOP8 ;判断南北黄灯闪烁,显示5秒到否? MOV A, #61H MOV P1,A CLR P3.2 CLR P3.3 CLR P3.4 SETB P3.5 ;东西绿灯,南北红灯 MOV R4,#14H ;显示20秒 LOOP3: MOV R2,#03H LCALL XI DJNZ R4,LOOP3 ;判断20秒显示时间到否 MOV R7,#05H ;设东西黄灯亮长显示5秒 SETB P3.5 A0: MOV A,#0A2H MOV P1,A CLR P3.2 CLR P3.3 CLR P3.4 ;东西黄灯,南北红灯 MOV R2,#01H ;定时 21 LCALL DELAY MOV A,#20H ; MOV P1,A CLR P3.2 CLR P3.3 CLR P3.4 ;南北红灯,东西不亮即意思要东西黄灯闪烁 MOV R2,#01H ;定时 LCALL DELAY DJNZ R7,A0 ;判断东西黄灯闪烁,显示5秒到否? LJMP A2 ;循环回状态1,即东西红灯,南北黄灯 DELAY: PUSH 2 PUSH 1 PUSH 0 ;进栈 DELAY1: MOV 1,#00H DELAY2:MOV 0,#0B2H DJNZ 0,$ ;判断是否运行完0B2H DJNZ 1,DELAY2 DJNZ 2,DELAY1 POP 0 POP 1 POP 2 ;出栈 DJNZ R2 ,DELAY ; 判断R2是否运行完 RET ;返回主程序 XI: MOV A,R4 MOV B,#10 DIV AB MOV R6,A MOV DPTR,#TAB MOV A,B MOVC A,@A+DPTR MOV SBUF,A MOV R7,#0FH H55S: DJNZ R7,H55S MOV A,R6 MOVC A,@A+DPTR MOV SBUF,A MOV R7,#0FH H55S1: DJNZ R7,H55S1 LCALL DELAY RET TAB:DB 0fch,60h,0dah,0f2h,66h,0b6h,0beh,0e0h DB 0feh,0f6h,0eeh,3eh,9ch,7ah,9eh,8eh END 6 调试与检测 22 6.1 硬件调试 6.1.1静态调试 静态调试是在用户系统未工作时的一种硬件检测。 第一步:目测。检查外部的各种元件或者是电路是否有断点。 第二步:用万用表测试。先用万用表复核目测中有疑问的连接点,再检测各种电 源线与地线之间是否有短路现象。 第三步:加电检测。给板加电,检测所有的插座或是器件的电源端是否符合要求 的值 第四步:是联机检查。因为只有用单片机开发系统才能完成对用户系统的调试。 6.1.2动态调试 动态调试是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部 故障、器件连接逻辑错误等的一种硬件检查。动态调试的一般方法是由近及远、由分 到合。 由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时, 与该元件无关的 器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的 电路上。当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电 路间可能存在的相互联系进行调试。由分到合的调试既告完成。 由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分 层,然后分层调试。调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位 故障元件了。 6.2软件调试: 软件调试是通过对拥护程序的汇编、连接、执行来发现程序中存在的语法错误与 逻辑错误并加以排除纠正的过程。程序后,编辑,查看程序是否有逻辑的错误。 通过这实训,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我在单片 机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是汇编语言)的掌握方 面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。同时在实训期间也得到了同学 的帮助和老师的指导,进一步加深了对用单片机设计交通灯相关知识的理解和记忆。为以后的工作积累 了更多的知识和经验 附:考文献 23 1.张毅坤. 单片微型计算机原理及应用,西安电子科技大学出版社 1998 2.余锡存 曹国华.单片机原理及接口技术[M].陕西:西安电子科技大学出版社,2000.7 3.雷丽文 等.微机原理与接口技术[M].北京:电子工业出版社,1997.2 WWW.21ic.com部分资料。 4.丁元杰主编,单片机原理与应用,机械工业出版社。 5.孙育才主编,MCS-51系列单片微型计算机及其应用, 东南大学出版社 24
/
本文档为【基于单片机的交通灯设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索