基于VHDL状态机设计的智能交通控制灯

发布者:omega34最新更新时间:2007-03-14 来源: 国外电子元器件关键字:程序  计数  模块  数码 手机看文章 扫描二维码
随时随地手机看文章
1 设计方案

十字路口设计两组交通灯分别控制东西和南北两个方向的交通。如图1所示,当东西方向的红灯亮时,南北方向对应绿灯亮,过渡阶段黄灯亮,即东西方向红灯亮的时间等于南北方向绿灯和黄灯亮的时间之和。交通灯维持变亮的时间取决于键盘输入的控制键值。同理,当南北方向的红灯变亮时,东西方向的交通灯也遵循此逻辑。总体上由状态机实现控制,本设计中使用两个状态机分别控制东西和南北两个方向的交通。每个状态机中都设有4个状态,分别对应红灯亮、绿灯亮、黄灯亮和出现紧急状况时两个方向上的红灯同时变亮,停止倒计时的同时数码管上出现闪烁。路口的繁忙程度是不一样的,白天时的交通比较繁忙,因此,红绿灯要变化快一些以便提高通过效率,减少拥堵时间;相反,夜晚交通稀疏,就需要红绿灯变化慢一些。因此,加入键盘控制程序来控制交通维持变亮状态的持续时间。

2 总体设计结构框图

总体设计结构框图如图2所示,共有11个功能模块,包括控制东西方向交通灯的状态机和控制南北方向交通灯的状态机、计数器模块、键盘扫描模块、数字合成模块、三个分位模块、数码管显示模块、动态显示扫描模块。

用VHDL语言对各个模块进行编程,最后形成顶层文件,在MAX+PLUSⅡ环境下进行编译与仿真,检查所编程序是否运行正确。如果出现错误,需要进行修改,直到完全通过为止。需要说明的是,在进行程序编译时,要先从底层程序开始,所有底层程序都正确后,才能开始顶层程序的编译。这是因为顶层程序是对底层程序的概括,它是把底层程序各个模块连接起来,相当于把每个模块的功能汇聚到一起,实现整个系统的控制功能,所以底层程序的正确与否关系到顶层程序的运行结果。VHDL语言编程生成的结构框图如图3所示。

3 VHDL程序设计

3.1 状态机1(东西方向)程序关键代码

用两个状态机分别控制东西方向和南北方向上的交通。从键盘获得红、绿、黄灯的总时间,红灯时间占1/2,绿灯时间占3/8,黄灯时间占1/8。红灯状态为S0,绿灯状态为S1,黄灯状态为S2,紧急状态为S3。当计数器时间为0时,由红灯状态跳转到绿灯状态,当计数器时间到达3/8时,由绿灯状态跳转到黄灯状态。当到达一半时间时,由黄灯状态跳转到红灯状态。当hold为1时,由任意状态跳转到紧急状态。

3.2 计数器源程序代码

3.3 分位程序源代码

4 仿真结果

东西方向和南北方向状态机仿真结果如图4、5所示,从图4可以看出,getin是从键盘获得的键值,这里输入的是40 s,初始状态为S0状态.红灯亮。从S0状态跳转到S1状态即由红灯状态跳转到绿灯状态时,数码管显示的倒计时从15 s开始;当由S1状态跳转到S2状态即由绿灯状态跳转到黄灯状态时,GREENA由高电平变为低电平,YELLOWA由低电平变为高电平。倒计时时间从5s开始。南北方向仿真图与东西方向类似,这里不再赘述。

计数器从键盘上得到的键值为40 s,从仿真图(图6所示)上可以看出,计数器能正常计数。

从仿真结果可以看出,计数器能够正常计数,状态机状态能够正确状态变换。东西方向初始状态为绿灯,从15开始倒计时,南北方向初始状态为红灯,从20开始倒计时。

该系统硬件电路包含了1个CPLD,6个7段LED数码显示器,分别表示各个方向上的红、黄、绿灯,以及相应的限流电阻。与其他控制方法相比,所用器件可以说是比较简单经济的。经过实验,实现了预定的交通灯系统的控制功能。数码显示器采用动态扫描方式,大大节约了资源。

5 结束语

该交通灯控制逻辑可以实现3种颜色灯的交替点亮以及时间的倒计时,指挥车辆和行人安全通行。本文介绍的是一种最基本和简单的交通灯设计情况,并且提供了一些模块的源程序代码。在此基础上能够举一反三,从而用VHDL语言实现其它交通灯的控制设计。

随着EDA技术的发展,在今后的电子产品研究开发中,EDA技术具有更好的开发手段和性价比,拥有广泛的市场应用前景。

关键字:程序  计数  模块  数码 引用地址:基于VHDL状态机设计的智能交通控制灯

上一篇:灰度液晶HD66421的模块化及其应用
下一篇:手持通信设备的光源驱动设计

推荐阅读最新更新时间:2024-05-13 18:34

分布式车身控制模块将引领发展潮流
  据奥尔威咨询近期研究显示,近年来车身网络控制技术在我国汽车行业开始普及应用。与车身网络技术有关的汽车车身控制模块(BodyCon-trolModule,简称BCM)正处于起步阶段,未来市场前景可观。目前,国内整车厂应用的车身控制模块产品主要采用进口的或者由国内外资企业生产的产品。本土生产企业虽然有企业已经在研发和生产,但发展步履维艰,面临技术和市场两个发展瓶颈。   我国BCM业成新潜力市场   国内BCM市场竞争激烈,外资企业占据了我国轿车BCM配套市场,成为国内主流企业,而本土企业则向客车、商用车BCM市场发展。据奥尔威咨询调查,目前国内有20多家BCM生产企业,其中外资企业占了2/3。外资企业主要有苏州德科、上海大陆泰
[汽车电子]
LabVIEW编译程序设计知识介绍
  编译程序设计是一个复杂的话题,即使对内行的软件工程师来说也要考虑很多专业知识。   NI LabVIEW软件是一种多规范的图形化编程环境,含有多种概念,包括数据流,面向对象,以及事件驱动编程。LabVIEW也是跨越多种平台的,能够很好地用于多种操作系统(OSs),芯片组,嵌入式设备,以及现场可编程门阵列(FPGAs)。LabVIEW编译程序是一种精密的系统,在过去的20年中具有令人瞩目的发展。探索NI公司的LabVIEW编译程序的处理过程以及近来编译程序的创新。   LabVIEW编译程序处理过程   首先一个VI的编译是类的扩展,主要负责将隐含的类解析为适于终端输出与检查句法错误的类型。在类扩展之后,VI从编辑模型转
[测试测量]
LabVIEW编译<font color='red'>程序</font>设计知识介绍
基于Keil、STM32,用C++编写流水灯程序
通常来说,在单片机上编程,要么汇编,要么C语言,而用C++进行开发的很少,那么究竟能不能用C++开发单片机呢? 答案是肯定可以的,下面讲讲基于Keil、STM32,用C++编写流水灯程序的一些内容。 1、为什么很少用C++开发单片机 不知道大家对面向过程和面向对象的理解有多少? C语言面向过程的语言,C++是面向对象的编程语言。结合本文来说,面向过程相比面向对象的编程,代码量更小,运行效率更高。 所以,C语言相比C++具有更小代码量、更快的运行速度。 当然,这里是C相对C++而言。其实,汇编相对C而言,具有更小代码量和更快的运行速度。可以参看文章:用 汇编 和 C语言 写流水灯程序有什么不一样? 因为单片机的RAM和Flash资源
[单片机]
openocd 命令行烧写ARM裸机程序
以前是用RVDS 的IDE来烧写调试ARM程序的,不过RVDS虽然是集成化的调试工具调试起来方便,但是有的时候只知其一,不知其二,只知道按部就班的来点击按钮,忽略了一些本质性的东西。而且RVDS还有一个不好的地方是它只能在windows平台下运行,不支持Linux OS。为了便于学习Linux,使用Openocd会是个不错的选择,可以学习gnu 汇编,Makefile编写,工具链命令行使用。 如果这些命令搞熟悉了,你还可以利用Qt 来做个自己的图形化界面烧写调试工具。(不过这只是个壳子而已,精髓在于openocd ,所以如果有时间你还可以分析一下Openocd的源码,因为它是开源的,开源的东西就是好,它可以满足你的好奇心,虽然有些
[单片机]
STM32 模拟IIC读写24C02程序代码
引脚定义和配置: #define SCL GPIO_Pin_6 //24C02 SCL #define SDA GPIO_Pin_7 //24C02 SDA void GPIO_Configuration(void) { RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1 |RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE);
[单片机]
LiDAR模块可提高自动驾驶安全速度
自动驾驶的出现决定性地扩大了汽车电子平台中激光成像检测和测距 (LiDAR) 传感器的存在。LiDAR 根据雷达原理工作,但使用红外激光二极管发出的光脉冲。 Maxim Integrated 的新型 MAX40026 高速比较器和 MAX40660/MAX40661 高带宽跨阻放大器 (TIA) 通过将带宽翻倍并增加 32 个通道(总共 128 个而不是 96 个) 在相同尺寸的 LiDAR 模块中。 什么是激光雷达? Maxim 的 Maurizio Gavardoni 演示了用于四通道 LiDAR 接收系统的评估板。它包括 First Sensor 的光学光电二极管和 Maxim 新推出的 TIA 和高速比较器。
[嵌入式]
LiDAR<font color='red'>模块</font>可提高自动驾驶安全速度
任务11:“数码管”的静态显示和动态显示
本系列教程以AVR单片机为对象,介绍单片机的快速开发方法。 参考教材:《单片机技术及应用项目教程》 栾秋平 电子工业出版社 2019.6 第1版 本文介绍“数码管”的静态显示和动态显示。 一、人眼的视觉暂留效应 二、数码管的静态显示 三、74HC138内部工作原理 四、数码管的动态显示 #ifndef NIXIETUBE_CONFIG_H_ #define NIXIETUBE_CONFIG_H_ #define NIXIETUBE_PORT PORTB #define NIXIETUBE_DDR DDRB #define NIXIETUBE_HC595_CLOCK BIT1 #def
[单片机]
任务11:“<font color='red'>数码</font>管”的静态显示和动态显示
一个动态内存管理模块的实现
    摘要: 介绍一个动态内存管理模块,可以有效地检测C程序中内存泄漏和写内存越界等错误,适用于具有标准C语言开发环境的各种平台。     关键词: C语言 动态内存 内存泄漏 写越界 引言 当前,绝大多数嵌入式平台上的软件都采用C语言编写。除了代码简洁、运行高效之外,灵活操作内存的能力更是C语言的重要特色。然而,不恰当的内存操作通常也是错误的根源之一。如“内存泄漏” ——不能正确地释放已分配的动态内存,就是一种非常难于检测的存错误。持续的内存泄漏会使程序性能下降到最终完全不能运行,进而影响到所有其它有动态内存需求的程序,在某些相对简单的嵌入式平台上甚至会妨碍操作系统的运转。再如“写内存越界”,一
[半导体设计/制造]
小广播
最新应用文章
换一换 更多 相关热搜器件

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved