- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
电子设计自动化(红绿交通灯)课程设计报告
一、课程设计
(1) 主、支干道各设有一个绿、黄、红指示灯,两个显示数码管。
(2)主、支道交替允许通行,主干道每次放行45 s,支干道每次放行25 s,在每次由亮绿灯变成亮红灯的转换过程中,要亮5 s的黄灯作为过渡,并进行减计时显示。
问题分析:
红绿灯周期转换示意图:
东西主干道
红灯持续时间40S,黄灯5s,绿灯25s
南北次干道
红灯持续时间45S,黄灯5s,绿灯20s
由以上的红绿灯周期转换示意图可以知道:一个完整的红绿灯周期里,主干道每次放行45 s,支干道每次放行25 s,5 s的黄灯作为绿灯转为红灯的过渡,这样一个周期的总时间为:70s,满足设计要求。
具体分析一下红绿灯周期转换的规律可以发现,红绿灯在转换过程中总共有四个状态:s0,s1,s2和s3,以r0,y0,g0分别表示东西主干道的红灯,黄灯,绿灯的状态,以r1,y1,g1分别表示南北次干道的红灯,黄灯,绿灯的状态,用“1”和“0”表示亮灭状态,则四个状态的具体描述如下表所示:
r0 y0 g0 r1 y1 g1 S0 0 0 1 1 0 0 S1 0 1 0 1 0 0 S2 1 0 0 0 0 1 S3 1 0 0 0 1 0 设计步骤:
编程实现主次干道红绿灯的周期转换,根据问题的实际背景将问题简化:即将红绿灯的转换变为四个状态的相互切换。
设计计数器来实现计时功能,同时要注意最后的输出信号要为二进制码,这要能保证输出后的信号直接控制数码管的显示。
设置全局使能en,用其来控制计数的开始,在为“1”时能够实现置数功能。用case 和if判断语句语句,自动进行红绿灯四个状态的转换。
在电脑上用软件对编号的程序进行编译和仿真,检查是否有错误,看能否实现预期的功能。
选择器件: an
程序仿真无误后,击maxpluII菜单中的assign-device在Device Family 选择ACEX1K
Devices 选择 EP1K30QC208-3
管脚配置。按照“实验箱数码管显示管脚对应表”给器件配置管脚。
配置完管脚后再进行一次编译和仿真,将生成的工程文件下载到实验箱上。
通过按键操作,我们可以观察到实验箱上的数码管和红绿黄指示灯按照预定的设置进行正常的转换,说明实验达到了预期的效果。
实验程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity zhangmin is ——实体的定义
port(clk,en:in std_logic; ——设置时钟和全局使能
pin1,pin2,pin3,pin4:out std_logic;
counter1:buffer std_logic_vector(3 downto 0);
counter2:buffer std_logic_vector(3 downto 0);
counter3:buffer std_logic_vector(3 downto 0);
counter4:buffer std_logic_vector(3 downto 0);
r0,y0,g0:buffer std_logic;
r1,y1,g1:buffer std_logic);
end zhangmin;
architecture rtl of zhangmin is
type states is(s3,s2,s1,s0); ——枚举类型
signal state:states:=s0;
signal cnt1:std_logic_vector(3 downto 0);
signal cnt2:std_logic_vector(3 downto 0);
signal cnt3:std_logic_vector(3 downto 0);
signal cnt4:std_logic_vector(3 downto 0);
begin
process(clk,en)
begin
if(clkevent and clk=1)then
if(en=1)then
cnt1=0100;
cnt2=0000;
cnt3=0100;
cnt4=0101;
else
if(cnt2=0000)then
cnt2=1001;
cnt1=cnt1-1;
文档评论(0)