音乐数码管计时点阵流水灯设计.docx

上传人:b****3 文档编号:3513047 上传时间:2022-11-23 格式:DOCX 页数:30 大小:70.95KB
下载 相关 举报
音乐数码管计时点阵流水灯设计.docx_第1页
第1页 / 共30页
音乐数码管计时点阵流水灯设计.docx_第2页
第2页 / 共30页
音乐数码管计时点阵流水灯设计.docx_第3页
第3页 / 共30页
音乐数码管计时点阵流水灯设计.docx_第4页
第4页 / 共30页
音乐数码管计时点阵流水灯设计.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

音乐数码管计时点阵流水灯设计.docx

《音乐数码管计时点阵流水灯设计.docx》由会员分享,可在线阅读,更多相关《音乐数码管计时点阵流水灯设计.docx(30页珍藏版)》请在冰豆网上搜索。

音乐数码管计时点阵流水灯设计.docx

音乐数码管计时点阵流水灯设计

可编程器件及数字系统设计

音乐数码管计时点阵流水灯设计

 

目录

 

一设计目的与任务3

1设计目的3

2设计任务3

二设计方案4

三设计实现5

1音乐模块5

2数码管模块8

3点阵模块11

4流水灯模块11

四实验结果及分析12

五实习总结13

六附录(程序或电路图)14

一设计目的与任务

1设计目的

爱情,是一个永远都很流行的元素,从古至今,亘古未变。

而梁山伯与祝英台的爱情故事更是被视为爱情的典范,《梁祝》细腻地呈现这一段唯美彻骨、惊天动地的爱情。

他们的情,感天动地,二人化成彩蝶翩翩飞舞。

本作品古今结合,融合梁祝优美凄凉的音乐和变化的点阵,更有类似播放音乐的数码管时钟和变化多样的十二个流水灯,更增加了现代的气息。

本作品可以用来制作工艺品来表达爱人双方对对方的爱。

在点阵上可以画出各种图案,并写上想说的话,独特而实用。

2设计任务

由于硬件原因,本应该用蜂鸣器发声的改用扬声器来发声。

把扬声器,点阵,流水灯,数码管四部分组合在一起,完成以声音为核心的整体组合。

其中,对音乐的编写需要计算来调频,并且对音乐有一定的基础。

对点阵,有图案的变化,通过频率和画出的图案的变化,可以产生动画的效果,但是由于模块的限制只能大体显示这个意思。

流水灯是通过一个计数器改变十二个灯亮的形式。

数码管则是一个数字钟的前身,只有秒数和分钟数,因为现实中歌曲很少有超过一小时的。

二设计方案

图1—1

先通过分频程序对声音进行分频,查找乐谱,使发出想要的音乐。

然后通过数码管计时,产生音乐播放器的效果,并在后续连接点阵显示想要的文字和图案。

并且通过计数器来控制流水灯。

 

三设计实现

1音乐模块

音乐模块,就是用扬声器循环播放“梁祝”这首歌,是此次设计的核心所在。

程序如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

entityyinyueis

port(

clk:

instd_logic;

speaker:

outstd_logic);

endyinyue;

architecturebhvofyinyueis

signalup:

std_logic_vector(0to18);

signalyin:

integerrange0to17:

=1;

signalj:

integerrange0to139:

=1;

signalshijian,jiange:

integerrange0to20480;

begin

process(clk)

begin

if(clk'eventandclk='1')then

ifup="1111111111111111111"then

up<="0000000000000000000";

j<=j+1;

elseup<=up+1;

ifj=70thenj<=1;endif;------

casejis

when0=>yin<=3;

when1=>yin<=3;

when2=>yin<=3;

when3=>yin<=3;--

when4=>yin<=5;

when5=>yin<=5;

when6=>yin<=5;

when7=>yin<=6;--

when8=>yin<=8;

when9=>yin<=8;

when10=>yin<=8;

when11=>yin<=9;--

when12=>yin<=6;

when13=>yin<=8;

when14=>yin<=5;

when15=>yin<=5;--

when16=>yin<=12;

when17=>yin<=12;

when18=>yin<=12;

when19=>yin<=15;--

when20=>yin<=13;

when21=>yin<=12;

when22=>yin<=10;

when23=>yin<=12;--

when24=>yin<=9;

when25=>yin<=9;

when26=>yin<=9;

when27=>yin<=9;--

when28=>yin<=9;

when29=>yin<=9;

when30=>yin<=0;

when31=>yin<=0;--

when32=>yin<=9;

when33=>yin<=9;

when34=>yin<=9;

when35=>yin<=10;--

when36=>yin<=7;

when37=>yin<=7;

when38=>yin<=6;

when39=>yin<=6;--

when40=>yin<=5;

when41=>yin<=5;

when42=>yin<=5;

when43=>yin<=6;--

when44=>yin<=8;

when45=>yin<=8;

when46=>yin<=9;

when47=>yin<=9;--

when48=>yin<=3;

when49=>yin<=3;

when50=>yin<=8;

when51=>yin<=8;--

when52=>yin<=6;

when53=>yin<=5;

when54=>yin<=6;

when55=>yin<=8;--

when56=>yin<=5;

when57=>yin<=5;

when58=>yin<=5;

when59=>yin<=5;--

when60=>yin<=5;

when61=>yin<=5;

when62=>yin<=0;

when63=>yin<=0;----

when64=>yin<=10;

when65=>yin<=10;

when66=>yin<=10;

when67=>yin<=12;--

when68=>yin<=7;

whenothers=>yin<=0;

endcase;

caseyinis

when1=>jiange<=7816;--c

when2=>jiange<=6965;--d

when3=>jiange<=6206;--e

when4=>jiange<=5868;--f

when5=>jiange<=5224;--g

when6=>jiange<=4654;--a

when7=>jiange<=4145;--b

when8=>jiange<=3915;

when9=>jiange<=3543;

when10=>jiange<=3107;

when11=>jiange<=2934;

when12=>jiange<=2612;

when13=>jiange<=2327;

when14=>jiange<=2072;

when15=>jiange<=1957;

whenothers=>speaker<='0';

endcase;

ifshijian<=jiangethenshijian<=shijian+1;

ifshijian<=jiange/2thenspeaker<='1';elsespeaker<='0';endif;

elseshijian<=0;

endif;

endif;

endif;

endprocess;

endbhv;

 

2数码管模块

简单计时装置,修改自数字钟,产生播放器的感觉,程序如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYjishiIS

port(sel:

bufferstd_logic_vector(7downto0);

seg:

outstd_logic_vector(6downto0));

endjishi;

architecturebhvofjishiis

signalff:

std_logic_vector(20downto0);

signalclk0:

std_logic;

signalaa,bb:

std_logic_vector(5downto0);

signalk:

std_logic_vector(2downto0);

signaltemp1,temp2:

std_logic_vector(5downto0);

signalresult1,result2,co1,co2:

std_logic_vector(3downto0);

signaldd:

std_logic_vector(2downto0);

signalsum:

std_logic_vector(3downto0);

begin

 

clk0<=ff(20);

p1:

process(clk)

begin

if(clk'eventandclk='1')then

ff<=ff+1;

endif;

endprocess;

process(clk0)

begin

if(clk0'eventandclk0='1')then

ifaa="111011"then

aa<="000000";

bb<=bb+1;

else

bb<=bb;

aa<=aa+1;

endif;

ifbb="111011"then

bb<="000000";

endif;

endif;

ifaa<10then

temp1<=aa;

result1<=temp1(3downto0);

co1<="0000";

endif;

if(aa>9andaa<20)then

temp1<=aa+6;

result1<=temp1(3downto0);

co1<="0001";

endif;

if(aa>19andaa<30)then

temp1<=aa+12;

result1<=temp1(3downto0);

co1<="0010";

endif;

if(aa>29andaa<40)then

temp1<=aa+18;

result1<=temp1(3downto0);

co1<="0011";

endif;

if(aa>39andaa<50)then

temp1<=aa+24;

result1<=temp1(3downto0);

co1<="0100";

endif;

if(aa>49andaa<60)then

temp1<=aa+30;

result1<=temp1(3downto0);

co1<="0101";

endif;

ifbb<10then

temp2<=bb;

result2<=temp2(3downto0);

co2<="0000";

endif;

if(bb>9andbb<20)then

temp2<=bb+6;

result2<=temp2(3downto0);

co2<="0001";

endif;

if(bb>19andbb<30)then

temp2<=bb+12;

result2<=temp2(3downto0);

co2<="0010";

endif;

if(bb>29andbb<40)then

temp2<=bb+18;

result2<=temp2(3downto0);

co2<="0011";

endif;

if(bb>39andbb<50)then

temp2<=bb+24;

result2<=temp2(3downto0);

co2<="0100";

endif;

if(bb>49andbb<60)then

temp2<=bb+30;

result2<=temp2(3downto0);

co2<="0101";

endif;

endprocess;

process(clk)

begin

if(clk'eventandclk='1')then

dd<=dd+1;

endif;

endprocess;

withddselect

sel<="10000000"when"000",

"01000000"when"001",

"00100000"when"010",

"00010000"when"011",

"00001000"when"100",

"00000100"when"101",

"00000010"when"110",

"00000001"when"111";

withddselect

sum<=co2when"000",

result2when"001",

"1010"when"010",

co1when"011",

result1when"100",

"0000"whenothers;

withsumselect

seg<="1000000"when"0000",

"1111001"when"0001",

"0100100"when"0010",

"0110000"when"0011",

"0011001"when"0100",

"0010010"when"0101",

"0000010"when"0110",

"1011000"when"0111",

"0000000"when"1000",

"0010000"when"1001",

"0111111"when"1010",

"1111111"whenothers;

endbhv;

3点阵模块

点阵模块,主要就是点阵循环跳动显示心形(有大有小,动画的思想),还有蝴蝶形,还有“爱成蝶”三个字。

(由于程序较长,且后面有附录,所以不在此显示。

4流水灯模块

流水灯模块,主要显示的就是12盏灯循环有规则亮灭,配合音乐,并不断变化,形成视觉上的效果。

(由于程序较长,且后面有附录,所以不在此显示。

四实验结果及分析

实验成品的效果是音乐在播放,同时数码管开始计时,点阵开始显示文字和图案,流水灯也开始按照各种形式来循环闪烁。

除了音乐是上网查的一些音谱和学习了一下大体模式,其它的都是本次实习过程中做成功的程序的修改。

在实验的过程中一共碰到了以下几个问题

1、音乐模块中播放音乐开始使用蜂鸣器,但是总是发出类似蝉鸣的叫声,无论怎么改都不好用;后来使用扬声器,开始时有杂音,十分不清晰,后来经过分析,造成这个问题的原因可能有两个:

第一,分频不对,造成音调有高有低,播放的不成曲调。

第二,扬声器有失真效应,造成播放的有杂音。

发现原因后,又重新对分频进行了处理,然后换了一个新的扬声器,而后程序编译通过,终于可以正常播放音乐了。

2、在加入各种模块的过程中,出现了逻辑单元不够用的现象,怎么改都不好用,后来经过多方修改,发现使用的if语句使用太多的缘故,更改了一些语句,终于逻辑单元的数目降下来了,编译通过了。

3、点阵模块设计时,出现了只跳动前几个字的现象,而且每两个一停顿。

最后还有一个全亮的,经过修改程序,发现其中的一个计数器的位数不够,还有分频分的不对,是一个比0.5秒多一点的频率,修改成1秒,上述情况就解决了。

五实习总结

先总结一下自主设计,本次设计是我第一次用一门自己陌生的语言做的设计,做的不是很完善,只能说是一些基本模块的整合。

关于音乐系统,因为时间和知识缺乏的关系,设计得很是简陋,远远达不到当今社会的需求,应该多加几首音乐,并且用加入音乐选择的功能,这样,现实性更强了,同时点阵的设计本来想加一个跳动与滚动的转化的,但是时间仓促,总是有错误,所以最后只能放弃,以后好好研究一下。

再总结一下整个小学期的实习,在短短的四个星期的日子里,学到很多很多的的东西,不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

以焊电路板开始,以自主设计结束,每一次都感觉自己做的很难,一旦成功后,就会继续更难更复杂的东西。

课程设计也由浅入深,在之前的基础之上灵活使用,不仅需要缜密的逻辑思维以及清醒的头脑,更需要很强的动手能力,使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。

我会把这段经历当做一笔宝贵的财富,激励我不断前进。

 

六附录(程序或电路图)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYYINYYUEIS

port(clk:

instd_logic;

speaker:

outstd_logic;

i1:

outstd_logic_vector(15downto0);

i2:

outstd_logic_vector(15downto0);

sel:

bufferstd_logic_vector(7downto0);

seg:

outstd_logic_vector(6downto0);

dout:

outstd_logic_vector(11downto0));

endyinyyue;

architecturebhvofyinyyueis

signalup:

std_logic_vector(0to18);

signalyin:

integerrange0to17:

=1;

signalj:

integerrange0to139:

=1;

signalshijian,jiange:

integerrange0to20480;

signala,e:

std_logic;

signalb:

std_logic_vector(20downto0);

signalc:

std_logic_vector(3downto0);

signald:

std_logic_vector(2downto0);

signali2a,i2b,i2c,i2d,i2e,i2f,i2g:

std_logic_vector(15downto0);

signalcl:

std_logic_vector(20downto0);

signalmm:

integerrange0to15;

signalclm:

std_logic;

signalnnn:

integerrange0to31;

signaly1:

std_logic_vector(31downto0);

signalx,y:

std_logic_vector(15downto0);

signalff:

std_logic_vector(20downto0);

signalclk0:

std_logic;

signalaa,bb:

std_logic_vector(5downto0);

signalk:

std_logic_vector(2downto0);

signaltemp1,temp2:

std_logic_vector(5downto0);

signalresult1,result2,co1,co2:

std_logic_vector(3downto0);

signaldd:

std_logic_vector(2downto0);

signalsum:

std_logic_vector(3downto0);

signalcnt:

std_logic_vector(7downto0);

--variablecount:

integerRANGE0TO7;

signalcount:

std_logic_vector(5DOWNTO0);

signalf:

std_logic_vector(22downto0);

signalclk1:

std_logic;

begin

process(clk)

begin

if(clk'eventandclk='1')then

if(b<2048000)then

b<=b+1;else

b<="000000000000000000000";

endif;

endif;

endprocess;

e<='1'whenb<="000000000000000000000"else

'0';

process(clk)

begin

ifclk'eventandclk='1'then

c<=c+1;

endif;

endprocess;

process(e)

begin

ife'eventande='1'then

ifd<7then

d<=d+1;

else

d<="000";

endif;

endif;

endprocess;

withcselect

i1<="1000000000000000"when"0000",

"0100000000000000"when"0001",

"0010000000000000"when"0010",

"0001000000000000"when"0011",

"0000100000000000"when"0100",

"0000010000000000"when"0101",

"0000001000000000"when"0110",

"0000000100000000"when"0111",

"0000000010000000"when"1000",

"0000000001000000"when"1001",

"0000000000100000"when"1010",

"0000000000010000"when"1011",

"0000000000001000"when"1100",

"0000000000000100"when"1101",

"0000000000000010"when"1110",

"0000000000000001"when"1111";

process(e)

begin

casecis

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学案例设计

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1