跑马灯的设计doc.docx
《跑马灯的设计doc.docx》由会员分享,可在线阅读,更多相关《跑马灯的设计doc.docx(14页珍藏版)》请在冰豆网上搜索。
跑马灯的设计doc
西安欧亚学院
设计报告
设计名称:
电子琴
指导老师:
张秀芳
班级:
统本电信1201
学号:
12610109170081
姓名:
邢哲
跑马灯的设计
1设计目的
系统设计采用自顶向下的设计方法,使用简单的EDA程序实现跑马灯显示效果设计。
并且熟悉可编程逻辑器件的使用,通过制作来了解跑马灯控制系统。
2设计的主要内容和要求
2.1.实现8个红色LED的亮、灭、交错显示等,其显示如下
(1)复位时,8个灯全灭;
(2)从左到右第一个开始亮,依次亮到最后一个;
(3)从右到左第一个开始亮,依次亮到最后一个;
(4)从中间亮到两边;
(5)从两边亮到中间;
2.2.随着彩灯显示图案的变化,发出不同的音响声。
3整体设计方案
这次的跑马灯设计采用的是分模块来完成的,包括分频器、计数器、选择器、彩灯控制器。
其中彩灯控制器是用来输出不同的花样,彩灯控制器的输出则是用一个32进制的计数器来控制,扬声器的输出时用不同的频率来控制,所以用了一个集成分频器来使输入的频率被分为几种不同的频率,不同频率的选择性的输出则是用一个4选一的选择器来控制。
图3.1跑马灯的输出原理方框图
图3.2扬声器输出原理方框图
4硬件电路的设计与软件设计
4.1集成分频器模块
1)设计要求显示不同的跑马灯的时候要伴随不同的音乐,所以设计分频器来用不同的频率控制不同的音乐输出。
模块说明:
Rst:
输入信号复位信号用来复位集成分频器的输出使输出为“0”,及没有音乐输出。
Clk:
输入信号模块的功能即为分频输入的频率信号。
Clk_4、clk_6、clk_8、clk_10:
输出信号即为分频模块对输入信号clk的分频,分别为1/4分频输出、1/6分频输出、1/8分频输出、1/10分频输出。
图4.1集成分频器
2)分频器VHDL程序编写及仿真结果
LIBRARYieee;
USEieee.std_logic_1164.all;--IEEE库使用声明
ENTITYfenpinqiIS--实体端口声明
PORT(clk,rst:
INstd_logic;--类型的输入端口
clk_10,clk_4,clk_6,clk_8:
OUTstd_logic);--输出口
ENDfenpinqi;
ARCHITECTUREcdOFfenpinqiIS--结构体功能描述语句
begin
p1:
process(clk,rst)--进程语句
variablea:
integerrange0to20;
begin
ifrst='1'then
clk_4<='0';---复位信号控制部分
else
ifclk'eventandclk='1'then--时钟信号clk,上升沿有效边沿
ifa>=3thena:
=0;--当a大于等于3时,则a等于0
clk_4<='1';
else
a:
=a+1;--否则a等于a加1
clk_4<='0';
endif;
endif;
endif;
endprocessp1;
p2:
process(clk,rst)
variableb:
integerrange0to20;
begin
ifrst='1'then
clk_6<='0';-----复位信号控制部分
else
ifclk'eventandclk='1'then
ifb>=5then
b:
=0;
clk_6<='1';
else
b:
=b+1;
clk_6<='0';
endif;
endif;
endif;
endprocessp2;
p3:
process(clk,rst)
variablec:
integerrange0to20;
begin
ifrst='1'then
clk_8<='0';-----复位信号控制部分
else
ifclk'eventandclk='1'then
ifc>=7then
c:
=0;
clk_8<='1';
else
c:
=c+1;
clk_8<='0';
endif;
endif;
endif;
endprocessp3;--关闭进程
p4:
process(clk,rst)--开启另外一个进程
variabled:
integerrange0to20;--定义d为变量
begin
ifrst='1'then
clk_10<='0';-----复位信号控制部分
else
ifclk'eventandclk='1'then
ifd>=9then
d:
=0;
clk_10<='1';
else
d:
=d+1;
clk_10<='0';
endif;
endif;
endif;endprocessp4;endcd;
图4.2集成分频器仿真波形
4.232进制计数器模块
1)32进制模块用来控制彩灯输出模块,即确定跑马灯控制器的不同的输出。
Rst:
输入信号复位信号用来复位32进制使其输出为“00000”。
Clk:
输入信号用来给模块提供工作频率。
Count_out[4..0]:
输出信号即为32进制计数器的输出。
图4.332进制计数器
2)32进制计数器VHDL程序编写及其仿真结果
libraryieee;
useieee.std_logic_1164.all;--IEEE库使用声明
entitycounter_32is--实体端口声明
port(clk,rst:
instd_logic;--声明clk,clr是标准逻辑位类型的输入端口
count_out:
outintegerrange0to31);
endcounter_32;
architectureaofcounter_32is
begin
process(rst,clk)
variabletemp:
integerrange0to32;--定义temp为变量
begin
ifrst='1'then--条件选择语句
temp:
=0;
elsif(clk'eventandclk='1')then
temp:
=temp+1;
if(temp=32)then
temp:
=0;
endif;endif;
count_out<=temp;
endprocess;enda;
图4.432进制计数器仿真波形
4.3彩灯控制模块
1)彩灯控制模块用来直接控制跑马灯的输出,使彩灯表现出不同的花样。
Rst:
输入信号使彩灯控制模块的输出为“00000000”,即让彩灯无输出。
Input[4..0]:
输入信号不同的输入使彩灯控制模块有不同的输出即彩灯显示出不同的花样。
Output[7..0]:
输出信号直接与彩灯相连来控制彩
图4.5彩灯控制模块
2)彩灯控制模块VHDL程序编写及仿真
LIBRARYieee;
USEieee.std_logic_1164.all;--IEEE库使用声明
ENTITYcaidengIS--实体端口声明
PORT(input:
ININTEGERRANGE0TO31;
rst:
instd_logic;
output:
OUTstd_logic_vector(7downto0);
sm:
outstd_logic_vector(6downto0));
ENDcaideng;
ARCHITECTUREaOFcaidengIS--结构体功能描述语句
BEGIN
PROCESS(input,rst)
BEGIN
ifrst='1'thenoutput<="00000000";sm<="0000000";--当rst复位时,灯全灭
else
caseinputis
when0=>output<="10000000";sm<="0000110";
when1=>output<="01000000";sm<="0000110";
when2=>output<="00100000";sm<="0000110";
when3=>output<="00010000";sm<="0000110";
when4=>output<="00001000";sm<="0000110";
when5=>output<="00000100";sm<="0000110";
when6=>output<="00000010";sm<="0000110";
when7=>output<="00000001";sm<="0000110";
--当sm为110时,灯从左到右第一个开始亮
when8=>output<="00010000";sm<="0011011";
when9=>output<="00110000";sm<="0011011";
when10=>output<="00111000";sm<="0011011";
when11=>output<="01111000";sm<="0011011";
when12=>output<="01111100";sm<="0011011";
when13=>output<="01111110";sm<="0011011";
when14=>output<="11111110";sm<="0011011";
when15=>output<="11111111";sm<="0011011";
--当sm为11011时,灯从中间亮到两边
when16=>output<="10000001";sm<="1001111";
when17=>output<="11000001";sm<="1001111";
when18=>output<="11000011";sm<="1001111";
when19=>output<="11100011";sm<="0011011";
when20=>output<="11100111";sm<="1001111";
when21=>output<="11110111";sm<="1001111";
when22=>output<="11111111";sm<="1001111";
when23=>output<="00001000";sm<="1001111";
--当sm为1001111时,灯从两边亮到中间
when24=>output<="00000001";sm<="0100110";
when25=>output<="00000010";sm<="0100110";
when26=>output<="00000100";sm<="0100110";
when27=>output<="00001000";sm<="0100110";
when28=>output<="00010000";sm<="0100110";
when29=>output<="00100000";sm<="0100110";
when30=>output<="01000000";sm<="0100110";
when31=>output<="10000000";sm<="0100110";
whenothers=>null;
--当sm为0100110时,灯从右边亮到左边
endcase;
endif;
endprocess;
enda;
图4.6.跑马灯控制模块仿真波形
4.44选1选择器模块
1)Rst:
输入信号复位信号使选择器的输出为“0”。
In1、in2、in3、in4:
输入信号接分频器的输出。
Inp[1..0]:
输入信号接4进制计数器的输出用来控制选择器的选择不同的输入选择不同的输出。
Output:
输出信号直接接扬声器即输出的是不同的频率来控制扬声器播放音乐。
图4.74选1选择器
2)4选1选择器模块VHDL程序编写及仿真
Libraryieee;
useieee.std_logic_1164.all;--IEEE库使用声明
entitymux41is--实体端口声明
port(rst:
instd_logic;
s:
instd_logic_vector(1downto0);
a,b,c,d:
instd_logic;
y:
outstd_logic);
endmux41;
architectureaofmux41is--结构体功能描述语句
begin
process(rst,s,a,b,c,d)
begin
if(rst='1')theny<='0';
else
casesis--case选择语句
when"00"=>y<=a;
when"01"=>y<=b;
when"10"=>y<=c;
when"11"=>y<=d;
whenothers=>null;
endcase;
endif;endprocess;enda;
图4.84选1选择器仿真波形
4.54进制计数器模块
1)4进制计数器作为选择器的输入来控制选择器选择不同的频率作为输出控制扬声器工作。
Clk:
输入信号来为计数器提供工作频率。
Rst:
输入信号复位信号使计数器的输出为“00”。
图4.94进制计数器
2)4进制计数器模块VHDL程序编写及仿真
LibraryIEEE;
useieee.std_logic_1164.all;--IEEE库使用声明
entitycounter_4is--实体端口声明
port(clk,rst:
instd_logic;--声明clk,clr是标准逻辑位
count_out:
outintegerrange0to3);
endcounter_4;
architectureaofcounter_4is
begin
process(rst,clk)
variabletemp:
integerrange0to4;
begin
ifrst='1'then--如果rst为1,变量temp:
为0,否则temp:
=temp+1;
temp:
=0;
elsif(clk'eventandclk='1')then
temp:
=temp+1;
if(temp=4)then
temp:
=0;
endif;
endif;
count_out<=temp;--把temp赋值给count_out
endprocess;enda
图4.104进制计数器仿真波形
5系统结构及仿真
整个系统就是各个分模块组成来实现最后的彩灯控制功能,系统又两个时钟来控制一个是控制32进制计数器即控制彩灯控制模块来实现彩灯的不同输出,另一个时钟为分频器的输入来进行分频处理,最后用来控制扬声器发出不同的音乐,具体分频处理的时钟的频率比实现彩灯控制的时钟频率要高。
图5.1系统功能模块
图5.2系统功能仿真波形
6.总结
这次的EDA课程设计有一周的时间,在这一周的时间里我们充分合理的安排了自己的时间来使本次的课程设计能够顺利的完成,当然我们在本次的设计中并不是一帆风顺的,我们遇到了一些的问题,例如我们开始时用的文本的方式用一个总的程序来完成,可以在设计的过程中我们发现程序编到后面变量越到很容易搞混淆同时各个进程间的联系也越来越模糊以至于后面我们自己都不知道程序的整体框图是什么,导致后面不能够继续下去,后面我们再一次对我们这次的设计题目进行了分析和整理,最后我和我的同伴决定采用分模块的方式来完成本次的课题设计,当然最重要的是分析各个模块间的关系。
最后我们采用上面分析的结构框图。
最后我们的设计很成功,仿真和硬件测试都是正确的,实现了我们的设计要求和目的。
在这次设计中我们收获了很多,首先最直接的收获就是我们巩固了这门课程所学过的知识,把它运用到了实践当中,并且学到了很多在书本撒和那个所没有学到的知识,通过查阅相关资料进一步加深了对EDA的了。
总的来说,通过这次课程设计不仅锻炼了我们的动手和动脑能力,也使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,要把所学的理论知识与实践相结合起来,才能提高自己的实际动手能力和独立思考的能力。
在我们的共同努力和指导老师的指引下我们圆满的完成了彩灯控制器的设计,实现了设计目的。
参考书目:
[1]赵伟军,《Protel99se教程》,北京,人民邮电出版社,1996年
[2]金西,《VHDL与复杂数字系统设计》,西安,西安电子科技大学出版社,2003
[3]汉泽西,《EDA技术及其应用》,北京,北京航空航天大学出版社,2004
[4]李炳宇,萧蕴诗,李永东.AT89C51单片机在多层楼宇对讲系统中的应用[J].自动化与仪表,2001,38(04):
23-25.
[5]李强华,张根宝,段力.基于单片机控制的楼宇对讲系统的设计[J].电气应用,2007,12(01):
04-06.
[6]吴庆元,卢益民.智能小区系统通信协议的设计[J].通信技术,2003,19(7):
98-99.
[7]Philips.80C51-based8-BitMicrocontrollers[M].1994:
36-45.
[8]李建忠.单片机原理及应用[M].西安:
西安电子科技大学出版,2002:
63-78.
[9]张俊谟.单片机中级教程[M].北京:
北京航空航天大学出版,2000:
36-45.