基于单片机的智能交通灯控制系统毕业设计(编辑修改稿)内容摘要:
采用 的是8 位 共阴数码管, 因此 要 点亮 数码管,就必须 先将 位选选通, 接下来就给段选输入数据,最后便可以显示相应的字符。 其电路 接线图 如图 7所示。 实物连线时 , 由 STC89C52 的 P0口送入初值, 即是送入段码值 ,P3 口 送入位码值。 图 数码管显示电路 有关 8位共阴数码管 的位 码和段码 , 分别 见 表 2和表 3. 上海海事大学本科生毕业设计(论文) 8 1 2 3 4 5 6 7 8 0xfe 0xfd 0xfb 0xf7 0xef 0xdf 0xbf 0x7f 表 八位共阴数码管位码表 0 1 2 3 4 5 6 7 8 9 0x3f 0x06 0x5b 0x4f 0x66 0x6d 0x7d 0x07 0x7f 0x6f 表 数码管 09段码表 在数码管的显示电路中, 74HC573 锁存器 几乎都是要用到的。 其引脚如图 8所示: 图 74HC573 芯片引脚图 74HC573 包含八进制 三 态非反转透明锁存器,是一种高性能硅门 CMOS 元 件。 74HC573 的八个锁存器都是透明的 D 型锁存器,当使能( G)为高时, Q 输出将随数据( D)输入而变。 当使能为低时,输出将锁存在已建立的数据电平上。 输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时,新的数据也可以置入。 这种电路可以驱动大 电容 或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。 特别适用于缓冲寄存器, I/O 通道,双向总线驱动器和工作寄存器。 车流量检测模拟电路 在本次毕业设计中, 本设计 用按键按的次数来代替车流量的大小,所以车流量的检测即是按按键 ,按键按一次表示检测到有一辆车通过。 实际连线中,使用外部独立按键与单片机连接,当按键按一次,单片机便计数一次,最终将总数进行分析,然后判断 和改变 交通灯的显示时长。 其接线 图 如图 9 所示。 上海海事大学本科生毕业设计(论文) 9 图 车流量检测模拟电路 在图中 K1 表示南北向车流量检测的模拟按键, K2 表示东西向车流量检测的模拟按键,分别和 单片机的 P2口的 和 连接。 红绿灯显示电路 在本次交通灯的设计中,南北向和东西向各用三 个发光二极管 (红、黄、绿 发光二极管各一个 )来指示,所以 本设计 采用了单片机 P1 口 的 05号端子来控制 六个发光二极管,这六个二极管是共阳极的。 实际电路图为图 10 所示。 图 红绿灯电路图 这些发光二极管由于是共阳极的,所以只有在单片机 P1口为低电平的时候才会亮,根据交通灯的亮灭规律, P1 口各端子的状态可以总结为表 4: 表 红绿灯显示编码 由于该设计只用到了 P1 口 05 号六个端子,剩下的 7 号端子就为高电平。 南北绿灯亮 南北红灯亮 南北黄灯亮 东西绿灯亮 东西红灯亮 东西黄灯亮 二进制码 1111 1110 1111 1101 1111 1011 1111 0111 1110 1111 1101 1111 十六进制码 0xfe 0xfd 0xfb 0xf7 0xef 0xdf 上海海事大学本科生毕业设计(论文) 10 总体电路的设计 图 1总体电路图 由上面的总体电路图可以清楚的看出,本 毕业设计 以 STC89C52 为控制核心,外部连接电源模块,时间显示模块,和红绿灯显示模块 , 车流量检测模块 , 其各模块的 结构 关系如图 11所示: 时 间 显 示 模 块红 绿 灯 显 示 模 块电 源 模 块车 流 量 检 测 模 块单片机 图 1系统结构图 上海海事大学本科生毕业设计(论文) 11 第四章 软件设计 C51 软件简介 Keil C51 是美国 KEIL SOFTWARE 公司出品的 51系列兼容单片机 C语言软件开发系统,其 具有 丰富的库函数、功能强大的继承开发调试工具、全 windows 界面,在开发大型软件时更能体现出高级语言 C 语言 的优势。 C51 已被完全集成到 uVision2 的集成开发环境中 ,这个集成开发环境包含:编译器 ,汇编器 ,实时操作系统 ,项目管理器 ,调试器。 uVision2IDE 可为它们提供单一而灵活的开发环境。 C51V7 版本是目前最高效、灵活的 8051 开发平台。 它可以支持所有 8051 的衍生产品 ,也可以支持所有兼容的仿真器 ,同时支 持其它第三方开发工具。 程序流程图 程序流程图 在 程序分析 时有很大的作用 , 也是分析程序 时 最基本、最重要的 工具。 在 本次毕业设计的程序设计 中 ,其 主程序的 设计思想 是:首先定义 各种 变量, 然后 初始化参数, 设定 程序 的 初始状态 s1:东西 向 红灯亮,南北 向 绿灯亮,一段时间后 东西 向 红灯依旧,南北 向 黄灯闪烁。 在东西 向 红灯亮的这段时间里 , 东西 的车流量检测程序一直执行,直到 南北黄灯闪烁结束 ; 南北 向 黄灯结束后,程序进入 状态 s2: 东西 向 绿灯亮,南北 向 红灯亮,一段时间后,东西 向 黄 灯 闪烁,南北 向 红灯依旧,在南北 向 红灯亮的这一段时间里,南北 向车流量检测程序一直执行,直到东西 向 黄灯闪烁结束,东西 向 黄灯结束以后程序再次跳入 到初始状态 s1 即东西 向 红灯亮,南北 向 绿灯亮, 以上为 交通灯运行的 一个周期 , 在这个周期中东西向和南北向的车流量的大小已经被单片机所记录, 根据记录的车流量的大小,在下一个状态 程序运行时,交通灯的显示时长会根据单片机上周期所记录的车流量的大小来改变。 本设计的 主程序的 运作 流程图如 图 13 所示: 上海海事大学本科生毕业设计(论文) 12 开 始初 始 化状 态 s 1 :南 北 通 行 ,东 西 禁 行F l a g = 1。 东 西 车 流 量 检 测南 北 黄 灯 结束。 状 态 s 2 :东 西 通 行 ,南 北 禁 行南 北 车 流 量 检 测南 北 黄 灯 结束。 F l a g = 1。 否是否是否是是否 图 1主程序流程图 数码管 显示子程序流程图 上海海事大学本科生毕业设计(论文) 13 本文对于数码管显示的程序,其主要思路是,在初始化中已经定义好倒计时的起始时间,根据单片机内部时钟计时,当一秒 已到时 ,红绿灯显示时长就减一秒,没到 时 仍然显示此时的时长时间,数码管显示的时候又分为十位和个位,其 运作 流程图如图 14 所示: 开 始1 s 到。 1 s 到 就 减 1秒 十 位 显 示秒 各 位 显 示是否返 回 图 1数码管显示子程序 按键检测流程图 我们都知道,按键在按下 与 释放的瞬间都会 出现 抖动 的情况 ,抖动的时长 取决于 按键的机械特性, 通常 在 5 到 10毫秒 之间。 如图 15 所示。 理 想 波 形实 际 波 形释 放 抖 动稳 定 闭 合按 下 抖 动 图 1按键被按下时的电压变化 实验 表明,在 我们按下按键 再 立即释放 的这个过程中 , 按键 稳定闭合的时间 大于 二十毫秒 ,因此在 按键 检测 时都要 进行 去抖的操作 , 对于按键消抖 有专门的去抖电路,也有专门的去抖芯片, 然而 我们用 一般的 软件延时的方法就很容易的 排除 按键抖动的 现象 ,而没有必要添加其它的的硬件电路。 而在本次设计中对按键的消抖采用的是判断标志位 flag 和交通灯的状态 S来实现的,其原理是在按键第一个下降沿就执行相关的程序,而不是在按键稳定闭合的时候才开始执行。 上海海事大学本科生毕业设计(论文) 14 开 始主 程 序K e y 1 = 0。 O r k e y 2 = 0。 F l a g = 0。 车 流 量 计 数 并 且 标志 位 复 原否是否是返 回 图 1软件消抖流程图 部分程序 介绍 由于本毕业设计采用的是 C 语言编程,所以程序的条理比较清晰,也很容易读懂,下面将本 次毕业设计中的部分程序给予讲解。 初始化程序 void init() { half_sec = 0。 s = 1。 //交通灯状态选择标志 t = 0。 count1=0。 //南北 向 车流量 count2=0。 //东西向车流量 sec=25。 ew_Rtime=15。 ns_Rtime=25。 Ytime = 5。 //黄灯显示时长 yellowflag = 0。 //黄灯标志位置零 上海海事大学本科生毕业设计(论文) 15 IT1 = 0。 //设 定 外部中断 1 在 低电平触发 IT0 = 0。 //设 定 外部中断 0 在 低电平触发 EX0 = 1。 //允许外部中断 0 EX1 = 1。 TMOD = 0x11。 //设置定时器 0和 定时器 1的 位工作方式 TH0 = (65536 50000)/256。 TL0 = (65536 50000)%256。 //设置定时时间为 50MS EA = 1。 //开总中断 ET0 = 1。 //开定时器 0中断 TR0 = 1。 //启动定时器 0 } 在初始化程序,设定了两主道的车流量大小以及系统开启时,两道红绿黄灯灯的显示时长等参数, 另外还设 定 了单片机 运行时 的中断方式和定时器 类型。 数码管 与发光二极管 点亮程序 if((s == 1) amp。 amp。 (yellowflag == 0)) { P1 = 0xed。 //设置车道灯 dula = 1。 //打开段锁存器 P0 = table[(sec Ytime)/10]。 //存入段码 值 ,显示绿灯 的 十位 dula = 0。 //锁住段码 P0 = 0xff。 //消影 wela = 1。 //打开位锁存器 P0 = 0xfe。 //存入位选 wela = 0。 P0 = 0。 //消影 delay(4)。 dula = 1。 P0 = table[(sec Ytime)%10]。 //显示绿灯的个位 dula = 0。基于单片机的智能交通灯控制系统毕业设计(编辑修改稿)
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。