- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
电子设计自动化大作业
题 学 班 学 姓
目院级号名
彩灯控制器的设计
电气*
**********
********
O 一二年十月三-一日
彩灯控制器的设计
一、 彩灯控制器的设计要求
设计能让一排彩灯(8只)自动改变显示花样的控制系统,发光二极管可作为彩灯 用。控制器应有两种控制方式:
(1) 规则变化。变化节拍有0. 5秒和0. x秒两种,交替出现,每种节拍可有 4种花样,各执行一或二个周期后轮换。
(2) 随机变化。无规律任意变化。
二、 彩灯控制器的设计原理
本次彩灯控制器的设计包含几个主要模块, 一是彩灯显示和扬 声器的时序控制部分, 二是 发光二极管的动态显示和数码管的动态 显示,本次设计中,二者的显示同步变化;三是扬声 器的控制部分< 流程图如下所示:
数码管 动态显 示
控序分频1
控序分频1 灯时部分频
-衫器制1分
图1彩灯控制器的设计流程图
彩灯控制器的设计核心主要是分频器的使用, 显示部分的设计较 简易。分频的方法有很 多种,本次设计之采用了其中较简易的一种, 通过计数器的分频,将控制器外接的频率分为 几个我们预先设定的 值。当计数器达到预先设定的值, 即产生一个上升沿, 从而实现分频。 扬声器通过不同的频率控制发出不同的声音。 同样发光二极管和数 码管的显示速度也由其中 分出来的一种频率控制(控制显示频率在 1~4 之间为宜) 。通过使能端的控制可以控制不同 的数码管显示预 先设定的图案,数码管依次显示的图案为 AA、BB CC并随着发光 二极 管同步动态显示。 AA 为自左向右显示, BB 为自右向左显示, CC 从二边向中间再由中间向 二边发散显示。 与此同时, 显示不同的 花型时扬声器发出不同的声音,代表不同的花型。本 次设计还带有 复位功能,通过复位可以使彩灯控制器恢复到最初的状态。
三、程序设计和分析
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
建立设计库和标准程序包
实体部分:
entity pan is port(clk:in std_logic;
clr:in std_logic;
speak:out std_logic;
led7s1:out std_logic_vector(6 downto 0);
led7s2:out std_logic_vector(7 downto 0);
led_selout:outstd_logic_vector(7downto
led_selout:out
std_logic_vector(7
downto
0);
end entity;
其中 clk led7s1 接 selout 接实体名为 pan, 定义端口,输入端口为 clk 和 clr , 接脉冲信号, clr 接复位端;输出 端口 speak 接扬声器, 数码管的七段显示部分,
其中 clk led7s1 接 selout 接
结构体部分: architecture one of pan is signal s: std_logic_vector(4 downto 0);
signal clk1:std_logic; signal clk2:std_logic;
signal clk3:std_logic;
定义 4 个信号, cq,cllk1,clk2,clk3.
process(clk)
variable a:std_logic_vector(5 downto 0); begin
if clr=1 then
clk1=0;
else
if clkevent and clk=1then
if a=110010then
a:=000000;
clk1=1;
else a:=a+1;
clk1=0;
end if;
end if;
end if;
end process;
以上程序为第一次分频,为 50 分频,当 clk 发生变化,使 a 从 000000 变化到 110010 时 产生一个上升沿 clk1 。如果 a 没有 变化到 110010 则 a 继续自加,直到 110010 为止产生下一 个上升 沿。
process(clk)
variable b:std_logic_vector(4 downto 0);
begin
if clr=1 then
clk2=0; 复位信号
else
if clkevent and clk=1then
if b=11001then
b:=00000; clk2=1;
else b:=b+1;
clk2=0; e nd if;
end if;
end if;
end process;
以上程序为对 clk 进行 25 分频
原创力文档


文档评论(0)