音乐数码管计时点阵流水灯设计Word下载.docx
《音乐数码管计时点阵流水灯设计Word下载.docx》由会员分享,可在线阅读,更多相关《音乐数码管计时点阵流水灯设计Word下载.docx(30页珍藏版)》请在冰豆网上搜索。
clk:
instd_logic;
speaker:
outstd_logic);
endyinyue;
architecturebhvofyinyueis
signalup:
std_logic_vector(0to18);
signalyin:
integerrange0to17:
=1;
signalj:
integerrange0to139:
signalshijian,jiange:
integerrange0to20480;
begin
process(clk)
if(clk'
eventandclk='
1'
)then
ifup="
1111111111111111111"
then
up<
="
0000000000000000000"
;
j<
=j+1;
elseup<
=up+1;
ifj=70thenj<
endif;
------
casejis
when0=>
yin<
=3;
when1=>
when2=>
when3=>
--
when4=>
=5;
when5=>
when6=>
when7=>
=6;
when8=>
=8;
when9=>
when10=>
when11=>
=9;
when12=>
when13=>
when14=>
when15=>
when16=>
=12;
when17=>
when18=>
when19=>
=15;
when20=>
=13;
when21=>
when22=>
=10;
when23=>
when24=>
when25=>
when26=>
when27=>
when28=>
when29=>
when30=>
=0;
when31=>
when32=>
when33=>
when34=>
when35=>
when36=>
=7;
when37=>
when38=>
when39=>
when40=>
when41=>
when42=>
when43=>
when44=>
when45=>
when46=>
when47=>
when48=>
when49=>
when50=>
when51=>
when52=>
when53=>
when54=>
when55=>
when56=>
when57=>
when58=>
when59=>
when60=>
when61=>
when62=>
when63=>
----
when64=>
when65=>
when66=>
when67=>
when68=>
whenothers=>
endcase;
caseyinis
when1=>
jiange<
=7816;
--c
when2=>
=6965;
--d
when3=>
=6206;
--e
when4=>
=5868;
--f
when5=>
=5224;
--g
when6=>
=4654;
--a
when7=>
=4145;
--b
when8=>
=3915;
when9=>
=3543;
when10=>
=3107;
when11=>
=2934;
when12=>
=2612;
when13=>
=2327;
when14=>
=2072;
when15=>
=1957;
whenothers=>
speaker<
='
0'
ifshijian<
=jiangethenshijian<
=shijian+1;
=jiange/2thenspeaker<
elsespeaker<
elseshijian<
endprocess;
endbhv;
2数码管模块
简单计时装置,修改自数字钟,产生播放器的感觉,程序如下:
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:
signalresult1,result2,co1,co2:
std_logic_vector(3downto0);
signaldd:
signalsum:
clk0<
=ff(20);
p1:
if(clk'
ff<
=ff+1;
process(clk0)
if(clk0'
eventandclk0='
ifaa="
111011"
then
aa<
000000"
bb<
=bb+1;
else
=bb;
=aa+1;
ifbb="
ifaa<
10then
temp1<
=aa;
result1<
=temp1(3downto0);
co1<
0000"
endif;
if(aa>
9andaa<
20)then
=aa+6;
0001"
if(aa>
19andaa<
30)then
=aa+12;
0010"
29andaa<
40)then
=aa+18;
0011"
39andaa<
50)then
=aa+24;
0100"
49andaa<
60)then
=aa+30;
0101"
ifbb<
temp2<
result2<
=temp2(3downto0);
co2<
if(bb>
9andbb<
=bb+6;
if(bb>
19andbb<
=bb+12;
29andbb<
=bb+18;
39andbb<
=bb+24;
49andbb<
=bb+30;
if(clk'
dd<
=dd+1;
withddselect
sel<
10000000"
when"
000"
"
01000000"
001"
00100000"
010"
00010000"
011"
00001000"
100"
00000100"
101"
00000010"
110"
00000001"
111"
sum<
=co2when"
result2when"
1010"
when"
co1when"
result1when"
whenothers;
withsumselect
seg<
1000000"
1111001"
0100100"
0110000"
0011001"
0010010"
0000010"
0110"
1011000"
0111"
0000000"
1000"
0010000"
1001"
0111111"
1111111"
whenothers;
3点阵模块
点阵模块,主要就是点阵循环跳动显示心形(有大有小,动画的思想),还有蝴蝶形,还有“爱成蝶”三个字。
(由于程序较长,且后面有附录,所以不在此显示。
)
4流水灯模块
流水灯模块,主要显示的就是12盏灯循环有规则亮灭,配合音乐,并不断变化,形成视觉上的效果。
四实验结果及分析
实验成品的效果是音乐在播放,同时数码管开始计时,点阵开始显示文字和图案,流水灯也开始按照各种形式来循环闪烁。
除了音乐是上网查的一些音谱和学习了一下大体模式,其它的都是本次实习过程中做成功的程序的修改。
在实验的过程中一共碰到了以下几个问题
1、音乐模块中播放音乐开始使用蜂鸣器,但是总是发出类似蝉鸣的叫声,无论怎么改都不好用;
后来使用扬声器,开始时有杂音,十分不清晰,后来经过分析,造成这个问题的原因可能有两个:
第一,分频不对,造成音调有高有低,播放的不成曲调。
第二,扬声器有失真效应,造成播放的有杂音。
发现原因后,又重新对分频进行了处理,然后换了一个新的扬声器,而后程序编译通过,终于可以正常播放音乐了。
2、在加入各种模块的过程中,出现了逻辑单元不够用的现象,怎么改都不好用,后来经过多方修改,发现使用的if语句使用太多的缘故,更改了一些语句,终于逻辑单元的数目降下来了,编译通过了。
3、点阵模块设计时,出现了只跳动前几个字的现象,而且每两个一停顿。
最后还有一个全亮的,经过修改程序,发现其中的一个计数器的位数不够,还有分频分的不对,是一个比0.5秒多一点的频率,修改成1秒,上述情况就解决了。
五实习总结
先总结一下自主设计,本次设计是我第一次用一门自己陌生的语言做的设计,做的不是很完善,只能说是一些基本模块的整合。
关于音乐系统,因为时间和知识缺乏的关系,设计得很是简陋,远远达不到当今社会的需求,应该多加几首音乐,并且用加入音乐选择的功能,这样,现实性更强了,同时点阵的设计本来想加一个跳动与滚动的转化的,但是时间仓促,总是有错误,所以最后只能放弃,以后好好研究一下。
再总结一下整个小学期的实习,在短短的四个星期的日子里,学到很多很多的的东西,不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
以焊电路板开始,以自主设计结束,每一次都感觉自己做的很难,一旦成功后,就会继续更难更复杂的东西。
课程设计也由浅入深,在之前的基础之上灵活使用,不仅需要缜密的逻辑思维以及清醒的头脑,更需要很强的动手能力,使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。
我会把这段经历当做一笔宝贵的财富,激励我不断前进。
六附录(程序或电路图)
ENTITYYINYYUEIS
port(clk:
outstd_logic;
i1:
outstd_logic_vector(15downto0);
i2:
sel:
outstd_logic_vector(6downto0);
dout:
outstd_logic_vector(11downto0));
endyinyyue;
architecturebhvofyinyyueis
signala,e:
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:
signalmm:
integerrange0to15;
signalclm:
signalnnn:
integerrange0to31;
signaly1:
std_logic_vector(31downto0);
signalx,y:
signalcnt:
std_logic_vector(7downto0);
--variablecount:
integerRANGE0TO7;
signalcount:
std_logic_vector(5DOWNTO0);
signalf:
std_logic_vector(22downto0);
signalclk1:
if(clk'
)then
if(b<
2048000)then
b<
=b+1;
000000000000000000000"
endprocess;
e<
whenb<
'
begin
ifclk'
c<
=c+1;
process(e)
ife'
eventande='
ifd<
7then
d<
=d+1;
else
d<
withcselect
i1<
1000000000000000"
when"
0100000000000000"
0010000000000000"
0001000000000000"
0000100000000000"
0000010000000000"
0000001000000000"
0000000100000000"
0000000010000000"
0000000001000000"
0000000000100000"
0000000000010000"
1011"
0000000000001000"
1100"
0000000000000100"
1101"
0000000000000010"
1110"
0000000000000001"
1111"
casecis