1、 IF cnt1 2 THEN cnt1 = cnt1 + 1; ELSE = 0; END IF; 1 THEN clk1 = 1; ELSE0 END PROCESS; IF falling_edge(clk_in) THEN IF cnt2 cnt2 = cnt2 + 1 ;= 0 ; END IF ; IF cnt2 1 then clk2 ; END PROCESS ; clk_out = clk1 OR clk2 ; END ;(3).七个中音主程序module beepx(clk,key,beep,led,ledbt); /模块名称beep input clk; /系统时钟12M
2、Hz input7:0key; /按键输入output beep; /蜂鸣器输出端 output7:0led;0ledbt; /LED输出reg beep_r; /寄存器reg15:0count,count_end;reg7:0key_r;0led_bt;always(posedge clk)begin count = count + 1b1; /计数器加1 if(count = count_end)&(!(count_end = 16hffff) begin count = 16h0; /计数器清零 beep_r = !beep_r; /取反输出信号 endendalways (key) k
3、ey_r = key; /取键值 case(key_r) 8b11111110:begin count_end =16h2CCA ; key_r = 8b11111001; led_bt = 8b11111110 ; end /中音1的分频系数值b11111101:h27E8;b10100100;end /中音2的分频系数值b11111011:h238D; key_r = 8b10110000;end /中音3的分频系数值b11110111:h218E;b10011001;end /中音4的分频系数值b11101111:h1DE5;b10010010;end /中音5的分频系数值b110111
4、11:h1AA2;b10000010;end /中音6的分频系数值b10111111: begin count_end =16h17BA;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:h0
5、BDD; end /高音7的分频系数值 default:count_end = 16hffff; endcaseassign beep =beep_r; /输出音乐assign led =key_r; /输出按键状态assign ledbt = led_bt ;endmodule2. 硬件乐曲演奏电路。(1)内存分配图(2)主程序library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY buzzer IS PORT ( ch : IN
6、std_logic;-键盘与歌曲播放选择 cho :-歌曲切换 key_data : IN std_logic_vector(2 DOWNTO 0);-电子琴组合键盘输入 clk :-系统时钟 out_bit : OUT std_logic);-输出给蜂鸣器END buzzer;ARCHITECTURE arch OF buzzer ISCOMPONENT liangzhu PORT(address:in std_logic_vector(7 downto 0); clock:in std_logic; q:out std_logic_vector(15 downto 0); END COMP
7、ONENT;signal sta1: std_logic_vector(7 downto 0); signal sta: integer range 0 to 147; signal count: std_logic_vector(15 DOWNTO 0); signal count_end: signal count1: std_logic_vector(23 DOWNTO 0); signal out_bit_temp : std_logic; signal key_temp : std_logic_vector(2 DOWNTO 0); signal count_end_temp : s
8、ignal choice :-音调分频数 CONSTANT suo0 : std_logic_vector(15 DOWNTO 0) :=1110111100101000-61224 CONSTANT la0 :1101010100010001-54545 CONSTANT xi0 :1011110111010001-48593 CONSTANT duo :1011001100100111-45863 CONSTANT lai := 1001111110100000-40864 CONSTANT me :1000111000110010-36402 CONSTANT fa :100001100
9、0110111-34359 CONSTANT suo :0111011110010100-30612 CONSTANT la :0110101010001001-27273010* CONSTANT suo1 :0011101111001010-15306 CONSTANT la1 :0011010101000100-13636 CONSTANT xi1 :0010111101110111-12151 CONSTANT duo2 :0010101001100011-10851 CONSTANT t : std_logic_vector(23 DOWNTO 0) :101101110001101
10、100000000 out_bit=out_bit_temp; key_temp=key_data; PROCESS(cho)-歌曲间切换 IF(choEVENT AND cho=)THEN choice=NOT choice; PROCESS(clk)-分频后的音调输出控制 IF(clkEVENT AND clk=count+1; IF (count = count_end) THEN count =x0000 out_bit_tempsta1,q=count_end_temp,clock=clk);-与liangzhu.vhd的接口 PROCESS(clk,ch,choice,cho)-音
11、调单位时长和曲谱依次播放(sta自加)控制 IF(ch=)THEN-键盘与歌曲播放切换 IF(clk IF(count1t) THEN count1=count1+1; ELSE000000 IF(choice= sta=0; IF(sta1=10001010)THEN sta100000000 ELSE=sta1+1; count_end=count_end_temp;-梁祝曲谱信息赋给count_end END IF; sta1 IF(sta=147)THEN stacount_end=duo; WHEN 9|10=me; WHEN 11 TO 14=lai; WHEN 15= WHEN
12、16|17= WHEN 18|19= WHEN 20 TO 24= WHEN 25|26= WHEN 27|28=suo; WHEN 29 TO 33=la; WHEN 34 TO 38= WHEN 39 TO 42= WHEN 43 TO 45= WHEN 46|47= WHEN 48 TO 51= WHEN 52= WHEN 53|54= WHEN 55|56= WHEN 57 TO 60= WHEN 61 TO 63=la0; WHEN 64 TO 65= WHEN 66 TO 69= WHEN 70 TO 73= WHEN 74|75= WHEN 76 TO 79= WHEN 80 T
13、O 82= WHEN 83|84= WHEN 85 TO 88= WHEN 89= WHEN 90|91= WHEN 92|93= WHEN 94 TO 97= WHEN 98 TO 100= WHEN 101|102= WHEN 103 TO 106= WHEN 107 TO 110= WHEN 111|112=duo1; WHEN 113 TO 116= WHEN 117 TO 119= WHEN 120|121= WHEN 122 TO 125= WHEN 126= WHEN 127|128= WHEN 129|130= WHEN 131 TO 134= WHEN 135 TO 137=
14、 WHEN 138|139= WHEN 140 TO 143= WHEN 144 TO 147= WHEN OTHERS =(others=); END CASE; END IF; CASE key_temp IS-组合琴键设置 WHEN 011 =101110001=fa;100010000=xi; WHEN OTHERS = (others= END CASE; END PROCESS; END arch;五、实验现象:按键1到7表示七个音符,当按下一个按键时发出对应的音符声音,并且在第一位数码管上显示对应的数字。让程序运行后使蜂鸣器播放一段音乐,并且通过按键可对其进行暂停、播放、切换等操作。六、实验感想:通过这次试验让我更加认识到EDA在多方面的应用,以及了解一些相关的编程,提高了我对实验箱的操作能力。为即将进行的毕业设计做了良好的基础。
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2