硬件电子琴及硬件乐曲演奏电路Word格式文档下载.docx
- 文档编号:5757938
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:13
- 大小:114.94KB
硬件电子琴及硬件乐曲演奏电路Word格式文档下载.docx
《硬件电子琴及硬件乐曲演奏电路Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《硬件电子琴及硬件乐曲演奏电路Word格式文档下载.docx(13页珍藏版)》请在冰点文库上搜索。
IFcnt1<
2THEN
cnt1<
=cnt1+1;
ELSE
=0;
ENDIF;
1THEN
clk1<
='
1'
;
ELSE
0'
ENDPROCESS;
IFfalling_edge(clk_in)THEN
IFcnt2<
cnt2<
=cnt2+1;
=0;
ENDIF;
IFcnt2<
1then
clk2<
;
ENDPROCESS;
clk_out<
=clk1ORclk2;
END;
(3).七个中音主程序
modulebeepx(clk,key,beep,led,ledbt);
//模块名称beep
inputclk;
//系统时钟12MHz
input[7:
0]key;
//按键输入
outputbeep;
//蜂鸣器输出端
output[7:
0]led;
0]ledbt;
//LED输出
regbeep_r;
//寄存器
reg[15:
0]count,count_end;
reg[7:
0]key_r;
0]led_bt;
always@(posedgeclk)
begin
count<
=count+1'
b1;
//计数器加1
if((count==count_end)&
(!
(count_end==16'
hffff)))
begin
count<
=16'
h0;
//计数器清零
beep_r<
=!
beep_r;
//取反输出信号
end
end
always@(key)
key_r=key;
//取键值
case(key_r)
8'
b11111110:
begincount_end=16'
h2CCA;
key_r=8'
b11111001;
led_bt=8'
b11111110;
end//中音1的分频系数值
b11111101:
h27E8;
b10100100;
end//中音2的分频系数值
b11111011:
h238D;
key_r=8'
b10110000;
end//中音3的分频系数值
b11110111:
h218E;
b10011001;
end//中音4的分频系数值
b11101111:
h1DE5;
b10010010;
end//中音5的分频系数值
b11011111:
h1AA2;
b10000010;
end//中音6的分频系数值
b10111111:
begincount_end=16'
h17BA;
b11111000;
end//中音7的分频系数值
b01111110:
h166B;
key_r=8'
end//高音1的分频系数值
b01111101:
h13F4;
end//高音2的分频系数值
b01111011:
h11C7;
end//高音3的分频系数值
b01110111:
h10C7;
end//高音4的分频系数值
b01101111:
h0EF3;
end//高音5的分频系数值
b01011111:
h0D51;
end//高音6的分频系数值
b00111111:
h0BDD;
end//高音7的分频系数值
default:
count_end=16'
hffff;
endcase
assignbeep=beep_r;
//输出音乐
assignled=key_r;
//输出按键状态
assignledbt=led_bt;
endmodule
2.硬件乐曲演奏电路。
(1)内存分配图
(2)主程序
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYbuzzerIS
PORT(
ch:
INstd_logic;
--键盘与歌曲播放选择
cho:
--歌曲切换
key_data:
INstd_logic_vector(2DOWNTO0);
--电子琴组合键盘输入
clk:
--系统时钟
out_bit:
OUTstd_logic);
--输出给蜂鸣器
ENDbuzzer;
ARCHITECTUREarchOFbuzzerIS
COMPONENTliangzhu
PORT(address:
instd_logic_vector(7downto0);
clock:
instd_logic;
q:
outstd_logic_vector(15downto0));
ENDCOMPONENT;
signalsta1:
std_logic_vector(7downto0);
signalsta:
integerrange0to147;
signalcount:
std_logic_vector(15DOWNTO0);
signalcount_end:
signalcount1:
std_logic_vector(23DOWNTO0);
signalout_bit_temp:
std_logic;
signalkey_temp:
std_logic_vector(2DOWNTO0);
signalcount_end_temp:
signalchoice:
--音调分频数
CONSTANTsuo0:
std_logic_vector(15DOWNTO0):
="
1110111100101000"
--61224
CONSTANTla0:
1101010100010001"
--54545
CONSTANTxi0:
1011110111010001"
--48593
CONSTANTduo:
1011001100100111"
--45863
CONSTANTlai:
="
1001111110100000"
--40864
CONSTANTme:
1000111000110010"
--36402
CONSTANTfa:
1000011000110111"
--34359
CONSTANTsuo:
0111011110010100"
--30612
CONSTANTla:
0110101010001001"
--27273
"
010*********
CONSTANTsuo1:
0011101111001010"
--15306
CONSTANTla1:
0011010101000100"
--13636
CONSTANTxi1:
0010111101110111"
--12151
CONSTANTduo2:
0010101001100011"
--10851
CONSTANTt:
std_logic_vector(23DOWNTO0):
101101110001101100000000"
out_bit<
=out_bit_temp;
key_temp<
=key_data;
PROCESS(cho)--歌曲间切换
IF(cho'
EVENTANDcho='
)THEN
choice<
=NOTchoice;
PROCESS(clk)--分频后的音调输出控制
IF(clk'
EVENTANDclk='
=count+1;
IF(count=count_end)THEN
count<
=x"
0000"
out_bit_temp<
=NOTout_bit_temp;
ENDIF;
ENDIF;
U:
liangzhuPORTMAP(address=>
sta1,q=>
count_end_temp,clock=>
clk);
--与liangzhu.vhd的接口
PROCESS(clk,ch,choice,cho)--音调单位时长和曲谱依次播放(sta自加)控制
IF(ch='
)THEN--键盘与歌曲播放切换
IF(clk'
IF(count1<
t)THEN
count1<
=count1+1;
ELSE
000000"
IF(choice='
sta<
=0;
IF(sta1=10001010)THEN
sta1<
00000000"
ELSE
=sta1+1;
count_end<
=count_end_temp;
--《梁祝》曲谱信息赋给count_end
ENDIF;
sta1<
IF(sta=147)THEN
sta<
=sta+1;
CASEstaIS--《友谊天长地久》曲谱信息
WHEN0|1=>
count_end<
=suo0;
WHEN2TO8=>
=duo;
WHEN9|10=>
=me;
WHEN11TO14=>
=lai;
WHEN15=>
WHEN16|17=>
WHEN18|19=>
WHEN20TO24=>
WHEN25|26=>
WHEN27|28=>
=suo;
WHEN29TO33=>
=la;
WHEN34TO38=>
WHEN39TO42=>
WHEN43TO45=>
WHEN46|47=>
WHEN48TO51=>
WHEN52=>
WHEN53|54=>
WHEN55|56=>
WHEN57TO60=>
WHEN61TO63=>
=la0;
WHEN64TO65=>
WHEN66TO69=>
WHEN70TO73=>
WHEN74|75=>
WHEN76TO79=>
WHEN80TO82=>
WHEN83|84=>
WHEN85TO88=>
WHEN89=>
WHEN90|91=>
WHEN92|93=>
WHEN94TO97=>
WHEN98TO100=>
WHEN101|102=>
WHEN103TO106=>
WHEN107TO110=>
WHEN111|112=>
=duo1;
WHEN113TO116=>
WHEN117TO119=>
WHEN120|121=>
WHEN122TO125=>
WHEN126=>
WHEN127|128=>
WHEN129|130=>
WHEN131TO134=>
WHEN135TO137=>
WHEN138|139=>
WHEN140TO143=>
WHEN144TO147=>
WHENOTHERS=>
=(others=>
'
);
ENDCASE;
ENDIF;
CASEkey_tempIS--组合琴键设置
WHEN"
011"
=>
101"
110"
001"
=fa;
100"
010"
000"
=xi;
WHENOTHERS=>
=(others=>
ENDCASE;
ENDPROCESS;
ENDarch;
五、实验现象:
按键1到7表示七个音符,当按下一个按键时发出对应的音符声音,并且在第一位数码管上显示对应的数字。
让程序运行后使蜂鸣器播放一段音乐,并且通过按键可对其进行暂停、播放、切换等操作。
六、实验感想:
通过这次试验让我更加认识到EDA在多方面的应用,以及了解一些相关的编程,提高了我对实验箱的操作能力。
为即将进行的毕业设计做了良好的基础。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 硬件 电子琴 乐曲 演奏 电路