当前位置:文档之家› 音乐发生器

音乐发生器

音乐发生器
音乐发生器

《电子设计自动化技术A》

乐曲发生电路的设计

学院:微电子与固体电子学院

专业:集成电路与集成系统设计

姓名:崔云凯2012032030018

唐雄 2012032030024

一、设计要求

二、设计原理

三、使用器件

四、功能模块

五、顶层设计

六、FPGA仿真

七、总结

一、用FPGA实现8位计数器功能

在电子技术实验中,我们刚刚做了两位数码管显示计数器的实验,所以思路已经很清楚了。大的发方面主要是数码管扫描显示和计数器两个功能的实现,从细的方面讲有:时钟分频模块、计数模块和数码管扫描与显示模块。

8位计数器扫描电路原理:数码管显示由7段译码实现;扫描由位选同步显示实现。

1、时钟分频模块

计数时钟频率4HZ,扫描频率为50Hz,代码如下:

library IEEE;

use IEEE.STD_LOGIC_1164.all;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

entity div is

port(clk2,clr:in std_logic;

div400Hz: out std_logic;

div400Hz_16:out std_logic);

end div;

--}} End of automatically maintained section

architecture sing of div is

signal cnt24:std_logic_vector(23 downto 0);

begin

process(clk2,clr)

begin

if(clr='1')then

cnt24<="000000000000000000000000";

elsif(clk2'event and clk2='1')then

if( cnt24="100000010011001100000000")then --4Hz

cnt24<= "000000000000000000000000" ;

else

cnt24<=cnt24+1;

end if;

end if;

end process;

div400Hz<=cnt24(23); --4Hz

div400Hz_16<=cnt24(15); --400Hz

end sing;

3、计数模块

该模块很简单,用四位二进制实现0~9的计数功能和进位功能,代码如下:

library IEEE;

use IEEE.STD_LOGIC_1164.all;

use IEEE.STD_LOGIC_UNSIGNED.all;

entity count10en is

port(

clr : in STD_LOGIC;

clk : in STD_LOGIC;

en : in STD_LOGIC;

q:out STD_LOGIC_VECTOR(3 DOWNTO 0);

co : out STD_LOGIC );

end count10en;

--}} End of automatically maintained section

architecture try of count10en is

signal count_4:std_logic_vector(3 downto 0);

begin

q<=count_4;

co<=count_4(0) and count_4(3); --满9进位

process(clk,clr)

begin

if(clr='1')then

count_4<="0000";

elsif(clk'event and clk='1')then

if(en='1')then

if(count_4="1001")then

count_4<="0000";

else count_4<=count_4+1;

end if;

end if;

end if;

end process;

-- enter your statements here --

end try;

3、数码管扫描与显示模块

其功能是将计数器的四位输入转换为数码管0~9的显示,将数码管的数字用高频(50Hz)扫描的方式呈现。

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY scan IS

PORT(CLK,clr : IN STD_LOGIC;

led_in_0,led_in_1,led_in_2,led_in_3,led_in_4,led_in_5,led_in_6,led_in_7: in

STD_LOGIC_VECTOR(3 DOWNTO 0);

led_seg : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);

led_bit : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)

);

END scan;

ARCHITECTURE rtl OF scan IS

SIGNAL cnt3 : STD_LOGIC_VECTOR(2 DOWNTO 0);

signal led_in :std_logic_vector(3 downto 0);

begin

p1:PROCESS(CLK)

BEGIN

if clr = '1'then

cnt3 <= "000";

elsif CLK'EVENT AND CLK='1' THEN

cnt3<=cnt3+1;

END IF;

END PROCESS p1;

p2:PROCESS(cnt3) --位选信号

BEGIN

CASE cnt3 IS

WHEN "000" => led_bit <="00000001" ;led_in <= led_in_0;

WHEN "001" => led_bit <="00000010" ;led_in <= led_in_1;

WHEN "010" => led_bit <="00000100" ;led_in <= led_in_2;

WHEN "011" => led_bit <="00001000" ;led_in <= led_in_3;

WHEN "100" => led_bit <="00010000" ;led_in <= led_in_4;

WHEN "101" => led_bit <="00100000" ;led_in <= led_in_5;

WHEN "110" => led_bit <="01000000" ;led_in <= led_in_6;

WHEN "111" => led_bit <="10000000" ;led_in <= led_in_7;

WHEN OTHERS => NULL;

END CASE;

END PROCESS p2;

p3:PROCESS(led_in) --输出0-9

BEGIN

CASE led_in IS

WHEN "0000" => led_seg <="1000000"; --0

WHEN "0001" => led_seg <="1111001";

WHEN "0010" => led_seg <="0100100";

WHEN "0011" => led_seg <="0110000";

WHEN "0100" => led_seg <="0011001";

WHEN "0101" => led_seg <="0010010";

WHEN "0110" => led_seg <="0000010";

WHEN "0111" => led_seg <="1111000";

WHEN "1000" => led_seg <="0000000";

WHEN "1001" => led_seg <="0010000"; --9

WHEN OTHERS => NULL;

END CASE ;

END PROCESS p3;

END rtl;

BDE顶层模块如下:

最后,通过ISE套件进行综合和下载,成功利用FPGA开发板实现了计数功能。Uvf文件:# PlanAhead Generated physical constraints

NET "clk" LOC = P79;

NET "clr" LOC = P111;

NET "en" LOC = P113;

NET "led_seg[0]" LOC = P146;

NET "led_seg[1]" LOC = P144;

NET "led_seg[2]" LOC = P143;

NET "led_seg[3]" LOC = P141;

NET "led_seg[4]" LOC = P140;

NET "led_seg[5]" LOC = P139;

NET "led_seg[6]" LOC = P138;

NET "led_bit[0]" LOC = P135;

NET "led_bit[1]" LOC = P133;

NET "led_bit[2]" LOC = P132;

NET "led_bit[3]" LOC = P131;

NET "led_bit[4]" LOC = P130;

NET "led_bit[5]" LOC = P128;

NET "led_bit[6]" LOC = P126;

NET "led_bit[7]" LOC = P125;

二、用FPGA 实现音乐发声器

一、设计要求

运用VHDL 设计一个乐曲演奏电路,然后通过FPGA 仿真,能够通过蜂鸣器自动播放编写好的音乐。

二、设计原理

硬件电路的发声原理,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制FPGA 芯片某个引脚输出一定频率的矩形波,接上扬声器就能发出相应频率的声音。乐曲中的每一音符对应着一个确定的频率,要想FPGA 发出不同音符的音调,实际上只要控制它输出相应音符的频率即可。乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频,就可以在扬声器上连续地发出各个音符的音调。

若要发出准确的音符,乐曲演奏电路应具备的两个基本要素:

音调(每个音符的频率) 音长(每个音符持续的时间) (1)、音调

表1 简谱中的音名与频率的关系 音名 频率/Hz 音名 频率/Hz 音名 频率/Hz 低音1 261.63 中音1 532.25 高音1 1046.50 低音2 293.67 中音2 587.33 高音2 1174.66 低音3 329.63 中音3 659.25 高音3 1318.51 低音4 349.23 中音4 698.46 高音4 1396.92 低音5 391.99 中音5 783.99 高音5 1567.98 低音6 440 中音6 880 高音6 1760 低音7 493.88 中音7 987.76 高音7 1975.52

休止符用0表示,

实验给定频率为33.8688MHZ ,由于各个音符的频率多为非整数,而分频

数又不能为小数,故必须将计算机得到的分频系数四舍五入取整。若基准频率过 低,则分频系数过小,四舍五入取整后的误差较大。若基准频率过高,虽然可以 减少频率的相对误差,但分频结构将变大,故本设计中选取1MHz 为基准频率较为合适,考虑到输出加上“驱动2分频”,所以最终选定基准频率为2MHz 。 可预置数数控分频器 分频后得到的频率f 分频系数:N=1MHz/f

例如:对于低音1,f=261.63Hz

则4095112^238223822.19=3Hz 1MHz/261.6=N =-≈< 对于休止符+∞=f Hz

则4095112^20=Hz 1MHzHz/=N =-∞+< 数控分频器预置数

由于最大的分频系数N=3822,故数控分频器采用12位二进制计数器已满足要求预置数=N

N-

4095

-

1-

12

^

2

例如:分频系数N=3822时

预置数=4095-N=273

273+1+1……+1=4095(共加了3822个“1”)

音名分频

系数初始

音名分频

系数

初始

音名分频

系数

初始

低音1 3822 273 中音1 1911 2184 高音1 956 3139

低音2 3405 690 中音2 1703 2392 高音2 851 3244

低音3 3034 1061 中音3 1517 2578 高音3 758 3337

低音4 2863 1232 中音4 1432 2663 高音4 716 3379

低音5 2551 1544 中音5 1276 2819 高音5 638 3457

低音6 2273 1822 中音6 1136 2959 高音6 568 3527

低音7 2025 2070 中音7 1012 3083 高音7 506 3589

驱动2分频

对基准频率分频后获得的输出信号,是一些脉宽极窄的尖脉冲信号。

为提高输出信号的驱动能力,以使扬声器有足够的功率发音,需要另加一个T 触发器将分频器的输出脉冲均衡为对称方波,这时的频率为原理的1/2。同时有效的抑制偶次谐波分量。

(2)音长

——取决于乐曲的速度和音符的节拍

一般乐曲最小的节拍为1/4拍,若将1拍的时间定为1秒,则只需要输出4Hz 的1/4拍的时长(0.25秒),对于其它占用时间较长的节拍(必为1/4拍的整数倍)则只需要将该音符连续输出相应的次数即可。

乐曲发生器即乐谱查表和音乐节拍控制电路,他决定了当前哪一个音符及该音符的持续时间。他的核心为二进制加法计数器。

三、使用器件

计算机

带蜂鸣器的33.8688MHz电路板

四、功能模块

1、分频器

将芯片上提供的50MHz的时钟分频为2MHz和4Hz的时钟

Library IEEE;

use IEEE.STD_LOGIC_1164.all;

use ieee.std_logic_unsigned.all;

entity divv is

port(

clr:in std_logic;

clk : in STD_LOGIC;

div16 : out STD_LOGIC;

div4 : out STD_LOGIC

);

end divv;

--}} End of automatically maintained section

architecture rtl of divv is

signal count:std_logic_vector(3 downto 0);

signal temp:std_logic;

signal count1:std_logic_vector(23 downto 0);

signal temp1:std_logic;

begin

process(clk)

begin

if clr='1' then

temp<='1';

count<="0000";

elsif(clk'event and clk='1')then

if(count="0111")then

count<="0000";

temp<=not temp;

else

count<=count+1;

end if;

end if;

end process;

process(clk)

begin

if clr='1'then

count1<="000000000000000000000000";

temp1<='0';

elsif(clk'event and clk='1')then

if(count1="010000001001100101111111")then

count1<="000000000000000000000000";

temp1<=not temp1;

else

count1<=count1+1;

end if;

end if;

end process ;

div16<=temp;

div4<=temp1;

end rtl;

2、节拍

library IEEE;

use IEEE.STD_LOGIC_1164.all;

use ieee.std_logic_unsigned.all;

entity jiepai is

port(

clk : in STD_LOGIC;

toneindex:out integer range 0 to 21

);

end jiepai;

--}} End of automatically maintained section

architecture rtl of jiepai is

signal count: integer range 0 to 99 ; begin

process(clk,count)

begin

if count=100then

count<=0;

elsif clk'event and clk='1' then

count<=count+1;

end if;

end process;

process (count)

begin

case count is

when 1to 3=>toneindex<=1;

when 4 to 7=>toneindex<=5;

when 8to 11=>toneindex<=6;

when 12to 15=>toneindex<=5;

when 16to 19=>toneindex<=4;

when 20to 23=>toneindex<=3;

when 24to 27=>toneindex<=2;

when 28to 31=>toneindex<=1;

when 32to 35=>toneindex<=5;

when 36to 39=>toneindex<=5;

when 40to 43=>toneindex<=3;

when 44to 51=>toneindex<=2;

when 52to 55=>toneindex<=5;

when 56to 59=>toneindex<=4;

when 60to 63=>toneindex<=3;

when 64to 67=>toneindex<=2;

when 68to 71=>toneindex<=1;

when 72to 75=>toneindex<=5;

when 76to 79=>toneindex<=6;

when 80to 83=>toneindex<=5;

when 84to 87=>toneindex<=4;

when 88 to 91=>toneindex<=3;

when 92 to 95=>toneindex<=2;

when 96 to 99=>toneindex<=1;

when others=>NULL;

end case;

end process;end rtl;

3、编码器

library IEEE;

use IEEE.STD_LOGIC_1164.all;

entity bianmaa is

port(

index:in integer range 0to 21;

tone : out STD_LOGIC_VECTOR(11 downto 0) );

end bianmaa;

architecture rtl of bianmaa is

begin

process(index)

begin

case index is

when 0=>tone<="111111111111";

when 1=>tone<="000100010001";

when 2=>tone<="001010110010";

when 3=>tone<="010*********";

when 4=>tone<="010*********";

when 5=>tone<="011000001000";

when 6=>tone<="011100011110";

when 7=>tone<="100000010110";

when 8=>tone<="100010001000";

when 9=>tone<="100101011000";

when 10=>tone<="101000010010";

when 11=>tone<="101001100111";

when 12=>tone<="101100000011";

when 13=>tone<="101110001111";

when 14=>tone<="110000001011";

when 15=>tone<="110001000011";

when 16=>tone<="110010101100";

when 17=>tone<="110100001001";

when 18=>tone<="110100110011";

when 19=>tone<="110110000001";

when 20=>tone<="110111000111";

when 21=>tone<="111000000101";

when others=>NULL;

end case;

end process;end rtl;

4、数控分频器

library IEEE;

use IEEE.STD_LOGIC_1164.all;

use ieee.std_logic_unsigned.all;

entity shukk is

port(

clk : in STD_LOGIC;

clr : in STD_LOGIC;

tone : in STD_LOGIC_VECTOR(11 downto 0); spks : out STD_LOGIC

);

end shukk;

architecture shukkkk of shukk is

signal count1 :std_logic_vector(11downto 0); signal fullspks:std_logic;

begin

process (clk)

begin

if clr='1'then

count1<="000100010001";

fullspks<='0';

elsif clk'event and clk='1'then

if count1="111111111111" then

count1<= tone;

fullspks<='1';

else

count1<=count1+1;

fullspks<='0';

end if;

end if;

end process;

process(fullspks)

variable count2: std_logic;

begin

if clr='1'then

count2:='1';

elsif fullspks'event and fullspks='1' then

count2:=not count2;

if count2='1' then

spks<='1';

else

spks<='0';

end if; end if; end process;

end shukkkk;

五、顶层设计

最终仿真结果

六、FPGA仿真

实验课上已向老师展示

管脚分配为

p79——clk

P111——clr

P149——spks

七、实验总结

这种基于FPGA的音乐硬件演奏电路的设计与实现,不仅通过VHDL层次化和模块化设计方法,同时采用数控分频和定制LPM-ROM的设计思想,更好的优化了乐曲演奏数字电路的设计,在此基础上不必变化顶层文件架构可随意变更乐曲,有效缩短了产品开发周期、减少了设计芯片的数量、降低了功耗、提高了设计的灵活性、可靠性和可扩展性。

实验加深了我对eda的理解与提高了实际操作能力,在此感谢老师与助教的帮助指导。

三、自主设计

用FPGA实现简易的钢琴

在前两个实验(数码管计数和乐曲发生器)的基础上,我们想到了用矩阵键盘和乐曲发生器结合,实现一个简易的钢琴。

钢琴分为4个模块,分别为:去抖动模块、矩阵键盘扫描模块、音符选择模块、二分频模块。

1、去抖动模块

------------------------------------------------------------------------------------------

--为矩阵键盘去掉抖动,使发音更准确,不受其他信号干扰。

17~0,从div_cnt(16 downto 13)="0000"计数到"1111",加入时延后,如果接收信号值不变,则判断为按下按键。

process(clk,rst)

begin

if rst = '1'then

div_cnt <= "000000000000000000";

elsif (clk'event and clk = '1')then

div_cnt <= div_cnt+1;

end if;

end process;

------------------------------------------------------------------------------------------

process(div_cnt(16 downto 13)) --去抖动模块

begin

if(div_cnt(16 downto 13)="0000")then

key_code_c<= column;

end if;

if(div_cnt(16 downto 13)="1111")then

if(key_code_c=column)then

key_code_c<=column;

else key_code_c<="1111";

end if;

end if;

end process;

2、矩阵键盘扫描模块

--高频的输入扫描信号,从左端输出特定信号,然后右端检测输入信号,来判断是哪个按键被按下(注意:同时只能只有一个按键被按下)。即在2个case语句里进行判断即可。

------------------------------------------------------------------------------------------

process(clk,rst) --矩阵键盘扫描

begin

if rst='1'then key_code <= "0000";

elsif(clk'event and clk='1')then

case scan_key is

when "1110"=>

case key_code_c is

when "1110"=>

key_code<="0000";

when "1101"=>

key_code<="0001";

when "1011"=>

key_code<="0010";

when "0111"=>

key_code<="0011";

when others=>

NULL;

end case;

when "1101"=>

case key_code_c is

when "1110"=>

key_code<="0100";

when "1101"=>

key_code<="0101";

when "1011" =>

key_code <= "0110";

when "0111" =>

key_code <= "0111";

when others =>

NULL;

end case;

when "1011" =>

case key_code_c IS

when "1110" =>

key_code <= "1000";

when "1101" =>

key_code <= "1001";

when "1011" =>

key_code <= "1010";

when "0111" =>

key_code <= "1011";

when others =>

NULL;

end case;

when "0111" =>

case key_code_c IS

when "1110" =>

key_code <= "1100";

when "1101" =>

key_code <= "1101";

when "1011" =>

key_code <= "1110";

when "0111" =>

key_code <= "1111";

when others =>

NULL;

end case;

when others =>

key_code <= "1111";

end case;

end if;

end process;

3、音符选择模块

--这里只有16个按键,所以不能发出所有音阶的音符,根据按下的按键,判断是要发出哪个音符。在基础频率是1M的条件下,分别计算分频系数,实现分频。

其中

f为音阶对应的频率。

m

表1 简谱中的音名与频率的关系

音名频率/Hz 音名频率/Hz 音名频率/Hz 低音1 261.63 中音1 532.25 高音1 1046.50 低音2 293.67 中音2 587.33 高音2 1174.66 低音3 329.63 中音3 659.25 高音3 1318.51 低音4 349.23 中音4 698.46 高音4 1396.92 低音5 391.99 中音5 783.99 高音5 1567.98 低音6 440 中音6 880 高音6 1760

低音7 493.88 中音7 987.76 高音7 1975.52 表2 各音阶频率对应的分频值

音名分频初始音名分频初始音名分频初始

系数值系数值系数值低音1 7644 547 中音1 3822 4369 高音1 1911 6280

低音2 6810 1381 中音2 3405 4786 高音2 1270 6921

低音3 6067 2124 中音3 3034 5157 高音3 1517 6674

低音4 5727 2464 中音4 2864 5327 高音4 1432 6759

低音5 5102 3089 中音5 2551 5640 高音5 1256 6935

低音6 4545 3646 中音6 2273 5918 高音6 1137 7054

低音7 4050 4141 中音7 2025 6166 高音7 1013 7178

--------------------------------------------------------------------------------------------

process(key_code) --音符选择模块

begin

case key_code is

when"0000"=>tone<="000000000000";dataout_tmp<="0000";--high0<="000";--0/4095 when"0001"=>tone<="011100011111";dataout_tmp<="0001";--high0<="001";--L1/1823 when"0010"=>tone<="100000001111";dataout_tmp<="0010";--high0<="001";--L2/2063 when"0011"=>tone<="100011110010";dataout_tmp<="0011";--high0<="001";--L3/2291 when"0100"=>tone<="100101010101";dataout_tmp<="0100";--high0<="001";--L4/2390 when"0101"=>tone<="101000010000";dataout_tmp<="0101";--high0<="001";--L5/2576 when"0110"=>tone<="101010111000";dataout_tmp<="0110";--high0<="001";--L6/2745 when"0111"=>tone<="101101001011";dataout_tmp<="0111";--high0<="001";--L7/2891 when"1000"=>tone<="101110001111";dataout_tmp<="0001";--high0<="010";--M1/2960 when"1001"=>tone<="110000001001";dataout_tmp<="0010";--high0<="010";--M2/308 when"1010"=>tone<="110001111001";dataout_tmp<="0011";--high0<="010";--M3/3193 when"1011"=>tone<="110010101100";dataout_tmp<="0100";--high0<="010";--M4/324 when"1100"=>tone<="110100001001";dataout_tmp<="0101";--high0<="010";--M5/3337 when"1101"=>tone<="110101011100";dataout_tmp<="0110";--high0<="010";--M6/342 when"1110"=>tone<="110110100101";dataout_tmp<="0111";--high0<="010";--M7/3494 when"1111"=>tone<="110111000111";dataout_tmp<="0001";--high0<="100";--H1/3528 when others=>null;

end case;

end process;

4、二分频模块

由于只有信号频率正确,而功率跟不上那发出的声音就极小,人耳无法听出来,所以需要加上二分频,提高输出功率。

--------------------------------------------------------------------------------------------

process(PreCLK,tone) -- 11位可预置计数

V ARIABLE Count11 : STD_LOGIC_VECTOR (11 DOWNTO 0);

begin

if PreCLK'event and PreCLK = '1' then

if Count11="11111100001"then

Count11:= tone;FullSpkS<='1';

else Count11:=Count11+1;FullSpkS<='0';

end if;

end if;

end process;

--------------------------------------------------------------------------------------------

process(FullSpkS) --将输出再2分频,展宽脉冲,使扬声器有足够功率发

V ARIABLE Count2 : STD_LOGIC;

BEGIN

IF FullSpkS'EVENT AND FullSpkS = '1' THEN Count2 := NOT Count2;

IF Count2 = '1' THEN SpkS <= '1';

ELSE SpkS <= '0'; END IF;

END IF;

END PROCESS;

完整的VHDL程序代码如下:

-------------------------------------------------------------------------------

--

-- Title : keys_4x4

-- Design : counter2

-- Author : 122

-- Company : 111

--

-------------------------------------------------------------------------------

--

-- File : keys_4x4.vhd

-- Generated : Sun Nov 16 20:55:48 2014

-- From : interface description file

-- By : Itf2Vhdl ver. 1.22

--

-------------------------------------------------------------------------------

--

-- Description :

--

-------------------------------------------------------------------------------

--{{ Section below this comment is automatically maintained

-- and may be overwritten

--{entity {keys_4x4} architecture {rtl}}

library IEEE;

use IEEE.STD_LOGIC_1164.all;

use IEEE.STD_LOGIC_UNSIGNED.all;

entity keys_4x4 is

port(

clk : in STD_LOGIC;

rst : in STD_LOGIC;

column : in STD_LOGIC_VECTOR(3 downto 0);

--led_in : out STD_LOGIC;

SpkS : out STD_LOGIC;

row : out STD_LOGIC_VECTOR(3 downto 0)

);

end keys_4x4;

--}} End of automatically maintained section

architecture rtl of keys_4x4 is

signal count:std_logic_vector(3 downto 0);--101001010110000000,338688/2,产生100Hz的信号,刷新频率50Hz

signal clk_temp : STD_LOGIC;

SIGNAL div_cnt : std_logic_vector(17 downto 0);--101001010110000000 SIGNAL scan_key : std_logic_vector(3 DOWNTO 0); --扫描码寄存器,FPGA输出

SIGNAL key_code : std_logic_vector(3 DOWNTO 0); --column,FPGA输入

SIGNAL key_code_c : std_logic_vector(3 DOWNTO 0); --column,FPGA输入

SIGNAL dataout_tmp : std_logic_vector(3 DOWNTO 0); --输出到led数码管--SIGNAL high0 : std_logic_vector(2 DOWNTO 0); --位选择端口signal tone : std_logic_vector(11 downto 0); --音符频率信号SIGNAL PreCLK,FullSpkS : STD_LOGIC;

begin

row <= scan_key;

--led_in <= dataout_tmp;

----------------------------------------------------------------------------------------

process(clk,rst)

begin

if rst = '1'then

div_cnt <= "000000000000000000";

elsif (clk'event and clk = '1')then

div_cnt <= div_cnt+1;

end if;

end process;

---------------------------------------------------------------------------------------- process(clk,rst)

begin

if(rst='1')then

count<="0000"; --33868800/32,产生约1Mz的信号

clk_temp <= '0';

elsif (clk'event and clk='1')then

if count="1101"then

count<="0000";

clk_temp <= not clk_temp;

else

count<=count+1;

end if;

end if;

PreCLK<=clk_temp;

end process;

---------------------------------------------------------------------------------------- process(div_cnt(17 downto 16))

begin

case div_cnt(17 downto 16) is

when "00"=>scan_key<="1110";

when "01"=>scan_key<="1101";

when "10"=>scan_key<="1011";

when "11"=>scan_key<="0111";

when others=>NULL;

end case;

end process;

------------------------------------------------------------------------------------------ process(div_cnt(16 downto 13)) --去抖动

begin

if(div_cnt(16 downto 13)="0000")then

key_code_c<= column;

end if;

if(div_cnt(16 downto 13)="1111")then

if(key_code_c=column)then

key_code_c<=column;

else key_code_c<="1111";

end if;

end if;

end process;

------------------------------------------------------------------------------------------ process(clk,rst) --矩阵键盘扫描

begin

if rst='1'then key_code <= "0000";

elsif(clk'event and clk='1')then

case scan_key is

when "1110"=>

case key_code_c is

when "1110"=>

key_code<="0000";

when "1101"=>

key_code<="0001";

when "1011"=>

key_code<="0010";

when "0111"=>

key_code<="0011";

when others=>

NULL;

end case;

when "1101"=>

case key_code_c is

when "1110"=>

key_code<="0100";

when "1101"=>

key_code<="0101";

when "1011" =>

key_code <= "0110";

when "0111" =>

key_code <= "0111";

when others =>

NULL;

end case;

when "1011" =>

case key_code_c IS

when "1110" =>

key_code <= "1000";

when "1101" =>

key_code <= "1001";

when "1011" =>

key_code <= "1010";

when "0111" =>

key_code <= "1011";

when others =>

NULL;

end case;

when "0111" =>

case key_code_c IS

when "1110" =>

key_code <= "1100";

when "1101" =>

key_code <= "1101";

when "1011" =>

key_code <= "1110";

when "0111" =>

key_code <= "1111";

when others =>

NULL;

end case;

when others =>

key_code <= "1111";

end case;

end if;

end process;

--------------------------------------------------------------------------------------------

process(key_code) --音符选择模块

begin

case key_code is

when"0000"=>tone<="000000000000";dataout_tmp<="0000";--high0<="000";--0/4095

when"0001"=>tone<="011100011111";dataout_tmp<="0001";--high0<="001";--L1/1823 when"0010"=>tone<="100000001111";dataout_tmp<="0010";--high0<="001";--L2/2063 when"0011"=>tone<="100011110010";dataout_tmp<="0011";--high0<="001";--L3/2291 when"0100"=>tone<="100101010101";dataout_tmp<="0100";--high0<="001";--L4/2390 when"0101"=>tone<="101000010000";dataout_tmp<="0101";--high0<="001";--L5/2576 when"0110"=>tone<="101010111000";dataout_tmp<="0110";--high0<="001";--L6/2745 when"0111"=>tone<="101101001011";dataout_tmp<="0111";--high0<="001";--L7/2891 when"1000"=>tone<="101110001111";dataout_tmp<="0001";--high0<="010";--M1/2960 when"1001"=>tone<="110000001001";dataout_tmp<="0010";--high0<="010";--M2/308 when"1010"=>tone<="110001111001";dataout_tmp<="0011";--high0<="010";--M3/3193 when"1011"=>tone<="110010101100";dataout_tmp<="0100";--high0<="010";--M4/324 when"1100"=>tone<="110100001001";dataout_tmp<="0101";--high0<="010";--M5/3337 when"1101"=>tone<="110101011100";dataout_tmp<="0110";--high0<="010";--M6/342 when"1110"=>tone<="110110100101";dataout_tmp<="0111";--high0<="010";--M7/3494 when"1111"=>tone<="110111000111";dataout_tmp<="0001";--high0<="100";--H1/3528 --when"10000"=>tone<="111000000101";code<="0010";high0<="100";--H2/3589

--when"10001"=>tone<="111000111100";code<="0011";high0<="100";--H3/3645

--when"10010"=>tone<="111001010110";code<="0100";high0<="100";--H4/3670

--when"10011"=>tone<="111010000100";code<="0101";high0<="100";--H5/3717

--when"10100"=>tone<="111010101101";code<="0110";high0<="100";--H6/3758

--when"10101"=>tone<="111011010010";code<="0111";high0<="100";--H7/3795

when others=>null;

end case;

end process;

--------------------------------------------------------------------------------------------

process(PreCLK,tone) -- 11位可预置计数

V ARIABLE Count11 : STD_LOGIC_VECTOR (11 DOWNTO 0);

begin

if PreCLK'event and PreCLK = '1' then

if Count11="11111100001"then

Count11:= tone;FullSpkS<='1';

else Count11:=Count11+1;FullSpkS<='0';

end if;

end if;

end process;

-------------------------------------------------------------------------------------------- process(FullSpkS) --将输出再2分频,展宽脉冲,使扬声器有足够功率发V ARIABLE Count2 : STD_LOGIC;

BEGIN

IF FullSpkS'EVENT AND FullSpkS = '1' THEN Count2 := NOT Count2;

IF Count2 = '1' THEN SpkS <= '1';

ELSE SpkS <= '0'; END IF;

END IF;

END PROCESS;

-------------------------------------------------------------------------------------------- -- enter your statements here --

end rtl;

管脚配置文件:ucf

采用33.8688M时钟频率的xilins FPGA开发板进行实验。

# PlanAhead Generated physical constraints

NET "clk" LOC = P79;

NET "rst" LOC = P111;

NET "SpkS" LOC = P149;

NET "row[3]" LOC = P115;

NET "row[2]" LOC = P116;

NET "row[1]" LOC = P117;

NET "row[0]" LOC = P123;

NET "column[3]" LOC = P119;

NET "column[2]" LOC = P120;

NET "column[1]" LOC = P122;

基于PLC的音乐喷泉控制系统设计(1)..

毕业设计(论文) 题目基于PLC的音乐喷泉 控制系统设计 专业电气工程及其自动化 班级 11电气2班 学生张军(20113264 ) 指导教师李林 职称工程师 高科学院 2015 年

摘要 摘要 音乐喷泉是近年来出现的一种园林建筑与花式观赏相结合的一种产物,它集合声、光、色、形于一体,并产生千变万化的水景。随着可编程控制器的迅速发展,音乐喷泉对控制系统的要求也越来越高,使得越来越多的控制部分需要用可编程控制器来实现。 本课题结合任务书的要求,以音乐喷泉为研究对象,采用三菱PLC作为喷泉的控制器。设计的控制方式有两种:一种是固定程序运行方式。是按事先设计好的步骤一步一步进行,循环执行。另一种控制方式是通过音乐控制喷泉。是通过PLC的中断程序采集播放音乐的音频信号,PLC对采集的音频信号进行标准化算法,将运算的数据转换成模拟量,通过模拟量输出口输出去控制变频器的输出频率,从而控制水泵转速,达到控制喷泉水柱的高低跟随音乐强弱的变化。 本次设计对音乐喷泉控制系统的总体功能进行了分析,并且对可编程控制技术、变频控制技术的应用、发展趋势作了简要介绍,以及音乐喷泉控制总体设计方案、电气系统的整体设计和PLC程序设计思路、变频参数设置。本次设计改善了音乐喷泉系统的控制品质,提高了音乐喷泉控制系统的稳定性。 关键词:音乐喷泉,控制系统,可编程控制器,变频器

ABSTRACT ABSTRACT In recent years, music fountain is the emergence of a garden building combined with a fancy watch a product, its collection of sound, light, color, shape, and generates kaleidoscope waterscape. Along with the rapid development of the programmable controller, music fountain is becoming more and higher to the requirement of control system; make more and more need to use PLC to realize control part. This topic combined with the requirements of the specification, with music fountain as the research object; adopt Mitsubishi PLC as the controller of the fountain model. Design of the control method has two kinds: one is fixed program operation mode. According to design a good steps in advance step by step, execution cycles. Another way of control is through the music fountain control. By PLC interrupt program audio signal collection and play music, audio signal of PLC to standardize algorithm, the algorithm of data into analog and output by analog output to control the output frequency of frequency converter, so as to control water pump speed, to control the fountain water column height to follow music strength changes. The design of music fountain control system's overall function is analyzed, and the programmable control technology, the application of variable frequency control technology, the development trends are briefly introduced, as well as the music fountain control overall design, the overall design of the electric system and PLC program design and parameter setting of inverter. This design improves the music fountain system control quality; improve the stability of music fountain control system. KEY WORDS: Musical fountain,Control system,PLC,frequency

音乐播放器前十排行

音乐播放器前十排行 1、QQ音乐 QQ音乐是腾讯公司推出的网络音乐平台,是中国互联网领域领先的正版数字音乐服务的领先平台,海量乐库在线试听、卡拉ok歌词模式、最流行新歌在线首发等,绿钻用户还可享受高品质音乐试听、正版音乐下载、MV观看等特权。 QQ音乐目前是国内音乐APP的绝对龙头,2016年底其曲库已经超过2000万首,旗下拥有的版权也是音乐APP中的第一,如索尼、华纳、杰尔威、英皇、韩国YG等,其市场份额也超过50%。虽然总有人吐槽QQ音乐,但是十大音乐APP排行榜第一位毫无悬念。在此前评选的全球音乐流服务排行榜,QQ音乐排名第四。 2、虾米音乐 虾米音乐版权建设虽然起步较晚,歌曲量在整体版权音乐中的比例低于20%,但在华语资源上仍具有一定优势。你想要听到华研唱片下的林宥嘉、S.H.E和田馥甄、相信音乐的五月天、梁静茹以及聚集了李宗盛、周华健等人的滚石,还是要投入虾米音乐的怀抱。而且虾米也在去年取得了韩国SM公司的音乐版权,这在国内来说,争取到了很大一部分的韩粉。虽然无法对QQ音乐造成威胁但依旧稳居十大音乐APP排行榜第二。 3、网易云音乐 网易云音乐不用再过多介绍了,近两年大火的音乐APP,口碑爆棚,市场份额目前也达到15%,局国内第二仅次于QQ音域。为何口碑份额双丰收的网易云音乐仅列十大音乐APP排行榜第三?网易云音乐的版权数量实在太少,并且官方也并不太重视版权的购买,虽然网易云音乐的版权音乐歌曲量占整体版权音乐的70%左右,但非常有意思的是大部分的版权都是通过转授权获得的。

4、酷狗音乐 酷狗音乐是一款集中播放、音乐效果、在线下载歌词等众多功能于一身,完全免费的手机音乐播放器。酷狗算是老牌音乐APP了, 但此前酷狗和酷我同QQ音乐一起加入新音乐集团,三大音乐APP曲 库资源基本互通,而且音乐伴奏资源众多也是酷狗的一大优势,喜 欢唱歌的人通常都是用酷狗搜索放伴奏唱歌、录歌。 不过酷狗的音质是劣势,对于耳朵挑剔的乐迷,对音质要求高的人来说很难满足。 5、咪咕音乐 咪咕音乐是一款面向所有用户的手机音乐APP,它包含了在线听歌、下载歌曲、订购彩铃以及开通会员等功能和业务,用户通过咪 咕音乐可以第一时间聆听中国移动无线首发的最新音乐,感觉最热 最流行歌曲,实时了解最新音乐咨讯及娱乐新闻,并可通过软件行 使无线音乐俱乐部会员权益。目前该软件已经覆盖市面上高中低端 主流机型,无论你是何种手机,均可轻松安装和使用。 6、酷我音乐 酷我音乐是中国数字音乐的交互服务品牌,是互联网领域的数字音乐服务平台,同时也是一款内容全、聆听快和界面炫的音乐聚合 播放器,是国内的多种音乐资源聚合的播放软件。自平台成立以来,酷我音乐作为前端潮流音乐的重要推手,率先与唱片公司、版权管 理机构合作探索发展,免费向广大用户提供方便流畅的在线音乐, 还有免费无损音乐方便用户的试听和下载,生成了丰富的音乐流媒 体生态系统。 7、天天动听 天天动听是一款功能强大、完全免费的手机音乐播放软件,支持歌词和歌曲图片下载,简洁人性化的操作,带来手机听歌的全新体验,是拇指一族必备的音乐播放工具。 8、百度音乐

简单音乐发生器

潍坊学院 单片机原理与应用课程 设计说明书 题目: 系部:信息与控制工程学院 专业: 班级: 学生姓名: 学号: 指导教师:王文成 2009年12月15日

目录 1 设计任务与要求 (1) 2设计方案 (1) 2.1 音乐相关知识 (1) 2.2如何用单片机产生音频脉冲 (2) 2.3如何用单片机实现音乐的节拍 (3) 2.4音频功放 (4) 3 硬件设计 (4) 3.1结构框图 (4) 3.2主要器件 (5) 3.3 电路原理图及说明 (6) 4 软件设计 (6) 5 小结 (15) 主要参考文献 (16)

单片机实现简单音乐发生器 1 设计任务与要求 本例将实现一种由单片机控制的简单音乐发生器,它具有16个音的键盘,我们可以根据乐谱在键盘上进行演奏,通过扬声器将音乐播放出来。 本次课程设计的任务是,设计一种由单片机控制的简单音乐发生器,要求键盘有16个键,能过用51单片机C语言编写程序来实现音乐发生器的发音。 要求:1.设计思路切明确; 2.对各个芯片的功能要有所了解; 3.对设计中的各个电路图能够要有所说明;。 4.对设计的、中的源程序要有所注释。 5.在按音乐发生器的16个键的同时能够听到不同的音乐。 2设计方案 进行本例的设计之前,首先需要了解音乐的一些相关知识。 2.1 音乐相关知识 在人类还没有产生语言时,就已经知道利用声音的高低、强弱来表达自己的思想和感情。声带、琴眩等物体震动时会发出声波,声波通过空气传播进入人耳,人们就听到了声音。声音有噪音和乐音之分,振动由规律的声音是乐音,如人声带发出的歌声、由琴眩发出的琴音等。音乐中所有的声音主要是乐音。 乐音听起来有的高,有的低,这就叫音高。音高是由发音物体震动频率的高低决定的,频率高声音就高,频率低声音就低。比如,女人唱歌时声带频率振动高,男人唱歌时声带振动频率低,所以男生比女生低。 音乐中所有音乐的范围从每秒中振动16次的最低到每秒中振动4186次的最高音,大约97个。现在最大的钢琴可以奏出其中的88音,是音乐范围最大的乐器,人唱歌时因受生理限制,所能唱出的乐音仅是乐音范围的一小部分。 不同音高的乐音是用C,D,E,F,G,A,G来表示的,这7个字母就是乐音的音名,

基于51单片机的音乐播放器

基于51单片机的音乐播放器 余子健、刘胤、宋亮 摘要:本大作业是基于sst89e52rd2单片机制作的wav音乐播放器。该播放器可以播放存在sd卡中的音乐,通过对sd卡的读取并将数字信号送入单片机中,借助8位DA转换器TLC5620 变成模拟信号,经过放大器TDA2822放大交给扬声器发出最初读取的音频信号,实现音乐播放的功能。 关键词:SD卡,WAV文件,DA,音频放大 1背景 音乐随身听产品经过几年的发展,已经变得相当成熟。市场上可以购买到各类不同的音乐播放器,产品线涵盖了高中低不同档次。作为学习与研究,本作品尝试利用STI51开发板板载资源以及外搭的功率放大电路制作一台音乐播放器,能够播放通过计算机拷贝在SD卡(或MMC卡、TF卡)的根目录中的某一个WAV 文件。 2硬件设计 该音乐播放器硬件组成如下 本音乐播放器使用容量为2G的SD作为外部存储器 主控制器采用SST公司生产的SST89E58RDA,其40引脚封装的芯片功能模块如图1所示。芯片主要特想如下: ?兼容80C51系列,内置超级FLASH存储器的单片机 ?工作电压VDD=4.5~5V,5V工作电压时0-40MHz频率范围 ?1KB的内部RAM ?两块超级FLASH EEPROM,32KB的基本存储卡和8KB的二级存储块(扇区大小为128字节),二级存储块可用于存放掉电后要保存的数据,放在内部具有极强的抗干扰性?最大片外程序/数据地址空间为64KB ?全双工增强型UART,帧错误检测,自动地址识别 ?9个中断源,4个中端优先级 ?降低EMI模式(通过AUXR SFR不允许ALE输出时钟),确保了单片机的高抗干扰性?双DPTR指针(查表,寻址更方便)

课程设计简易单片机音乐播放器

课程设计 题目:基于单片机音乐演奏曲Title: instrumental music based on single chip 姓名: 学号: 系别: 专业: 年级: 指导教师: 2012年5 月25 日

摘要 单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本设计以At89c2051为核心,主要由电源电路、复位电路、音频放大电路、时钟电路和数码管电路和蜂鸣器电路构成单片机奏乐附加时钟的一个小系统。电路中I/O口采用分时复用的借口技术,使AT89c2051单片机的引脚资源得以充分利用,本系统的电路简单,实现的功能强大,所用芯片比较便宜,性价比较高。 关键词:At89c2051,数码管,单片机奏乐,分时复用

目录 摘要 ........................................................... - 1 - 1.引言 (3) 2.系统整体结构 (4) 2.1系统总设计 (4) 2.2实现的功能 (4) 2.3主要芯片介绍 (4) 2.3.1 AT89c2051芯片介绍 (4) 3.系统硬件设计 (5) 3.1键盘输入模块 (5) 3.2时钟模块 (5) 3.3显示模块 (6) 3.4复位电路 (6) 3.5蜂鸣器电路设计 (7) 4.系统软件设计 (7) 4.1系统主程序流程图系 (7) 4.2 部分子程序流程图 (8) 结束语 (10) 参考文献 (10) 致谢 (11) 附录 (11)

1.引言 随着社会的发展、科技的进步以及人们生活水平的逐步提高,各种方便于生活的自动控制系统开始进入了人们的生活,以单片机为核心的各种系统也越来越多。同时也标志了自动控制领域成为了数字化时代的一员。它实用性强,功能齐全,技术先进,使人们相信这是科技进步的成果。它更让人类懂得,数字时代的发展将改变人类的生活,将加快科学技术的发展。 本次设计为单片机奏乐器,硬件部分它以单片机AT89C2051为核心,由功放电路、数码管等组成。当接上电源按下开关时,就能听到优美的旋律。当然这些音乐都是通过软件编程实现的,把它存储在存储器里,根据存储容量大小决定存储音乐的数目。 [2]

实验六 音乐发生器接口实验

湖北科技学院计算机科学与技术学院《微机接口技术》实验报告 学号: 124221031 姓名:李亮亮 实验题目:音乐发生器接口实验报告 指导老师:范建军 实验日期: 2014.12.26

一、实验目的 通过音乐发生器实验,学习如何利用8253定时/计数器进行声音控制电路的设计原理与方法。 二、实验内容 基本实验 程序执行,开始演奏儿歌“两只老虎”,歌曲结束或按任意键停止演奏。 三、实验要求 利用MFID 实验平台和音乐发生器模块进行硬件连接,利用MF2KI 集成开发环境进行音乐发生器控制程序设计,调试,直至听到正常的乐曲。 四、实验原理 1.音乐发生器驱动模块电路原理如图2.1.12所示。模块包含喇叭SPK ,LM386A ,74LS08,以及74LS245和LED 等。其中LED 是配合演奏音乐时产生发光效果而设置的。 图2.1.12 音乐发生器模块板电路原理框图 2.利用8253控制发声原理与方法的详细阐述,参考“微机接口技术及应用”教材第3.3节(P43)。 五、实验资源配置 1.电源:机内供电,将平台的电源开关拔到“内”的位置上,并将模块电源JP7接通 2.电缆线:采用单线/20芯扁平线 3.本实验所用到资源:E (8253),F (8255)Q (音乐发生器)L (跳线)四个模块 4.I/O 端口地址:8255的4个端口地址为300H ~303H 。其中A 口=300H ,B 口=301H ,C 口=302H ,命令口=303H 。8253的四个端口地址为304H ~307H 。其中通道0为304H,通道1为305H,通道2为306H,命令口为307H 5.软件资源:MF2KI 集成开发环境软件提供了丰富的汇编语言和C/C++语言程序开发工 20 芯 定 时 器 / 并 行 口 插 座 50 芯 扩 展 总 线 排 阻

单片机音频发生器程序设计

实验三单片机音频发生器程序设计 实验目的 1、进一步掌握单片机定时器的用法。 2、了解用单片机的IO口输出方波的方法。 3、理解用单片机产生简单音频的方法。 实验仪器 单片机开发板、万利仿真机、稳压电源、计算机 实验原理 1、单片机IO口产生音频脉冲的原理 我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的“高”电平或“低”电平,则在该口线上就能产生一定频率的方波,接上喇叭就能发出一定频率的声音,若通过程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。喇叭驱动电路如图4-13所示。 图4-13 喇叭驱动电路 例如,要产生中音1。从下表可知,中音1的频率为523Hz,周期T=1/523=1912μs,其半周期为1912/2=956μs,因此只要在SPEAKER接口上产生半周期为956μs的方波,即可听到持续的1音。C调部分音符频率与计数初值的对应表如下: 表4-1 C调部分音符频率、计数初值与设置简谱码的对应关系 注:上表定时器工作于模式1 2、音乐节拍的生成 要唱出一首歌,只产生出音频脉冲还不够,还要考虑发出音频时间的长短(即节拍)。

如果一拍为0.4秒,则1/4拍是0.1秒,只要设定延迟时间就可获得节拍的时间。我们也可以设1/8拍为1个延迟单位时间,则1拍应该是8个延迟单位时间,以此类推,所以,只要求得1/8拍的DELAY时间,其余的节拍就是它的倍数。详见下表 表4-2 节拍与节拍码对照表 3、简谱发生器程序设计 由前面的分析可知,音符频率有14种,节拍有10种,我们定义每个音节占用一个字节,字节的低4位代表音符的频率,高4位表示该音符的节拍。定义一个音符频率表、一个音符节拍表。程序首先读取一个音节,并从音符频率表和节拍表中读取音符频率所对应的定时器初始和节拍对应的延时参数。利用单片机内部定时器0、1分别产生频率和节拍。定时器0的初始值由音符的频率决定,定时器1的初始值是50ms对应的值。每当一个音符输出完成就取出下一个音符,直到取出的是0FFH。代表所有音符全部输出完成。程序停止或重新开始。程序流程图如图4-14所示。 图4-14 实验内容 1、在单片机P1.2口产生下列频率方波 1KHz,2KHz,5KHz,10KHz,学号后两位*100 2、在P1.2口产生简谱对应频率方波(简谱频率如上文) 3、在P1.2口播放简谱音乐。

基于单片机的音乐播放器

基于单片机的音乐播放器 摘要 单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统。 基于单片机的音乐播放器可应用于MP3、MP4,扩音器等很多方面,并可作为很多系统的辅助功能,作为单片机的重要硬件资源之一,利用定时器可以产生各种固定频率的方波信号,也可以产生包括"Do"、"Re"、"Me"--等音阶在内的各种频率声音。将各个音阶连接在一起,便可组成一支曲子或是演奏一段旋律。基于这个思想,采用AT89C52单片机设计了一款特殊的"音乐播放器",本播放器可实现播放、暂停、复位等功能。 关键字:单片机;集成电路:89C52芯片;音乐播放器

Abstract Single Chip Microcomputer is an integrated circuit chip, VLSI technology is the use of having the data processing capabilities of the CPU random access memory RAM, read-only memory ROM, a variety of I / O port and interrupt system, the timer / counter functions (may also include a display driving circuit, the pulse width modulation circuit, an analog multiplexer, A / D converter circuit, etc.) are integrated into a small sound system on a microcomputer composed of silicon. Microcontroller-based music player can be used in many ways mp3, MP4, loudspeakers, etc., and as a secondary function of many systems, as one of the important microcontroller hardware resources, using the timer can generate a variety of fixed frequency square wave signal can be generated include the "Do", "Re", "Me" - like various frequencies including the sound scale. The various scales together, may form a song or play a melody. Based on this idea, using AT89C52 designed a special "Music Player", the player can be realized play, pause, reset and other functions. Keyword:Single Chip Microcomputer;integrated circuit;89C52 chip;Music Player

音乐发生器实验

音乐发生器实验 目录 1 前言 (2) 2 需求分析 (2) 2.1原理 (2) 2.2要求 (2) 2.3任务 (2) 2.4运行环境 (2) 2.5开发工具 (2) 3 概要设计 (3) 3.1系统流程图: (3) 3.2音符文件读取程序流程图 (3) 3.3播放子程序 (4) 3.4延时子程序 (4) 4 详细设计 (5) 4.1歌曲编排 (5) 4.2分析和设计 (5) 4.3具体代码实现 (8) 5 课程设计的总结与体会 (13) 6 致谢 (13) 7 参考资料 (13)

前言 编写一个程序来初始化8253定时/计数器和8255并行通信接口芯片。通过接口控制音乐发声器的播放和灯光的闪烁,实现通过运行在MFDI平台运行程序对硬件电路的控制。 1需求分析 2.1 原理 编写程序对8253和8255芯片进行初始化,按照音符来设定频率和8253定时/计数器的延时时间。对8255芯片pc0和pc6口的置0和1来控制扬声器的开关,对pc4口的置0和1控制LED灯的闪烁。 2.2 要求 (1)熟悉电路,理解各个元件之间的控制流程。 (2)熟悉MFDI平台的运行环境。 (3)熟练掌握C语言,调用中断子程序和端口函数对端口进行读写数据的操作。 (4)理解乐谱知识,熟悉音频转换表和节拍的延长时间 2.3 任务 (1)曲谱转换 (2)分析电路图 (3)画出程序流程图 (4)编写代码 (5)程序分析与调试 (6)测试 2.4 运行环境 (1)WINDOWS2000/XP系统 (2)MFDI实验平台 (3)VC编译环境

2.5 开发工具 C语言 2概要设计 3.1 系统流程图(如图3.1): 图3.1 系统流程图3.2 音符文件读取程序流程图(如图3.2):

基于单片机的简单电子琴毕业设计

基于单片机的简单电 子琴毕业设计 目录 1引言 (1) 2 总体设计 (2) 2.1 设计目的与要求 (2) 2.2 电子琴系统的组成 (2) 2.3 系统设计框图 (3) 3 详细设计 (4) 3.1 硬件设计 (4) 3.2 硬件简介 (5) 3.2.1 AT89C51简介 (5) 3.2.2 LED数码管 (10) 3.3整体程序处理流程图设计 (11) 3.4矩阵式键盘的识别和显示与设计 (12) 3.4.1矩阵式键盘的结构与工作原理 (12) 3.4.2矩阵式键盘的按键识别方法 (13) 3.4.3键盘接口必须具有的4个基本功能 (15) 3.5音乐播放设计 (16) 3.5.1音乐发声原理 (16) 3.5.2音乐播放流程图 (18) 3.5.3放歌子程序流程图 (18) 4实现联调 (20) 4.1 Proteus 简介 (20) 4.2 keil 简介 (20) 4.3利用keil与Proteus进行的调试 (21) 5 总结与展望 (23)

参考文献 (25) Abstract: (26) 致谢 (27) 附录A:程序设计 (28) 附录B 印制电路板(PCB)设计 (34)

基于单片机的简单电子琴设计 摘要:电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文主要对使用单片机设计简易电子琴进行了分析与设计,并介绍了基于单片机电子琴的系统硬件组成。该文设计是一种基于AT89C51的简单音乐发生器,利用单片机技术、键盘和一组发光二极、SPEARK等实现原理图设计,并用C51语言进行键盘识别程序设计和音频脉冲输出程序的设计。经过软件和硬件的联调,并仿真出来。该音乐发生器不仅能通过键盘弹奏出来简单的乐曲,而且不弹奏时按播放键可以播放置音乐,音调和节拍都由单片机控制实现。本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。 关键词:单片机;键盘;扬声器;电子琴

基于51单片机的音乐播放器设计

题目:音乐播放器 课程设计(论文)任务书

摘要 随着电子技术的发展和计算机越来越普遍的使用,单片机作为这两项技术的有机结合也得到了广泛的应用,在某些领域具有不可替代的作用。音乐播放功能随处都会用到,如,在开发儿童智力的玩具中,等等。目前,基于单片机实现音乐播放,其体积小、价格低、编程灵活等特点在这一领域独领风骚。 单片机的英文名称为single chip microcomputer,最早出现在20世纪70年代,国际上现在已逐渐被微控制器(Microcontroller Unit 或MCU)一词所取代。它体积小,集成度高,运算速度快,运行可靠,功耗低,价格廉,因此在数据采集、智能化仪表、通讯设备等方面得到了广泛应用。而8051单片机在小到中型应用场合很常见,已成为单片机领域的实际标准。随着硬件的发展,8051单片机系列的软件工具也有了C级编译器和实时多任务操作系统RTOS,为单片机编程使用C语言提供了便利的条件;并针对单片机常用的接口芯片编制通用的驱动函数,可针对常用的功能模块,算法等编制相应的函数;C语言模块化程序结构特点,可以使程序模块大家共享,不断丰富,这样就使得单片机的的程序设计更简单可靠,实时性强,效率高。作为测控技术与仪器的学生,掌握8051单片机硬件基础及其相关软件操作,将其应用于现代电子产品中是必要而且重要的,这次课程设计我们的题目是用单片机实验箱系统制作音乐播放器。 本次课程设计主要内容是通过单片机C51语言进行编程,以产生乐曲音符和节拍,把乐谱翻译成计算机语言(音符转换诚成相对应的方波频率即定时器装载初值,节拍转换成相对应的延长时间),并将其预先存储到单片机里,然后根据按键调用再由单片机进行信息处理,在经过信号放大,由喇叭放出乐曲声,实现音乐播放的功能。其主要表现在可以播放十首歌曲,可以用十个数字键控制播放的歌曲,并且能在LCD液晶屏显

音乐喷泉控制系统简介

音乐喷泉控制系统简介 1. 系统简介 音乐喷泉控制系统是综合当今国际上先进科技成果,集音乐控制、程序控制、人工智能控制技术于一体的工业现场控制系统。其上位机是多媒体工业PC机或电脑音乐喷泉主控器,它能实现全程实时音控,自行识别乐曲旋律、节奏、乐感和音频强弱度。该系统使音乐喷泉在电脑指挥下,跟随音乐旋律不断变换水型,并与音乐同步。 2. 系统性能指标 ⑴系统多媒体软件包括曲目管理,乐曲编配以及多媒体演播。 ⑵开放式结构,乐曲编配技巧对用户开放,有方便的交互式操作控制界面,客户可自行选定播放乐曲。 ⑶音乐喷泉的计算机动态仿真与实时监控系统。 ⑷同一系统有多种工作运行方式:手动控制、程序控制、音乐控制、无人操作自动定时控制。 ⑸采用数码式音乐信号处理技术,将音乐信号进行频谱分析和延时处理,使喷泉和音乐同步,节奏同步,同步精度达到0.1秒。 ⑹水泵的控制方式有变频器调速、多级并联、PWM数码控制及开关量控制。 ⑺由于采用了RS485总线数字通信技术,使系统控制水泵、阀门及彩灯的点数可无限扩展,抗干扰性强,精度高。 ⑻乐曲可以由传统的CD、VCD、DVD机播放或多媒体电脑提供,现一般多用多媒体电脑。 ⑼阀门控制回路中全部采用故障自动恢复系统。 3. 系统应用范围 系统可应用于大型广场音乐喷泉、湖中喷泉、室内舞台表演喷泉、宾馆景观喷泉、公园游乐喷泉、园林景观喷泉、名人主题公园喷泉、企业形象喷泉、住宅小区喷泉等。 4. 系统配套方式 客户可以根据需要,选择下列任意一种系统: ⑴程控喷泉控制系统:它是采用已预先编辑好的程序,定时循环固定或随机变化各种水形组合,若加上彩色灯光,便成为“彩色程控喷泉”。 ⑵跑泉控制系统:跑泉是在电脑音乐喷泉主控器指挥下,由电磁阀依次顺序开闭来控制一长列喷嘴而产生出动态水形。跑泉控制器可变化几十种花型,并可改变其速度,最快响应速度为20毫秒。 ⑶电脑音乐喷泉控制系统:它是由一台电脑音乐喷泉主控器,下挂若干台电脑喷泉控制器,以及多条电脑跑泉控制器,组成的一个集成控制系统。 ⑷计算机管理音乐喷泉控制系统:它是由一台多媒体工业PC机作为上位机,若干台电脑喷泉控制器和电脑跑泉控制器作为下位机,组成的一个集成控制系统。 简介:介绍了计算机在音乐喷泉水泵的供电、调速、摇摆喷头的定位、多媒体音乐喷泉的控制及计算机辅助配乐、人工智能实时控制等在音乐喷泉技术方面的应用。 关键字:音乐喷泉喷泉工程电控设计

数字系统设计音乐播放器

一、实验目的和要求(必填) 二、实验内容和原理(必填) 三、主要仪器设备(必填) 四、操作方法和实验步骤 五、实验数据记录和处理 六、实验结果与分析(必填) 七、 讨论、心得 一、实验目的和要求: 实验目的: (1)掌握音符产生的方法,了解DDS 技术的应用。 (2)了解AC97音频接口电路的应用。 (3)掌握系统“自顶而下”的设计方法。 实验任务: 设计一个音乐播放器。 (1)可以播放四首乐曲,设置play 、next 、reset 三个按键。按play 键播放当前乐曲,按next 键播放下一首乐曲。 (2)LED0指示播放情况(播放时点亮)、LED2和LED3指示当前乐曲序号。 二、实验内容和原理 (1)音乐播放器的设计原理 根据实验任务可将系统分为主控制器(mcu )、乐曲读取(song_reader )、音符

播放(note_player)、AC97音频接口(codec_conditioner)和ac97_if五个子模块,系统的总体框图如下: 各个模块的功能如下: 模块接收按键信息,通知song_reader模块是否要播放(play)及播放哪首乐曲(song),若一曲播放结束则进入播放结束END状态。 模块根据mcu模块的要求,逐个取出音符{note,duration}送给note_player模块播放,当一首乐曲播放完毕,回复mcu模块乐曲播放结束信号(song_done)。 模块接收到需播放的音符,在音符的持续时间内,以48kHz速率送出该音符的正弦波样品给AC97音频接口模块。当一个音符播放结束,向song_reader模块发送一个note_done脉冲索取新的音符。 、ac97_if模块负责与AC97音频系统接口工作,本实验已提供了这两个模块的代码。 另外,按键处理模块完成输入同步化、防颤动和脉宽变换等功能。 1、主控制模块mcu的设计 mcu模块是主控制模块,有响应按键信息、控制系统播放两大任务,工作流程如下面的流程图所示。要求系统复位后经RESET状态初始化后进入WAIT状态等待按键输入或乐曲播放结束应答,若有按键输入则转入相应的按键处理状态(NEXT或PLAY),若一曲播放结束则进入结束播放END状态。 mcu的控制器算法流程图如下图: 以下为mcu的端口含义

音乐发生器设计

实验项目五音乐发生器设计 一、实验目的 1、了解普通扬声器的工作原理。 2、使用FPGA产生不同的音乐频率。 3、进一步体验FPGA的灵活性。 1、 二、硬件要求 1、EDA2000实验箱(其他厂家具有同等配置试验箱均可) 2、主芯片:EP1K1OTC100-3 3、计算机与QUARTUS 软件 三、实验原理 1、乐曲的发声原理:组成乐曲的2个基本要素是:每个音符的发音频率值及其持续的时间(节奏)。一般人能听到声音的频率范围约在几十到几千赫兹,可以利用程序控制FPGA 某个引脚输出一定频率的矩形波,接上扬声器后就能发出相应频率的声音,演奏某个音符的音调,同时,若能控制每个音符的持续时间,也就控制了乐曲的节奏,因此只要控制输出到扬声器的信号频率的高低以及每个信号的持续时间长短,即可实现乐曲的演奏。 2、音符的产生:音符的产生是利用计数器对输入的时钟信号进行分频,然后输出不同的频率来控制扬声器发不同的声音。计数器必须是模可变的计数器,也就是其初始计数值可变,这样便可以对其进行初始化,使其从不同的初始值开始计数,实现对输入时钟信号的不同分频。 3、节拍的产生:节拍也是利用计数器来实现,如果某一个音符需要维持的时间比较长,那么就可以在此计数器从计数值A到计数值B之间都维持该音符,很显然,A和B之间的间隔越大,那么该音符维持的时间也就越长。 4、乐谱的存储:乐谱是一个固定的组合电路,根据不同的输入值,然后输出一个固定的值,该值就是音符产生计数器的分频的初始值。 5、适当的选择这些计数器和组合电路,便可完成不同的乐曲和不同节奏。 四、实验内容及步骤 本实验要完成的任务是设计一个驱动扬声器产生梁祝音乐的程序,设计步骤如下: 1、编写音乐输出的VHDL代码。 2、用Quartus II对其进行编译仿真。 3、在仿真确定无误后,选择芯片ACEX1K EP1K10TC100-3。 4、给芯片进行管脚绑定,在此进行编译。 5、根据自己绑定的管脚,在实验箱上对扬声器接口和FPGA之间进行正确连线。 6、给目标板下载代码,观看实验结果。 五、下面为梁祝音乐代码,要求讲其改写为上海滩代码,并在EDA2000上下载验证LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY song IS PORT(

基于51单片机音乐播放器的设计

本科毕业论文(设计) 题目:基于51单片机音乐播放器的设计 学院: 班级: 姓名: 指导教师:王振义职称:副教授 完成日期:2015年5月20日

基于51单片机音乐播放器设计 摘要:在当今这个繁杂的社会,随着生活节奏的加快,人们从事长期的工作和面对学习过大的压力导致我们处于紧绷的状态,因此音乐对于调节压力不言而喻的十分重要。校园里的上下课的铃声,广场中爷爷奶奶伴随着音乐进行锻炼身体。此设备为人们目前压力过大的生活带来了乐趣。 本文是利用51单片机原理设计音乐演奏的硬件电路,并运用C语言进行程序部分的设计。经过51单片机来产生频率不同的波,这些波经过单片机输出和放大电路的放大驱使喇叭发出不一样的音调,延迟系统有可控制音符发音长短。把音乐转化成可以从发音设备中发出的悦耳动听的音乐。 关键字:单片机;音乐播放器;C语言

Design based on 51 SCM music player Abstract:In today's complex society, with the accelerating rhythm of life, the people in the long-term work and face learning too much pressure lead to us is in a state of tension, so the music is very important for regulating pressure self-evident.The ringing of a campus of adding and dropping classes, grandma and grandpa accompanied by music in the square to exercise.This device at present stress for people brought joy of life. This paper is the use of 51 single chip microcomputer hardware circuit design of music playing, and part using C language program design.After 51 single chip microcomputer to produce different frequency of wave, the wave through single chip microcomputer output and amplifying circuit amplifier drives the horn a different tone, length of the delay system with control pronunciation notes.Can put the music into sweet music from pronunciation in the device. Keywords : Single-chip processor; Music player; C programming language

基于PLC的音乐喷泉控制系统设计

课程设计说明书题目: 基于PLC的音乐喷水池系统设计 系别:机械工程学院 专业班级: 学号: 学生姓名: 指导教师: 2014 年0 1 月15 日

安徽理工大学课程设计(论文)任务书

安徽理工大学课程设计(论文)成绩评定表

随着国民经济的发展,城市建设日新月异,喷泉水景逐渐成为了城市中一道靓丽的景观。在大型公园、广场、楼盘社区随处可见,只是规模大小、控制方式存在差别。特别是利用现代化的控制技术,将喷泉的造型(根据喷头分布情况组成的花形)、音乐、灯光三种元素进行有机地结合,相互映衬,使喷泉展现出美轮美奂的景象,享有“水上芭蕾”的美誉。 PLC是一种用于自动化控制的专用计算机,实质上属于计算机控制方PLC控制一般具有可靠性高、易操作、维修、编程简单、灵活性强等特点,所以基于PLC的音乐喷水池应用而生,利用PLC控制音乐喷水池也变得越来越普遍,同时,随着电力电子技术、微电子技术和计算机控制技术的飞速发展,交流变频调速技术的发展也十分迅速。电动机交流变频调速技术是当今节电、改善工艺流程以提高产品质量和改善环境、推动技术进步的一种主要手段。变频调速以其优异的调速性能和起制动性能、高效率、高功率因数和节电效果,广泛的适用范围及其它许多优点而被国内外公认为最有发展前途的调速方式。所以利用PLC控制喷水池也变得方便,高效。 关键词:PLC; 音乐喷水池 ; 梯形图

第一章绪论 (1) 第二章PLC 简介 (2) 2.1 PLC的由来 (2) 2.2 PLC的定义 (2) 2.3 PLC的构成 (3) 2.4 PLC的各组成元素的构成及功能 (3) 2.5 PLC工作原理 (5) 第三章控制系统的硬件设计 (7) 3.1 PLC控制系统I/O口的估算 (7) 3.2 PLC模块及扩展模块 (7) 第四章. PLC音乐喷水池软件系统 (9) 4.1 实施步骤 (9) 4.2 小型音乐喷泉自动控制系统 (10) 4.3 方案设计 (10) 第四章程序调试与运行 (18) 4.1 实验台接线图 (18) 4.2 PLC和音乐喷水池接线图 (18) 4.3 程序运行监视图 (19) 4.4 程序运行状态 (20) 4.5 程序调试 (21) 总结 (23) 参考文献 (24)

【推荐下载】html5 简单音乐播放器

html5 简单音乐播放器 2016/04/09 0 html5 简单音乐播放器 !DOCTYPE html html xmlns=“w3/1999/xhtml”head meta http-equiv=“Content- Type”content=“text/html;charset=UTF-8”/title /title style type=“text/css”body{font-family:微软雅黑;} #container{width:500px;margin:10px auto;border:1px solid #ccc;background:#999999;border-radius:5px;padding:10px;} #mName{float:left;width:250px;} #mTime{float:left;width:250px;text-align:right;} #player{margin-top:20px;} #media{width:450px;} ul{list-style:none;padding-left:5px;} ul li{margin-top:5px;} #mList{height:200px;} #changeMusic{text-align:right;} a{text- decoration:none;color:black;} a:hover{color:red;} /style script //声明两个数组,用来存储歌曲名称和文件地址var musicNames=[],musicSrcs=[],randomNums=[]; var RANDOMNUM=5;//随机的歌曲数量function $(id){ return document.getElementById(id); } function initial(){ //为数组赋值musicNames[0]=“Blood Money.mp3”;musicNames[1]=“California Hotel.mp3”; musicNames[2]=“Loving You.mp3”;musicNames[3]=“Miracle.mp3”; musicNames[4]=“SantaFe.mp3”;musicNames[5]=“Wonderful Tonight.mp3”; musicSrcs[0]=“music/Blood Money.mp3”;musicSrcs[1]=“music/CalifoniaHotel.mp3”; musicSrcs[2]=“music/Loving You.mp3”;musicSrcs[3]=“music/Miracle.mp3”; musicSrcs[4]=“music/SantaFe.mp3”;musicSrcs[5]=“music/Wonderful Tonight.mp3”; //获取元素media = $(“media”);//绑定事件media.addEventListener(“canplay”,media_canplay,false); media.addEventListener(“play”,media_play,false); //获取歌曲loadMusic(); } /** * 判断r 在randomNums 中是否已经存在* return true : 已经存在* return false : 不存在*/ function checkRExists(r){ for(var i=0;i randomNums.length;i++){ if(randomNums[i] == r){ //存在return true; } } return false; } /** * 方法:用于生成指定个数随机数* 如果碰到重复的数字,则重新生成*/ function generateRandom(){ var i=0; for(;;){ var

相关主题
文本预览
相关文档 最新文档