EDA课程设计:彩灯控制器

课题内容:
设计一个彩灯控制器,使彩灯(LED管)能连续发出三种以上不同的花型(自拟);每种花型持续的时间为10秒钟。
使用数码管显示当前的花型序号(分别为A、B、C)以及该花型的显示时间。如数码管显示“A-08-234”即表示花型A,已经显示了8秒234毫秒。
求大神帮忙啊!!!!!灰常感谢!!!

以前做的设计,粘贴时图形没出来,参考一下,记得给分啊

一.设计目的
1、学习EDA开发软件和MAX+plus Ⅱ的使用方法,熟悉可编程逻辑器件的使用,通过制作来了解彩灯控制系统。
2、进一步掌握数字电路课程所学的知识。
3、了解数字电路设计的一般思路,进一步解决和分析问题。
4、培养自己的编程和谨慎的学习态度
二、.设计题目内容和要求
(1)课题内容:
用EDA技术设计一个彩灯控制器,使彩灯(LED管)能连续发出三种以上不同的花型(自拟);
随着彩灯显示图案的变化,发出不同的音响声。
要求使用7段数码管显示当前显示的花型,如第一种花型显示A1,第二种花型显示b2,第三种花型显示C3
(2)主要任务:完成该系统的硬件和软件的设计,并利用实验箱制作出实物演示,调试好后并能实际运用(指导教师提供制作所需的器件),最后就课程设计本身提交一篇课程设计报告。
三、总体方案设计与选择
1 总体方案的设计
方案一:电路分为三个部分:彩灯花型模块、声音模块,时钟模块。用时钟控制声音和花型,整体使用相同的变量与信号,主体框图如下;

图三—1-1方案一的的流程图
方案二:电路分为五个模块:分频器模块、16进制计数器、4进制计数器,4选1选择器、彩灯控制器。其中彩灯控制器是用来输出不同的花样,彩灯控制器的输出则是用一个16进制的计数器来控制,扬声器的输出时用不同的频率来控制,所以用了一个集成分频器来使输入的频率被分为几种不同的频率,不同频率的选择性的输出则是用一个4选一的选择器来控制。整体框图如下:

图三—1-2方案二的流程图
2、方案的选择
方案一是将融合在一起,原理思路简单,元件种类使用少,但是在编程时要使用同一变量和信号,这样就会给编程带来很大的困难,另外中间单元连线较多,不容易检查,门电路使用较多,电路的抗干扰能力会下降。
方案二将彩灯花型控制与声音控制分开,各单元电路只实现一种功能,电路设计模块化,且编程时将工作量分开,出现错误时较容易检查,连线较少且容易组装和调试。
结合两个方案的优缺点,我选择容易编程、组装和调试的方案二。

四、模块电路的设计
1、分频器模块
设计要求显示不同的彩灯的时候要伴随不同的音乐,所以设计分频器来用不同的频率控制不同的音乐输出。
模块说明:
Rst:输入信号 复位信号 用来复位分频器的输出使输出为“0”,及没有音乐输出。
Clk:输入信号 模块的功能即为分频输入的频率信号。
Clk_4、clk8、clk_12、clk_16:输出信号 即为分频模块对输入信号clk的分频,分别为1/4分频输出、1/8分频输出、1/12分频输出、1/16分频输出。不同的频率会发出不同的声音。如图

图四-1分频器电路图
2、16进制计数器
16进制模块用来控制彩灯输出模块,即确定彩灯控制器的不同的输出。
Rst:输入信号 复位信号 用来复位16进制使其输出为“00000”,即彩灯不亮。
Clk1:输入信号 用来给模块提供工作频率。
Count_out[3..0]:输出信号 即为16进制计数器的输出,此输出信号作为彩灯的输入信号。
如图四-2
图四-2 16进制计数器电路图
3、4进制计数器模块
4进制计数器作为选择器的输入来控制选择器选择不同的频率作为输出控制扬声器工作。
Clk2:输入信号 来为计数器提供工作频率。
Rst:输入信号 复位信号 使计数器的输出为“00”。
如图四-3
图四-3 4进制计数器电路图
4、4选1选择器模块
Rst:输入信号复位信号使选择器的输出为“0”。
In1、in2、in3、in4:输入信号接分频器的输出。
Inp[1..0]:输入信号接4进制计数器的输出用来控制选择器的选择不同的输入选择不同的输出。
Output2:输出信号直接接扬声器即输出的是不同的频率来控制扬声器播放声音
如图四—4
图四—4 4选1选择器电路图
5、彩灯控制模块
彩灯控制采用的模式6来进行显示。
图四—5—1模式6结构图
彩灯控制模块用来直接控制彩灯的输出,使彩灯表现出不同的花样。
Rst:输入信号 使彩灯控制模块的输出为“00000000”,即让彩灯无输出。
Input[4..0]:输入信号 不同的输入使彩灯控制模块有不同的输出即彩灯显示出不同的花样。
Output3[7..0]:输出信号 直接与数码管相连来控制数码管。
如图四—5—2
图四-5-2 彩灯控制电路图
五、EDA设计与仿真
1、源程序:
----------------------------------------------分频器模块-----------------------------------------

LIBRARYieee;
USEieee.std_logic_1164.all;

ENTITYfenpinqi IS

PORT
(
clk2,rst :IN std_logic;
clk_12,clk_4,clk_16,clk_8 : OUT std_logic
);

ENDfenpinqi;

ARCHITECTUREcd OF fenpinqi IS
begin
p1:process(clk2,rst)
variable a:integer range 0 to 20;

begin
if rst='1' then
clk_4<='0'; ----- 复位信号控制部分
else
if clk2'event and clk2='1'then
if a>=3 then
a:=0;
clk_4<='1';
else
a:=a+1;
clk_4<='0';
end if;
end if;
end if;
endprocess p1;

p2:process(clk2,rst)
variable b:integer range 0 to 20;

begin
if rst='1' then
clk_16<='0'; ----- 复位信号控制部分
else
if clk2'event and clk2='1'then
if b>=15 then
b:=0;
clk_16<='1';
else
b:=b+1;
clk_16<='0';
end if;
end if;
end if;
endprocess p2;

p3:process(clk2,rst)
variable c:integer range 0 to 20;

begin
if rst='1' then
clk_8<='0'; ----- 复位信号控制部分
else
if clk2'event and clk2='1'then
if c>=7 then
c:=0;
clk_8<='1';
else
c:=c+1;
clk_8<='0';
end if;
end if;
end if;
endprocess p3;

p4:process(clk2,rst)
variable d:integer range 0 to 40;

begin
if rst='1' then
clk_12<='0'; ----- 复位信号控制部分
else
if clk2'event and clk2='1'then
if d>=11 then
d:=0;
clk_12<='1';
else
d:=d+1;
clk_12<='0';
end if;
end if;
end if;
endprocess p4;
endcd;

----------------------------------------------4选1选择器---------------------------------------
LIBRARYieee;
USEieee.std_logic_1164.all;

ENTITYxzq4_1 IS

PORT
(
rst:in std_logic;
inp:in integer range 0 to 3;
in1,in2,in3,in4 : In std_logic;

output2 :OUT std_logic
);

ENDxzq4_1;

ARCHITECTUREa OF xzq4_1 IS

BEGIN

PROCESS (rst,inp)
BEGIN
if(rst='1') then output2<='0';

else
case inp is
when 0=>output2<=in1;
when 1=>output2<=in2;
when 2=>output2<=in3;
when 3=>output2<=in4;
when others=>null;
end case;
end if;
END PROCESS;
ENDa;

-------------------------------------------彩灯控制模块----------------------------------------
LIBRARYieee;
USEieee.std_logic_1164.all;

ENTITYcaideng IS

PORT
(
input :
IN INTEGER RANGE
0 TO 15;
rst:in std_logic;
output3 :OUT std_logic_vector(7 downto 0);
sm :out std_logic_vector(6 downto 0)
);

ENDcaideng;

ARCHITECTUREa OF caideng IS

BEGIN

PROCESS (input)
BEGIN
if rst='1' thenoutput3<="00000000";sm<="0000000";
else
case input is
when 0=>output3<="00111000";sm<="0000110";
when1=>output3<="00001111";sm<="0000110";
when2=>output3<="00111110";sm<="0000110";
when3=>output3<="01111111";sm<="0000110";

when4=>output3<="01011011";sm<="1011011";
when5=>output3<="01110110";sm<="1011011";
when6=>output3<="00001111";sm<="1011011";
when7=>output3<="01111111";sm<="1011011";

when8=>output3<="01101101";sm<="1001111";
when9=>output3<="00000111";sm<="1001111";
when10=>output3<="01110111";sm<="1001111";
when11=>output3<="01111011";sm<="1001111";

when12=>output3<="00111000";sm<="1100110";
when13=>output3<="00111111";sm<="1100110";
when14=>output3<="00111110";sm<="1100110";
when 15=>output3<="01111001";sm<="1100110";
when others=>null;

end case;
end if;
end process;
end a;

--------------------------------------------16进制计数器模块-----------------------------------

LIBRARYieee;
USEieee.std_logic_1164.all;

ENTITYcounter_16 IS

PORT
(
clk,rst :IN std_logic;
count_out :
OUT INTEGER RANGE
0 TO 15);

ENDcounter_16;

ARCHITECTUREa OF counter_16 IS
BEGIN

PROCESS (rst,clk)
variable temp:integer range 0 to 16;
BEGIN

IF rst='1' THEN
temp:=0;

ELSIF (clk'event and clk='1') THEN

temp:=temp+1;
if(temp=15) then
temp:=0;
end if;
END IF;
count_out<=temp;
END PROCESS;
ENDa;

-------------------------------4进制计数器模块----------------------------------
LIBRARYieee;
USEieee.std_logic_1164.all;

ENTITYcounter_4 IS

PORT
(
clk,rst :IN std_logic;
count_out :OUT integer range 0 to 3 );

ENDcounter_4;

ARCHITECTUREa OF counter_4 IS
BEGIN

PROCESS (rst,clk)
variable temp:integer range 0 to 16;
BEGIN

IF rst='1' THEN
temp:=0;
ELSIF (clk'event and clk='1') THEN

temp:=temp+1;
if(temp=4) then
temp:=0;
end if;
END IF;
count_out<=temp;
END PROCESS;
ENDa;

-------------------------------------------主程序----------------------------------
LIBRARYieee;
USEieee.std_logic_1164.all;

ENTITYproject IS
PORT (clk1,rst,clk2: IN std_logic;
Out1: OUT std_logic_vector(7 downto 0);
Out2 :out std_logic_vector(6 downto0);
Out3: OUT std_logic);
ENDproject;

ARCHITECTUREstruct OF project IS
COMPONENT counter_16 IS
PORT(clk,rst : IN std_logic;
count_out : OUT integer range 0 to 15 );
ENDCOMPONENT;

COMPONENT fenpinqi IS
PORT(clk2,rst : IN std_logic;
clk_12,clk_4,clk_16,clk_8 : OUT std_logic);
END COMPONENT ;

COMPONENT counter_4 IS
PORT(clk,rst :IN std_logic;
count_out :OUT integer range 0 to 3 );

ENDCOMPONENT;

COMPONENT xzq4_1 IS
PORT
(
rst:in std_logic;
inp:in integer range 0 to 3;
in1,in2,in3,in4 : In std_logic;

output2 :OUT std_logic
);

ENDCOMPONENT;

COMPONENT caideng IS
PORT
(
input: IN INTEGER RANGE 0 TO 15;
rst:in std_logic;
output3 :OUT std_logic_vector(7 downto 0);
sm :out std_logic_vector(6 downto 0)
);

ENDCOMPONENT;

SIGNALu: integer range 0 to 15;
SIGNALw: integer range 0 to 3;
SIGNALv1,v2,v3,v4: std_logic;

BEGIN
U1:counter_16PORT MAP(clk1,rst,u);
U2:fenpinqiPORT MAP(clk2,rst, v1,v2,v3,v4);
U3:counter_4PORT MAP(v3,rst,w);
U4:xzq4_1 PORT MAP(rst,w, v1,v2,v3,v4,out3);
U5:caidengPORT MAP(u,rst,out1,out2);
ENDstruct;
2、彩灯控制器仿真结果及数据分析
分析:如上图,clk1控制的是彩灯模块,clk2控制的是声音模块,当rst为高电平是输出全为0,ck1每出现四个高电平,花型发生一次变化,out2分别显示1、2、3、4,out1显示不同的花型,out3发出声音,如图脉冲数不同表示发出的声音不同,但是声音与花型相比有一定的延迟。
六、硬件实现
1、引脚锁定图
2、硬件仿真图
显示第一组花型之一
显示第二组花型之一
显示第三组花型之一

显示的第四组花型之一

七、总体电路
整个系统就是各个分模块组成来实现最后的彩灯控制功能,系统又两个时钟来控制一个是控制16进制计数器即控制彩灯控制模块来实现彩灯的不同输出,另一个时钟为分频器的输入来进行分频处理,最后用来控制扬声器发出不同的音乐,为了使效果明显尽量达到要求分频处理的时钟的频率比实现彩灯控制的时钟频率要高。
将各个模块连在一起采用在课程中学到的元件例化,将各个模块的引脚连在一起,使之成为一个整体。元件例化是VHDL设计实体构自上而下层次化设计的重要途径。整体电路如图五—1

图七—1 整体电路图
八、心得体会
1、在设计时遇到一些主要问题如下:怎么将各个模块连在一起、开始硬件仿真时总是出现错误,设计方案的选择。最后我选择了元件例化将各个模块连在一起,仿真时是因为短路帽接错了,当时没有注意,在方案的选择时我们选了实现比较简单的分模块方案
2、这次的EDA课程设计我学到得东西很多明白了理论与实践之间的差距,而且对DEA课程有了更深入的理解,尤其是知道了怎么去应用所学的知识,怎么去利用网络实现自己的要求,具体体会如下:
(1)要想完成编程就要对DEA知识很熟悉,这样才能加快编程的速度,另外在编程时一定要小心,稍微有一点粗心都会有很多的错误出现,在出现错误后要学会寻找错误原因如名称前后不一、数据类型不同、符号写错等等
(2)拿道题目后要注意分析,要学会总体把握,然后再一一一细化、学会将复杂的问题简单化,分析时一定要有一个明确的目标。
(3)要学会理论联系实际,在程序导入到实验箱后,居然不显示结果,认真的检查看看操作是否有错误、试验箱中该短路的是否已用短路帽短路、又重新检查了一下程序,结果发现是短路帽接错了,所以看似很简单的操作自己操作起来可能会有很大的漏洞,所以亲自动手是很重要的。
(4)当自己的只是有限时,要注意运用网络等一切资源,要学会知识的灵活运用在查阅的过程中学到了很多在书本所没有学到的知识,通过查阅相关资料进一步加深了对EDA的了解
总的来说,通过这次课程设计不仅锻炼了我们的动手和动脑能力,也使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,要把所学的理论知识与实践相结合起来,才能提高自己的实际动手能力和独立思考的能力。还有最重要的一点就是要有一丝不苟的精神和端正认真的态度,遇到困难后要学会积极的面对。
3、在此设计中声音会有一定的延迟,可以考虑用花型输出信号作为4选1的控制信号
九、参考书目:
赵伟军,《Protel99se教程》,北京,人民邮电出版社,1996年
金西,《VHDL与复杂数字系统设计》,西安,西安电子科技大学出版社,2003
汉泽西,《EDA技术及其应用》,北京,北京航空航天大学出版社,2004
[4] 黄任,《VHDL入门.解惑.经典实例.经验总结》,北京,北京航空航天大学出版社,2005
[5] 李洋,《EDA技术 使用教程》,北京,机械工业出版社,2009
[6] 网络资源:EDA课程设计、EDA课程设计—彩灯控制器等
温馨提示:内容为网友见解,仅供参考
无其他回答

EDA 16路彩灯设计
把频率控制模块(模块三)和彩灯控制模块(模块四)连接起来,就组成了频率可调的彩灯控制器,输入端control可控制输入频率(0为2赫兹,1为1赫兹)。仿真波形如下:图中显示了控制信号分别为0和1时的波形 三、设计结论(包括设计过程中出现的问题;对EDA课程设计感想、意见和建议)1. 硬件实验情况 软件...

EDA课程设计:彩灯控制器
方案二:电路分为五个模块:分频器模块、16进制计数器、4进制计数器,4选1选择器、彩灯控制器。其中彩灯控制器是用来输出不同的花样,彩灯控制器的输出则是用一个16进制的计数器来控制,扬声器的输出时用不同的频率来控制,所以用了一个集成分频器来使输入的频率被分为几种不同的频率,不同频率的选择性的输出则是用...

电子设计自动化技术的专业课程
电子设计自动化(EDA)技术课程是应用电子技术专业一门非常重要的专业能力课。它是一门实践性非常强的课程,我们的课程重在培养学生的工程素质、分析问题解决问题的能力、动手能力和创新意识。本课程共有五个案例:数字钟设计、4位加法器设计、彩灯控制器设计、交通管理器设计以及序列检测器设计。课程共分为...

四位二进制 算术运算和逻辑运算 eda实验
1.设计16路数显报警器,16路中某一路断开时(可用高低电平表示断开和接通),用十进制数显示该路编号,并发出声音信号;2.报警时间持续10秒钟;3.当多路报警时,要有优先级,并将低优先级的报警存储,处理完高优先级报警后,再处理之(附加)。十九、脉冲按键电话按键显示器要求:1.设计一个具有八位显示的电话按键显示器;...

关于D类放大器的毕业论文
441. 试论配电系统设计方案的比较 442. 试论特殊条件下交流接触器的选用 443. 音频功率放大器的设计 444. 具有红外保护的温度自动控制系统的设计 445. 直流数字电压表的设计 446. 金属探测器制作 447. 太阳能装饰灯 448. 彩灯控制器 449. 自动选台立体声调频收音机 450. 浅析公路交通安全报警系统 451. 浅析...

求EDA技术实用教程(潘松第三版)箜篌习题答案,在线等
第7章 EDA技术综合设计应用7.1 数字闹钟的设计7.1.1 系统的设计要求7.1.2 系统的总体设计7.1.3 闹钟控制器的设计7.1.4 译码器的设计7.1.5 键盘缓冲器(预置寄存器)的设计7.1.6 闹钟寄存器的设计7.1.7 时间计数器的设计7.1.8 显示驱动器的设计7.1.9 分频器的设计7.1.10 系统的整体组装7.1.11 系统的硬件验证...

电子信息工程毕业论文
878.基于EDA技术的数字电子钟设计879.基于EDA技术的智力竞赛抢答器的设计880.基于FPGA的18路智力竞赛电子抢答器设计881.基于USB接口的数据采集系统设计与实现882.基于单片机的简易智能小车的设计883.基于单片机的脉象信号采集系统设计884.一种斩控式交流电子调压器设计885.通信用开关电源的设计886.鸡舍灯光控制器 887....

相似回答