交通灯控制系统设计论文内容摘要:

5 管脚结构 74LS245 芯片 具有双向三态功能,既可以输出,也可以输入数据 , 74LS245 芯片内部结构如图 所示。 11 图 74LS245 内部结构 当片选端 CE 低电平有效时, DIR=“ 0” ,信号由 B 向 A 传输 ,即 接收 数据;DIR=“ 1” ,信号由 A 向 B 传输 ,即 发送 数据。 当 CE 为高电平时, A、 B 均为高阻态。 所以,在本控制系统中需要用 74LS245 芯片对数码管进行驱动。 本章对单片机进行了简单介绍,设计了交通灯控制系统硬件电路。 接下来,还需要对软件部分进行设计,完成整个控制系统的设计要求。 12 4 交通灯控制系统的软件设计 硬件平台结构一旦确定,功能框架就已经形成。 软件在硬件平台的基础上构筑,完成各部分硬件的控制 和协调。 系统是由软硬件共同实现的,由于软件的可伸缩性,最终实现的系统功能可强可弱,差别可能很大。 因此,软件是本系统的灵魂。 软件采用模块化设计方法,不仅易于编程和调试,也可减小软件故障率和提高软件的可靠性。 同时,对软件进行全面测试也是检验错误排除故障的重要手段。 软件设计环境简介 Proteus 仿真软件简介 Proteus ISIS 是英国 Labcenter 公司开发的电路分析与实物仿真软件。 它运行于Windows 操作系统上,可以仿真、分析 (SPICE)各种模拟器件和集成电路 [16]。 该软件的 特点是: (1)实现了单片机仿真和 SPICE 电路仿真相结合。 具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、 RS232 动态仿真、 I2C 调试器、 SPI调试器、键盘和 LCD 系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。 (2)支持主流单片机系统的仿真。 目前支持的单片机类型有: 68000 系列、 8051系列、 AVR 系列、 PIC12 系列、 PIC16 系列、 PIC18 系列、 Z80 系列、 HC11 系列以及各种外围芯片。 (3)提供软件调试功能。 在硬件仿真系统中具有全速、单步、设置断点 等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如 Keil C51 uVision2 等软件。 (4)具有强大的原理图绘制功能 [17]。 总之,该软件是一款集单片机和 SPICE 分析于一身的仿真软件,功能极其强大。 KeilC51 编译软件简介 目前流行的 51 系列单片机开发软件是德国 Keil 公司推出的 Keil C51 软件,它是一个基于 32 位 Windows环境的应用程序,支持 C 语言和汇编语言编程,其 以上的版本将编 译和仿真软件统一为 uVision(通常称为 uV2) [18]。 Keil 提供包括 C 编译 13 器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,由以下几部分组成: uVision IDE 集成开发环境(包括工程管理器、源程序编辑器、程序调试器)、 C51 编译器、 A51 汇编器、 LIB51 库管理器、 BL51 连接 /定位器、 OH51目标文件生成器以及 Monitor5 RTX51 实时操作系统 [1921]。 交通灯系统主程序 在交通灯控制系统的设计中,首先对交通灯进行初始参数设置,然后根据是否出现 键盘事件,如出现键盘事件就启动键盘程序,进行键盘时间处理;若没有出现,继续进行由初始参数进行的控制程序。 交通灯控制系统的设计流程如图 所示: 图 交通灯控制系统设计流程 交通灯延时程序 延时方法可以有两种,一种是利用 MCS51 内部定时器才生溢出中断来确定 1 秒的延时时间,另一种是采用软件延时的方法。 计数器硬件延时 (1)计数器初值计算 定时器工作时必须给计数器初值,这个值是送到 TH 和 TL 中的。 它是以加法计数的,并 能从全 1 到全 0 时自动产生溢出中断请求 [2226]。 因此,我们可以把计数器记满为零所需的计数值设定为 C 和计数初值设定为 TC 可得到如下计算通式: TC=M- C 式中, M 为计数器模值,该值和计数器工作方式有关。 在方式 0 时 M 为 213;在方式 1 时 M 的值为 216;在方式 2 和 3 为 28。 (2)计算公式 开始 初始化 等待键盘事件 键盘事 件处理 显示程 序处理 14 TC=M- T/ T 计数 T 计数 是单片机时钟周期 TCLK 的 12 倍; TC 为定时初值, 如单片机的主脉冲频率 TCLK 为 12MHZ,经过 12 分频: 方式 0: TMAX=213﹡ 1us = 方式 1: TMAX=216﹡ 1us= 方式 2 和 3: TMAX=28﹡ 1us= 显然 1 秒钟已经超过了计数器的最大定时时间,所以只有采用定时器和软件相结合的办法才能解决这个问题。 (3)延时 1 秒的方法 系统中采用在主程序中设定一个初值为 4000 的软件计数器和使定时器定时250us。 这样每当 T0 到 250us 时 CPU 就响应它的溢出中断请求,进入它的中断服务子程序。 在中断子程序中, CPU 先使软件计数器减 1,然后判断它是否为 0。 为 0 表示 1 秒已到可以返回到输出时间显示程序。 (4)相应程序 代码 主程序中:定时器需要定时 250 us,故 T0 工作于方式 2。 初值: TC=M- T/ T 计数 =28- 250us/1us=06H TMOD = 0x02。 //设置定时器 0 为工作方式 2 TH0 = 0x06。 TL0 = 0x06。 //初始化 8 位定时器 (256- 6)*4000 = 1s EA = 1。 //总中断允许 ET0 = 1。 //T0 中断允许 TR0 = 1。 //打开 T0 中断 软件延时 软件延时需要通过编写延时程序进行延时。 计算机执行一条指令需要一定的时间,由一些指令组成一段程序,并反复循环执行,利用计算机执行程序所用的时间来实现延时,这种程序称为延时程序 [2728]。 如当系统使用 12MHz 晶振时,一个机器周期为 1us,执行一条双字双周期 DJNZ 指令的时间为 2us,因此执行该指令 50 万次,就可以实现延时 1s的目的,对于 50 万次循环可采用外循环、中循环、内循环嵌套的多重循环结构。 15 交通灯显示程序 交通灯显示程序设计流程如图 所示。 交通灯显示程序总共有 4 个状态 S SS3 和 S4,每个状态中发光二极管显示信号灯点亮情况,数码管来进行倒计时显示,完成这 4 个状态后再进入初始状态 S1, 进行循环。 图 交通灯显示设计流程 按键处理程序 键盘是人机进行交互的重要接口之一。 用户通过对仪器下达命令,仪器获得相应的键值,并执行相应的命令程序 [29]。 键盘部分的软件设计主要是对键盘管理芯片 8051进行编程,从而成功地读取键盘值,实现相应功能。 按键模块设计流程如图 所示。 在系统中有 3 个按键设置,分别为“设置键”、“增加键”、“减少键”。 若“设置键”没有按下,不进行按键处理。 若“设置键”按下, 则按照到“设置键”程序处理,看是否有“增加键 ” 和“减少键”被按下,若没有,不进行处理;若有,进行相应按键处理。 开始 初始化,状态 S1 延时,并显示时间 状态 S2 延时,并显示时间 状态 S3 延时,并显示时间 状态 S4 延时,并显示时间 16 图 按键模块设计流程 设置键处理 (1)设置键的功能 设置键的功能是根据按键次数决定的,如表 所示。 按下“设置键” 1 次,则设置东西方向的绿灯点亮时间;按下“设置键” 2 次,则设置东西方向黄灯点亮时间;按下“设置键” 3 次,则设置南北方向的绿灯点亮时间;按下“设置键” 4 次,则设置南北方向黄灯点亮时间;按下“设置键” 5 次,则恢复 交通灯工作状态,时间显示设置后的通行时间和暂缓通行时间。 表 设置键功能 按“设置键”次数 第 1 次 第 2 次 第 3 次 第 4 次 第 5 次 调整内容 东西方向 绿灯点亮 时间 东西方向 黄灯点亮 时间 南北方向 绿灯点亮 时间 南北方向 黄灯点亮 时间 恢复交通灯工作状态 (2)设置键设计流程 Y Y N N Y 等待按键按下 设置键是否按下 增加键是否按下 减少键是否按下 设置键处 理程序 增加键处 理程序 减少键处 理程序 17 图 设置键设计流程 (3)设置键相关程序 void setSecond(void) {while(P3_4 == 0)。 tP3_4++。 //标志设置键被按下的次数 switch(tP3_4) {case 1:tEW = 5。 // tEW 为东西向标志位 P1 = 0xf7。 //东西向绿灯点亮 break。 case 2:tEW = 1。 P1 = 0xef。 //东西向黄灯点亮 break。 case 3:tSN = 1。 // tSN 为南北向标志位 P1 = 0xfe。 //南北向绿灯点亮 N N N N Y Y Y Y Y 等待按键释放 第 5 次按下 东西向绿灯 点亮,数码管闪烁,设置通行时间 东西向黄灯点亮,数码管闪烁,设置暂缓通行时间 南北向绿灯点亮,数码管闪烁,设置通行时间 南北向黄灯点亮,数码管闪烁,设置暂缓通行时间 交通灯正常显示,数码管显示设置好的时间 返回等待 第 4 次按下 第 3 次按下 第 2 次按下 第 1 次按下 18 break。 case 4:tSN = 3。 P1 = 0xfd。 //南北向黄灯点亮 break。 case 5:tEW = 5。 //东西方向和南北方向标志位都回到初始状态 tSN = 5。 t_num = 0。 tP3_4 = 0。 break。 } } 增加键处理 (1)增加键的功能 当系统系统需要进行按键设置时,通过“增加键”可以改变东西方向和南北方向的通行时间和暂缓通行时间。 此按键分为两个功能,一个是“加 1”功能,一个是“加10”功能。 (2)增加键处理流程 图 增加键设计流程 N N N Y Y Y Y 延时 按键是否还在按下 延时 按键是否释放 按键是否还在按下 等待按键释放 数码管值加 1 返回 数码管值加 10 数码管加 10 延时 19 (3)“增加键”相关程序 秒数加 1 程序: void addSecond(void) { while(P3_5 == 0)。 t_key = 0。 //记录长按键的参数清零 switch(tP3_4) { case 1: if(keyMemory != greenEW + 10) //判断按键是否已经加 10,如果没有加 10则秒数加 1,如果已经加 10 则不加 1 { greenEW++。 } if(greenEW == 90) { greenEW = 0。 //90 为秒数增加后的最大值,当超过 90s 后自动为 0 } scdEW = greenEW。 scdSN = greenEW + yellowEW + 1。 break。 //东西向绿灯显示时间设置 case 2: if(yellowEW++ == 9) { yellowEW = 0。 } scdEW = yellowEW。 break。 //东西 向黄灯显示时间设置 case 3: if(keyMemory != greenSN + 10) { greenSN++。 } if( greenSN == 90) { greenSN = 0。 } 20 scdEW = greenSN + yellowSN + 1。 scdSN = greenSN。 break。 //南北向绿灯显示时间设置 case 4: if(yellowSN++ == 9) { yellowSN = 0。 } scdSN = yellowSN。 break。 } //南北向黄灯显示时间设置 } 长按加 10s 程序:当长时间按下按键后,增加的时间为 10s void add_10s(void。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。