电子节拍器的设计与实现

合集下载

北邮数字电路与逻辑设计实验下 节拍器

北邮数字电路与逻辑设计实验下 节拍器

数字电路与逻辑设计实验电子节拍器的设计与实现综合实验报告学院:信息与通信工程学院班级:2013211124姓名:***学号:**********班内序号:062015年11月12日目录一、实验题目和任务要求 (2)(一)实验题目 (2)(二)基本要求 (2)(三)提高要求 (2)二、系统设计 (2)(一)设计思路 (2)(二)总体框图 (3)(三)分块设计 (6)三、仿真波形及波形分析 (6)(一)encode文件仿真 (6)(二)change文件仿真 (7)(三)fangdou文件仿真 (7)四、源程序 (8)(一)connect.vhd (8)(二)beat.vhd (10)(三)change.vhd (12)(四)chw.vhd (12)(五)cnta.vhd (13)(六)cora.vhd (14)(七)encode.vhd (17)(八)fangdou.vhd (18)(九)fenpin.vhd (18)(十)jibenpinlv.vhd (20)(十一)v oice.vhd (21)(十二)x ianshi.vhd (22)五、功能说明及资源利用情况 (23)(一)功能说明 (23)(二)资源占用情况 (24)六、故障及问题分析 (24)七、总结和结论 (25)八、参考文献 (26)一、实验题目和任务要求(一)实验题目电子节拍器的设计与实现,设计并实现一个具有声光显示的电子节拍器。

(二)基本要求1、速度在40~120次/分钟范围内连续可调,通过2个按键进行速度调节,一个用来增加,一个用来减少,当长按按键时,按5次/秒的速度连续增加或减少,用3个数码管显示当前速度。

2、节拍有1/4、2/4、3/4、4/4、3/8、6/8可选,通过一个按键选择,用2个数码管显示。

3、通过一个按键开始和停止打节拍,开始后按照设置好的节拍和速度打节拍。

4、要求有声音和灯光提示,声音要有强弱区别,灯光可用不同颜色的发光二极管表示强弱。

电子节拍器的设计与实现

电子节拍器的设计与实现

电子节拍器的设计与实现学院: 明光桥北技术学院班级:姓名:学号:班内序号:1、设计思想本实验采用自顶向下设计的方法。

从整体上考虑系统的功能,划分出不同 的功能模块,然后选用器件实现相应模块,反复改进、反复实践,最终完成系统的设计。

在前期,我主要是进行各个模块的测试,分别测试完成之后,再通过顶层文件进行电路的连接,实现全部的设计。

2、总体框图(1)系统框图一、 故障及问题分析1.当按键按下之后,按下一次会产生多次按下的效果。

问题分析与解决:由于抖动的原因,需要加上一个防抖的程序。

分频器clk 50MHZ 高频 低频 译码器 选择变速产生节拍 add sub clear 切换节拍2. 速度加1加5的时钟计时时间偏小。

问题分析与解决:通过实验室多次调试解决。

3.播放自制歌曲时无法进行节拍演示。

问题分析与解决:case语句需要改进。

(由于此歌曲在验收实验前一天晚上才完成没有时间改进。

)4.蜂鸣器一开始输入高低电平。

问题分析与解决:后来查阅资料和同学沟通发现应该是输入不同频率的方波信号。

5.导致数码管显示不正常。

问题分析与解决:对数码管扫描频率一开始过大,应该调整为10kHz六、总结和结论好人有好报----造福学弟学妹七、源程序顶层文件library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY jiepaiqi ISPORT(add : IN STD_LOGIC;sub : IN STD_LOGIC;clk : IN STD_LOGIC;clear :IN STD_LOGIC;state: IN STD_LOGIC;success:in std_logic;sw : IN STD_LOGIC;-- sw1 : IN STD_LOGIC;led1 : OUT STD_LOGIC;led2 : OUT STD_LOGIC;led3 : OUT STD_LOGIC;beeper0 : OUT STD_LOGIC;b : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);cat : OUT STD_LOGIC_VECTOR(5 DOWNTO 0) );END jiepaiqi;ARCHITECTURE a OF jiepaiqi ISCOMPONENT beeperPORT( clk:in std_logic;clear:in std_logic;state:in std_logic;success:in std_logic;V1,V2,V3:in std_logic;show:out std_logic);END COMPONENT;COMPONENT fenpinqiPORT(clk : IN STD_LOGIC;clear : IN STD_LOGIC;S : IN STD_LOGIC_VECTOR(6 DOWNTO 0);speed : OUT STD_LOGIC;ms : OUT STD_LOGIC);END COMPONENT;COMPONENT ledPORT(speed : IN STD_LOGIC;clear : IN STD_LOGIC;J : IN STD_LOGIC_VECTOR(2 DOWNTO 0);V1 : OUT STD_LOGIC;V2 : OUT STD_LOGIC;V3 : OUT STD_LOGIC);END COMPONENT;COMPONENT pacePORT(sw : IN STD_LOGIC;clear : IN STD_LOGIC;J : OUT STD_LOGIC_VECTOR(2 DOWNTO 0) );END COMPONENT;COMPONENT smgymqPORT(clk : IN STD_LOGIC;clear : IN STD_LOGIC;J : IN STD_LOGIC_VECTOR(2 DOWNTO 0);S : IN STD_LOGIC_VECTOR(6 DOWNTO 0);b : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);cat : OUT STD_LOGIC_VECTOR(5 DOWNTO 0) );END COMPONENT;COMPONENT speederPORT(add : IN STD_LOGIC;sub : IN STD_LOGIC;clear : IN STD_LOGIC;clk : IN STD_LOGIC;S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) );END COMPONENT;COMPONENT fenpinqismgPORT(clk : IN STD_LOGIC;clear : IN STD_LOGIC;clkout : OUT STD_LOGIC);END COMPONENT;SIGNAL SW_0 : STD_LOGIC;SIGNAL SW_1 : STD_LOGIC;SIGNAL SW_2 : STD_LOGIC;SIGNAL SW_10 : STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL SW_4 : STD_LOGIC;SIGNAL SW_11 : STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL SW_6 : STD_LOGIC;SIGNAL SW_9 : STD_LOGIC;BEGINled1 <= SW_0;led2 <= SW_1;led3 <= SW_2;u1: beeperPORT MAP(clk => clk,clear => clear,state =>state,success=>success,V1 => SW_0,V2 => SW_1,V3 => SW_2,show => beeper0);u2: fenpinqiPORT MAP(clk => clk,clear => clear,S => SW_10,speed => SW_4,ms => SW_9);u3: ledPORT MAP(speed => SW_4,clear => clear,J => SW_11,V1 => SW_0,V2 => SW_1,V3 => SW_2);u4: pacePORT MAP(sw => sw,clear => clear,J => SW_11);u5: smgymqPORT MAP(clk => SW_6,clear => clear,J => SW_11,S => SW_10,b => b,cat => cat);u6: speederPORT MAP(add => add,sub => sub,clear => clear,clk => SW_9,S => SW_10);u7: fenpinqismgPORT MAP(clk => clk,clear => clear,clkout => SW_6);END a;数码管分频器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fenpinqismg isport(clk,clear :in std_logic;clkout :out std_logic);end fenpinqismg;architecture a of fenpinqismg issignal temp:integer range 0 to 2499; signal clk_tmp : std_logic;beginprocess(clk,clear)beginif clear='0'thentemp<=0;clk_tmp<='0';elseif clk'event and clk='1' then if temp=2499 thentemp<=0;clk_tmp<= not clk_tmp;elsetemp<=temp+1;end if;end if;end if;clkout<=clk_tmp;end process;end;速度调节library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity speeder isport(add,sub,clear,clk :in std_logic;S:out std_logic_vector(6 downto 0));end speeder;architecture a of speeder issignal S_temp:std_logic_vector(6 downto 0);signal time1a: integer range 0 to 2000;signal time1b: integer range 0 to 2000;signal time2a: integer range 0 to 2000;signal time2b: integer range 0 to 2000;beginprocess(clk)beginif(clk'event and clk='1')then-----------add----------if S_temp<"1010000"then --节奏速度小于120if(add='0')thentime1a<=0;time1b<=0;elsif (add='1'and time1a=2000 and S_temp<"1001100") then --节奏速度小于115按键1秒速度+5 S_temp<=S_temp+5;time1a<=0;elsif(add='1'and time1b=0)thenS_temp<=S_temp+1;time1b<=time1b+1;elsif(add='1'and time1a<2000)thentime1a<=time1a+1;end if;end if;----------sub----------if S_temp>"0000000"then --节奏速度大于40if(sub='0')thentime2a<=0;time2b<=0;elsif (sub='1'and time2a=2000 and S_temp>"0000101") then --节奏速度大于45按键1秒速度-5 S_temp<=S_temp-5;time2a<=0;elsif(sub='1'and time2b=0)thenS_temp<=S_temp-1;time2b<=time2b+1;elsif(sub='1'and time2a<2000)thentime2a<=time2a+1;end if;end if;end if;if clear='0'thenS_temp<="0101000"; --重置按键使得初始速度定为80end if;end process;S<=S_temp;end a;数码管和译码器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity smgymq isport(clk:in std_logic;clear: in std_logic;J: in std_logic_vector(2 downto 0);S: in std_logic_vector(6 downto 0);cat:out std_logic_vector(5 downto 0);b:out std_logic_vector(6 downto 0));end entity smgymq;architecture a of smgymq issignal temp : STD_LOGIC_VECTOR(3 downto 0);signal j1,j2 : STD_LOGIC_VECTOR(6 downto 0);signal S1,S2,S3: STD_LOGIC_VECTOR(6 downto 0);beginprocess(clk)beginif(clear='1')thenif(clk'event and clk ='1')thenif (temp="0101")thentemp<="0000";elsetemp<=temp+1;end if;end if;end if;end process;process(temp)beginif(clear='1')thencase S iswhen"0000000" => s1 <="0000000";s2<="0110011";s3<="1111110"; --40 when"0000001" => s1 <="0000000";s2<="0110011";s3<="0110000"; --41 when"0000010" => s1 <="0000000";s2<="0110011";s3<="1101101"; --42 when"0000011" => s1 <="0000000";s2<="0110011";s3<="1111001"; --43 when"0000100" => s1 <="0000000";s2<="0110011";s3<="0110011"; --44 when"0000101" => s1 <="0000000";s2<="0110011";s3<="1011011"; --45 when"0000110" => s1 <="0000000";s2<="0110011";s3<="1011111"; --46 when"0000111" => s1 <="0000000";s2<="0110011";s3<="1110000"; --47 when"0001000" => s1 <="0000000";s2<="0110011";s3<="1111111"; --48 when"0001001" => s1 <="0000000";s2<="0110011";s3<="1111011"; --49 when"0001010" => s1 <="0000000";s2<="1011011";s3<="1111110"; --50 when"0001011" => s1 <="0000000";s2<="1011011";s3<="0110000"; --51 when"0001100" => s1 <="0000000";s2<="1011011";s3<="1101101"; --52 when"0001101" => s1 <="0000000";s2<="1011011";s3<="1111001"; --53 when"0001110" => s1 <="0000000";s2<="1011011";s3<="0110011"; --54 when"0001111" => s1 <="0000000";s2<="1011011";s3<="1011011"; --55 when"0010000" => s1 <="0000000";s2<="1011011";s3<="1011111"; --56 when"0010001" => s1 <="0000000";s2<="1011011";s3<="1110000"; --57 when"0010010" => s1 <="0000000";s2<="1011011";s3<="1111111"; --58 when"0010011" => s1 <="0000000";s2<="1011011";s3<="1111011"; --59 when"0010100" => s1 <="0000000";s2<="1011111";s3<="1111110"; --60 when"0010101" => s1 <="0000000";s2<="1011111";s3<="0110000"; --61when"0010110" => s1 <="0000000";s2<="1011111";s3<="1101101"; --62 when"0010111" => s1 <="0000000";s2<="1011111";s3<="1111001"; --63 when"0011000" => s1 <="0000000";s2<="1011111";s3<="0110011"; --64 when"0011001" => s1 <="0000000";s2<="1011111";s3<="1011011"; --65 when"0011010" => s1 <="0000000";s2<="1011111";s3<="1011111"; --66 when"0011011" => s1 <="0000000";s2<="1011111";s3<="1110000"; --67 when"0011100" => s1 <="0000000";s2<="1011111";s3<="1111111"; --68 when"0011101" => s1 <="0000000";s2<="1011111";s3<="1111011"; --69 when"0011110" => s1 <="0000000";s2<="1110000";s3<="1111110"; --70 when"0011111" => s1 <="0000000";s2<="1110000";s3<="0110000"; --71 when"0100000" => s1 <="0000000";s2<="1110000";s3<="1101101"; --72 when"0100001" => s1 <="0000000";s2<="1110000";s3<="1111001"; --73 when"0100010" => s1 <="0000000";s2<="1110000";s3<="0110011"; --74 when"0100011" => s1 <="0000000";s2<="1110000";s3<="1011011"; --75 when"0100100" => s1 <="0000000";s2<="1110000";s3<="1011111"; --76 when"0100101" => s1 <="0000000";s2<="1110000";s3<="1110000"; --77 when"0100110" => s1 <="0000000";s2<="1110000";s3<="1111111"; --78 when"0100111" => s1 <="0000000";s2<="1110000";s3<="1111011"; --79 when"0101000" => s1 <="0000000";s2<="1111111";s3<="1111110"; --80 when"0101001" => s1 <="0000000";s2<="1111111";s3<="0110000"; --81 when"0101010" => s1 <="0000000";s2<="1111111";s3<="1101101"; --82 when"0101011" => s1 <="0000000";s2<="1111111";s3<="1111001"; --83 when"0101100" => s1 <="0000000";s2<="1111111";s3<="0110011"; --84 when"0101101" => s1 <="0000000";s2<="1111111";s3<="1011011"; --85 when"0101110" => s1 <="0000000";s2<="1111111";s3<="1011111"; --86 when"0101111" => s1 <="0000000";s2<="1111111";s3<="1110000"; --87 when"0110000" => s1 <="0000000";s2<="1111111";s3<="1111111"; --88 when"0110001" => s1 <="0000000";s2<="1111111";s3<="1111011"; --89 when"0110010" => s1 <="0000000";s2<="1111011";s3<="1111110"; --90 when"0110011" => s1 <="0000000";s2<="1111011";s3<="0110000"; --91 when"0110100" => s1 <="0000000";s2<="1111011";s3<="1101101"; --92 when"0110101" => s1 <="0000000";s2<="1111011";s3<="1111001"; --93 when"0110110" => s1 <="0000000";s2<="1111011";s3<="0110011"; --94 when"0110111" => s1 <="0000000";s2<="1111011";s3<="1011011"; --95 when"0111000" => s1 <="0000000";s2<="1111011";s3<="1011111"; --96 when"0111001" => s1 <="0000000";s2<="1111011";s3<="1110000"; --97 when"0111010" => s1 <="0000000";s2<="1111011";s3<="1111111"; --98 when"0111011" => s1 <="0000000";s2<="1111011";s3<="1111011"; --99 when"0111100" => s1 <="0110000";s2<="1111110";s3<="1111110"; --100 when"0111101" => s1 <="0110000";s2<="1111110";s3<="0110000"; --101 when"0111110" => s1 <="0110000";s2<="1111110";s3<="1101101"; --102 when"0111111" => s1 <="0110000";s2<="1111110";s3<="1111001"; --103 when"1000000" => s1 <="0110000";s2<="1111110";s3<="0110011"; --104 when"1000001" => s1 <="0110000";s2<="1111110";s3<="1011011"; --105when"1000010" => s1 <="0110000";s2<="1111110";s3<="1011111"; --106when"1000011" => s1 <="0110000";s2<="1111110";s3<="1110000"; --107when"1000100" => s1 <="0110000";s2<="1111110";s3<="1111111"; --108when"1000101" => s1 <="0110000";s2<="1111110";s3<="1111011"; --109when"1000110" => s1 <="0110000";s2<="0110000";s3<="1111110"; --110when"1000111" => s1 <="0110000";s2<="0110000";s3<="0110000"; --111when"1001000" => s1 <="0110000";s2<="0110000";s3<="1101101"; --112when"1001001" => s1 <="0110000";s2<="0110000";s3<="1111001"; --113when"1001010" => s1 <="0110000";s2<="0110000";s3<="0110011"; --114when"1001011" => s1 <="0110000";s2<="0110000";s3<="1011011"; --115when"1001100" => s1 <="0110000";s2<="0110000";s3<="1011111"; --116when"1001101" => s1 <="0110000";s2<="0110000";s3<="1110000"; --117when"1001110" => s1 <="0110000";s2<="0110000";s3<="1111111"; --118when"1001111" => s1 <="0110000";s2<="0110000";s3<="1111011"; --119when"1010000" => s1 <="0110000";s2<="1101101";s3<="1111110"; --120 when others => s1 <="0000000";s2<="0000000";s3<="0000000"; --nullend case;case J iswhen"001" => j1 <="0110000"; j2 <="0110011";--1/4when"010" => j1 <="1101101"; j2 <="0110011";--2/4when"011" => j1 <="1111001"; j2 <="0110011";--3/4when"100" => j1 <="0110011"; j2 <="0110011";--4/4when"101" => j1 <="1111001"; j2 <="1111111";--3/8when"110" => j1 <="1011111"; j2 <="1111111";--6/8when others=>j1 <="0000000"; j2 <="0000000";--nullend case;case temp iswhen "0000" => b <=j1; --"1111110"; --number0when "0001" => b <=j2; --"0110000"; -- 1when "0010" => b <="0000000"; --"1101101"; -- 2when "0011" => b <=s1; --"1111001"; -- 3when "0100" => b <=s2; --"0110011"; -- 4when "0101" => b <=s3; --"1011011"; -- 5when others => b <="0000000";end case;elseb<="0000000";end if;end process;--------shumaguan number--------process(temp)beginif(clear='1')thencase temp iswhen "0000"=>cat<="111110";when "0001"=>cat<="111101";when "0010"=>cat<="111011";when "0011"=>cat<="110111";when "0100"=>cat<="101111";when "0101"=>cat<="011111";when others=>cat<="111111";end case;elsecat<="111111";end if;end process;end a;节奏类型计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity pace isport(sw,clear :in std_logic;J:out std_logic_vector(2 downto 0));end pace;architecture a of pace issignal J_tmp:std_logic_vector(2 downto 0);beginprocess(sw)beginif clear='0'thenJ_tmp<="001";elseif(sw'event and sw='1')then if J_tmp="110" thenJ_tmp<="001";elseJ_tmp<=J_tmp+1;end if;end if;end if;end process;J<=J_tmp;end a;Led灯library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity Led isport(speed,clear:in std_logic;J :in std_logic_vector(2 downto 0);V1,V2,V3:out std_logic);--LEDsend Led;architecture a of Led issignal s:integer range 0 to 23; --6/8 beginprocess(speed)beginif clear='0' thenV1<='0';V2<='0';V3<='0';elsif (speed'event and speed='1')then case J iswhen "001"=> --1/4 Scase s iswhen 0|1 =>V1<='1';V2<='0';V3<='0';when others=> V1<='0';V2<='0';V3<='0'; end case;if s>=3 thens<=0;elses<=s+1;end if;when "010"=>--2/4 S-Wcase s iswhen 0|1 =>V1<='1';V2<='0';V3<='0';when 4|5 => V1<='0';V2<='0';V3<='1';when others=> V1<='0';V2<='0';V3<='0';end case;if s>=8 thens<=0;elses<=s+1;end if;when "011"=>--3/4 S-W-Wcase s iswhen 0|1 =>V1<='1';V2<='0';V3<='0';when 4|5|8|9 => V1<='0';V2<='0';V3<='1'; when others=> V1<='0';V2<='0';V3<='0';end case;if s>=12 thens<=0;elses<=s+1;end if;when "100"=>--4/4 S-W-RS-Wcase s iswhen 0|1=> V1<='1';V2<='0';V3<='0';when 4|5|12|13=> V1<='0';V2<='0';V3<='1'; when 8|9=> V1<='0';V2<='1';V3<='0';when others=> V1<='0';V2<='0';V3<='0';end case;if s>=16 thens<=0;elses<=s+1;end if;when "101"=>--3/8 S-W-Wcase s iswhen 0 =>V1<='1';V2<='0';V3<='0';when 2|4 => V1<='0';V2<='0';V3<='1';when others=>V1<='0';V2<='0';V3<='0';end case;if s>=6 thens<=0;elses<=s+1;end if;when "110"=>--6/8 S-W-W RS-W-Wcase s iswhen 0 =>V1<='1';V2<='0';V3<='0';when 2|4|8|10 => V1<='0';V2<='0';V3<='1';when 6=> V1<='0';V2<='1';V3<='0';when others=>V1<='0';V2<='0';V3<='0';end case;if s=12 thens<=0;elses<=s+1;end if;when others=>V1<='0';V2<='0';V3<='0';end case;end if;end process;end a;分频器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fenpinqi isport(clk,clear :in std_logic;S:in std_logic_vector(6 downto 0);--81个速度,7位2进制数计数 speed,ms:out std_logic);end fenpinqi;architecture a of fenpinqi issignal clk_temp:std_logic;signal ms_temp:std_logic;signal s1:integer range 0 to 10000000; --40signal sms:integer range 0 to 12499;process(clk,clear)beginif clear='0' thenclk_temp<='0';ms_temp<='0';elsif clk'event and clk='1'thenif sms=12499 thensms<=0;ms_temp<=not ms_temp; elsesms<=sms+1;end if;case S iswhen "1010000"=>if s1>=3333333 then -- 120p/s s1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "1001111"=>if s1>=3361344 then -- 119p/s s1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "1001110"=>if s1>=3389830 then -- 118p/s s1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "1001101"=>if s1>=3418803 then -- 117p/s s1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "1001100"=>if s1>=3448275 then -- 116p/s s1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "1001011"=>if s1>=3478260 then -- 115p/s s1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "1001010"=>if s1>=3508771 then -- 114p/s s1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "1001001"=>if s1>=3539823 then -- 113p/s s1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "1001000"=>if s1>=3571428 then -- 112p/s s1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "1000111"=>if s1>=3603603 then -- 111p/s s1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "1000110"=>if s1>=3636363 then -- 110p/s s1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "1000101"=>if s1>=3669724 then -- 109p/s s1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "1000100"=>if s1>=3703703 then -- 108p/s s1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "1000011"=>if s1>=3738317 then -- 107p/s s1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "1000010"=>if s1>=3773584 then -- 106p/s s1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "1000001"=>if s1>=3809523 then -- 105p/s s1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "1000000"=>if s1>=3846153 then -- 104p/s s1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "0111111"=>if s1>=3883495 then -- 103p/s s1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "0111110"=>if s1>=3921568 then -- 102p/s s1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "0111101"=>if s1>=3960396 then -- 101p/s s1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "0111100"=>if s1>=4000000 then -- 100p/ss1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "0111011"=>if s1>=4040404 then -- 99p/ss1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "0111010"=>if s1>=4081632 then -- 98p/ss1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "0111001"=>if s1>=4123711 then -- 97p/ss1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "0111000"=>if s1>=4166666 then -- 96p/ss1<=0;clk_temp<=not clk_temp;elses1<=s1+1;end if;when "0110111"=>if s1>=4210526 then -- 95p/ss1<=0;clk_temp<=not clk_temp; elses1<=s1+1;end if;when "0110110"=>if s1>=4255319 then -- 94p/ss1<=0;clk_temp<=not clk_temp; elses1<=s1+1;end if;when "0110101"=>if s1>=4301075 then -- 93p/ss1<=0;clk_temp<=not clk_temp; elses1<=s1+1;end if;when "0110100"=>if s1>=4347826 then -- 92p/ss1<=0;clk_temp<=not clk_temp; elses1<=s1+1;end if;when "0110011"=>if s1>=4395604 then -- 91p/ss1<=0;clk_temp<=not clk_temp; elses1<=s1+1;end if;when "0110010"=>if s1>=4444444 then -- 90p/ss1<=0;clk_temp<=not clk_temp; elses1<=s1+1;end if;when "0110001"=>if s1>=4494382 then -- 89p/ss1<=0;clk_temp<=not clk_temp; elses1<=s1+1;end if;when "0110000"=>if s1>=4545454 then -- 88p/ss1<=0;clk_temp<=not clk_temp; elses1<=s1+1;end if;when "0101111"=>if s1>=4597701 then -- 87p/ss1<=0;clk_temp<=not clk_temp; elses1<=s1+1;end if;when "0101110"=>if s1>=4651162 then -- 86p/ss1<=0;clk_temp<=not clk_temp; elses1<=s1+1;end if;when "0101101"=>if s1>=4705882 then -- 85p/ss1<=0;clk_temp<=not clk_temp; elses1<=s1+1;end if;when "0101100"=>if s1>=4761904 then --84p/ss1<=0;clk_temp<=not clk_temp; elses1<=s1+1;end if;when "0101011"=>if s1>=4819277 then --83p/ss1<=0;clk_temp<=not clk_temp; elses1<=s1+1;end if;when "0101010"=>if s1>=4878048 then --82p/ss1<=0;clk_temp<=not clk_temp; elses1<=s1+1;end if;when "0101001"=>if s1>=4938271 then --81p/ss1<=0;clk_temp<=not clk_temp; elses1<=s1+1;end if;when "0101000"=>if s1>=5000000 then --80p/ss1<=0;clk_temp<=not clk_temp; elses1<=s1+1;end if;when "0100111"=>if s1>=5063291 then --79p/ss1<=0;clk_temp<=not clk_temp; elses1<=s1+1;end if;when "0100110"=>if s1>=5128205 then --78p/ss1<=0;clk_temp<=not clk_temp; elses1<=s1+1;end if;when "0100101"=>if s1>=5194805 then --77p/ss1<=0;clk_temp<=not clk_temp; elses1<=s1+1;end if;when "0100100"=>if s1>=5263157 then --76p/ss1<=0;clk_temp<=not clk_temp;。

电子声光节拍器课程设计

电子声光节拍器课程设计

电子声光节拍器课程设计一、课程目标知识目标:1. 学生能理解电子声光节拍器的基本原理,掌握其组成部分及功能。

2. 学生能运用电子声光节拍器的知识,分析并解决简单的音乐节奏问题。

3. 学生了解电子声光节拍器在现实生活中的应用,提高对科技与音乐结合的认识。

技能目标:1. 学生掌握电子声光节拍器的使用方法,能够独立操作并调整节拍器。

2. 学生通过实际操作,培养动手能力和团队协作能力。

3. 学生能够运用电子声光节拍器进行音乐创作和表演,提高音乐表现力。

情感态度价值观目标:1. 学生培养对音乐节奏的兴趣,激发学习音乐的积极性。

2. 学生在创作和表演过程中,体验团队合作的乐趣,增强自信心和成就感。

3. 学生认识到科技与艺术的结合之美,培养创新意识和审美观念。

本课程针对初中年级学生,结合电子声光节拍器相关知识,注重理论与实践相结合。

通过课程学习,使学生能够掌握电子声光节拍器的使用,提高音乐素养,培养创新精神和团队合作能力,为今后的音乐学习奠定基础。

同时,课程目标具体、可衡量,有助于教学设计和评估的实施。

二、教学内容1. 电子声光节拍器基本原理:介绍电子声光节拍器的工作原理,包括振荡器、分频器、计数器、显示屏等组成部分及其功能。

教材章节:《音乐与科技》第四章第三节“电子节拍器原理”2. 电子声光节拍器的使用方法:讲解如何使用电子声光节拍器,包括开关机、调整节拍、切换节奏模式等操作。

教材章节:《音乐与科技》第四章第四节“电子节拍器的使用”3. 节奏练习与应用:通过实际操作,让学生运用电子声光节拍器进行音乐节奏练习,结合教材中的实例进行创作和表演。

教材章节:《音乐与科技》第四章第五节“电子节拍器在音乐实践中的应用”4. 团队协作与创作:组织学生分组进行音乐创作和表演,鼓励他们运用电子声光节拍器进行创新实践。

教材章节:《音乐与科技》第四章第六节“团队合作与音乐创作”教学内容按照教学大纲安排,分为四个部分,共计8个课时。

电子音乐节拍器o

电子音乐节拍器o

1 前言1.1序言随着科技的迅猛发展和人们生活水平的不断提高,人们已不满足于现有的娱乐条件,对娱乐设备的智能化和自动化提出了更高的要求,人们对于娱乐设施的要求越来越高,要求现在的娱乐设施不仅效果更好而且更方便于使用。

于是电子音乐节拍器被引入娱乐系统,并得到了广泛的应用。

本文所设计的电子音乐节拍器系统,正是在要求娱乐设备日益自动化的背景下,为了满足人们对娱乐设备的要求而设计的。

电子音乐节拍器的任务是根据不同的音乐立刻产生出与之相对应的节拍,以便使音乐根据节奏感。

电子音乐节拍器小巧、精致,便于携带,使用也十分方便,必定适合各种娱乐场和。

1.2目前娱乐设备的概况随着社会的发展,人们对娱乐机构和娱乐设备的要求已不满足于现状,人们希望娱乐设备向自动化、智能花、高科技化发展,希望在娱乐时能得到更好的听觉效果,希望娱乐活动都能有节奏。

人们希望将先进的科学技术与医疗设备相结合,使其能更好的为我们服务。

在我国,娱乐设备的自动化、智能化正处在起步发展阶段,娱乐系统与娱乐设备正在不断完善的过程中,我们需要更多更好的方案和设计以满足社会的需要。

但鉴于娱乐的广泛性,我们的设计必须要求自动、智能,能够更方便的使用,能给更多的人带来快乐。

1.3未来娱乐设备的展望娱乐系统和娱乐设备的自动化、智能化、高科技化已经成为未来发展的方向,我们可以期待它为我们的生活带来方便的一面。

如今,人民生活已从温饱型向小康转变,人们在生活的质量上有了更高的要求,因此人们开始把注意力从如何提高生活质量转移到如何享受生活、如何让生活更精彩上来,作为娱乐场合必不可少的工具,电子音乐节拍器将成为必备的娱乐设备去取代人工方面来说,电子音乐节拍器比人工的敲打节拍更具可靠性和欣赏性,更能准确的体现出音乐创作人的思想。

1.4论文主要工作概述针对娱乐设施的现状,可见娱乐设备的自动化、智能化、高科技化是娱乐设备今后的发展方向。

本课程要设计的电子音乐节拍器,是针对跟上音乐节拍这一要求,依托于接拍控制技术而建立起来的,和音乐接拍的现状相比,它具有便于携带、精致小巧的优点。

简易电子节拍器课程设计

简易电子节拍器课程设计

简易电子节拍器课程设计一、课程目标知识目标:1. 学生能理解电子节拍器的基本原理和工作机制。

2. 学生能掌握简易电子节拍器电路图的识读和元件的使用。

3. 学生能掌握基本的电子元件知识,如电阻、电容、二极管等。

技能目标:1. 学生能够运用所学知识,独立完成简易电子节拍器的搭建。

2. 学生能够通过实验操作,培养动手能力,提高解决问题的能力。

3. 学生能够通过团队协作,培养沟通能力和团队精神。

情感态度价值观目标:1. 学生能够对电子技术产生兴趣,激发学习热情,形成积极的学习态度。

2. 学生能够认识到科技发展对生活的改变,增强创新意识。

3. 学生能够在学习过程中,培养耐心、细致的良好品质,树立正确的价值观。

课程性质:本课程为电子技术实践课程,注重理论知识与实际操作的相结合。

学生特点:六年级学生,具有一定的电子知识基础,好奇心强,喜欢动手操作。

教学要求:结合学生特点,以实践为主,注重培养学生的动手能力和团队协作能力。

通过课程学习,使学生能够将所学知识应用于实际操作中,提高学生的综合素养。

课程目标分解为具体学习成果,以便于教学设计和评估。

二、教学内容1. 电子节拍器原理:介绍电子节拍器的工作原理,包括振荡器、分频器、放大器和扬声器等组成部分。

相关教材章节:第五章第二节《振荡器与分频器》。

2. 电子元件知识:讲解电阻、电容、二极管等基本元件的作用和特性。

相关教材章节:第四章《电子元件》。

3. 电路图识读:教授如何阅读电子节拍器电路图,识别各元件连接关系。

相关教材章节:第六章第一节《电路图的识别和绘制》。

4. 实践操作:指导学生搭建简易电子节拍器,进行实际操作。

相关教材章节:第六章第三节《电子制作实践》。

5. 团队协作:分组进行项目实践,培养学生的团队协作能力。

教学内容安排与进度:第一课时:介绍电子节拍器原理,学习振荡器与分频器相关知识。

第二课时:讲解电子元件知识,学习电路图的识读。

第三课时:分组进行简易电子节拍器的搭建,实践操作。

11电子节拍器课程设计报告

11电子节拍器课程设计报告

电子课程设计报告课程设计名称:数字逻辑课程设计课程设计题目:电子节拍器院系名称:专业:班级:学号:姓名:评分:教师:日期2011 年月日摘要音乐能能够陶冶人的情操,进化人的灵魂,在贝多芬昏暗的世界里音乐奏响了他的第二次生命曲,随着音乐节奏的改变会带给人不一样的享受,而对节奏频率的改变进行检测会更容易让人理解。

本次设计电子节拍器采用了CD4017,555,8050,CD4069芯片等其他元器件组成完整数字电路,具有较好的声光显示功能。

并设有2/4,3/4,4/4,三档开关,它将RC振荡经过非门产生的脉冲通过分频器对指示灯LED亮暗的控制从而观察音律节奏的变化,分频器又输出脉冲经过三极管达到对电阻开关的控制以及改变555的振荡的频率,通过喇叭发出的声音可以明确的辨别节拍发生了改变。

设计实现的频率范围是1000KHZ左右,电源是5v,采用的技术方法还可以用在其他的领域,例如学音乐、学舞蹈、学唱歌节拍器都是初学者的良师益友。

关键字:节拍器频率分频器目录前言 (3)第一章设计内容及要求 (4)第二章系统的组成及工作原理 (5)第三章电路方案设计 (6)设计电路图 (6)第四章实验调试及测试结果与分析 (9)总结 (10)参考文献 (11)电路原理图 (12)元件清单 (13)前言电子节拍器是一种能在各种速度中发出一种稳定的节拍的电动或电子装置,作为一种节奏性乐器使用。

1696年巴黎人E.卢列创制第一架节拍器后,这种装置的种类很多,最普遍使用的是1816年由奥地利人J.N.梅尔策尔发明的节拍器。

梅尔策尔的节拍器外形呈现金字塔形,内部为时钟结构,有齿轮及发条,带动一摆杆,摆杆每次摆动结束时发出尖锐的“滴答”声,这些滴答声的速度可根据刻在摆杆上的游尺度上下移动摆锤,进行调整,其速度每分钟40~210拍。

约在1945年瑞士钟表业生产袖珍节拍器,形如挂表。

匈牙利作曲家G利盖蒂在《交响诗》中用过100个节拍器以不同的速度鸣响。

北邮数字电路综合实验电子节拍器

北邮数字电路综合实验电子节拍器

数字电路与逻辑设计实验(下)实验报告课题名称:数字电路与逻辑设计实验(下)学院:xxxxxx班级:xxxxxx姓名:xxxxxx学号:xxxxxx日期:xxxxxx设计课程的任务要求题目七:电子节拍器的设计与实现设计并实现一个具有声光显示的电子节拍器。

基本要求:1、速度在40~120 次/分钟范围内连续可调,通过2 个按键进行速度调节,一个用来增加,一个用来减少,当长按按键时,按5 次/秒的速度连续增加或减少,用3个数码管显示当前速度。

2、节拍有1/4、2/4、3/4、4/4、3/8、6/8 可选,通过一个按键选择,用2个数码管显示。

3、通过一个按键开始和停止打节拍,开始后按照设置好的节拍和速度打节拍。

4、要求有声音和灯光提示,声音要有强弱区别,灯光可用不同颜色的发光二极管表示强弱。

系统设计1. 设计思路整个电子节拍器可分为大体五个部分:拍速(bpm)产生部分、高低音频生成部分、节拍选择部分、数码管显示部分、声光提示部分。

首先由拍速产生部分生成一个与已选拍速相匹配的时钟和一个代表拍速的6位二进制数,时钟与6位二进制数分别进入节拍选择部分和数码管显示部分;节拍选择部分会根据按键操作生成高电平与低电平比例不同的与拍速同步的信号代表不同的节拍进入声光提示部分,并产生一个代表节拍的3位二进制数进入数码管显示部分;数码管显示部分根据6位二进制数和3位二进制数显示拍速和节拍类型;高低音频生成器生成两种音频分别代表强音与弱音,强音与弱音时钟均进入声光提示部分;声光提示部分根据由节拍选择部分发来的信号与强弱音时钟发出相应的提示声与灯光。

2.数码管显示部分节拍选择部分拍速产生部分声光提示部分高低音频生成部分总体框图3. 分块设计拍速产生器:将6位二进制数的十进制初始定义为40,对加减按键进行计时,计时功能通过一个经过分频的时钟来实现,短加减即改变1,长按即每秒改变5,最后通过一个检测来判断改变后的数值是否在40-120的区间内,若低于40则以40计,高于120以120计,并输出这个6位二进制数;通过计算将6位二进制数计算为相应的分频比并输出这一分频后的时钟(由于节拍器要求八分音符的节拍要求产生的时钟频率为对应拍速频率的二倍)。

集成电路EDA技术课程设计——电子节拍器的设计

集成电路EDA技术课程设计——电子节拍器的设计

EDA与VHDL语言课程设计电子节拍器的设计院系:班级:学号:姓名:电子节拍器的设计节拍器在学习音乐中起着重要作用。

主要有:1、确定乐曲的速度,有的曲子要求用某一速度进行练习,通过节拍器可以找到该速度;2、帮助对于节奏感较差的学生,改善拖拍、抢拍、节奏不稳等现象。

该节拍器虽然功能有限,限制了其实用性,但其设计及制作过程的意义却是极其重要的。

通过节拍器的制作,不仅熟悉了节拍器的设计及制作过程、培养了我对电子的兴趣,还将电子技术基础理论与实际操作有机地联系起来,加深了对所学理论课程的理解。

同时,还提高了实际操作能力、独立分析和解决问题的能力及创新能力,养成了严谨细致的工作作风和态度。

一、设计要求要求本节拍器具有声光显示功能:设有2/4,3/4,4/4三档节拍转换开关。

音响有强弱之分,节拍速度连续可调,有速度显示功能。

二、系统组成原理示意图如图1所示。

该电子节拍器主要由可变比分频器、恒高音分频器、恒低音分频器、脉冲调制器、节拍产生器和节拍切换开关组成,如附图1。

分频器产生2bpm-512bpm的分频信号,传递给节拍计数器,节拍计数器记录节拍,当不是重音拍时给出轻音,当是重音拍时给出重音。

三、单元描述整体的电路如附图2,外部采用电位器调节节拍频率,电位器分压之后进入ADC,最终传入FPGA,用开关以数字量选择节拍计数2/4、3/4、4/4。

3.1 可变比分频器可变比分频器由外部输入信号,外部ADC输入8位信号,系数0~255,对应分频系数2~512,可变比分频器有外部输入的时钟进行分频,分频后信号作为高低音频分频的基础时钟输入,3.2恒高/低音分频器恒高/低音分频器仅仅只是一个简单的分频器,输出高音和低音两种频率,设输入clk为1MHz(1us),输出高音1KHz,低音500Hz,则高音为1000分频,低音为2000分频,转换成二进制为1111101000和11111010000。

3.3 节拍切换开关节拍切换开关类似于2fsk调制,两个频率输入,通过另一个输入高低电平判断输出哪个频率,原理简单便于编写。

电子节拍器课设报告

电子节拍器课设报告

电子课程设计报告题目名称:姓名:专业:班级学号:同组人:指导教师:南昌航空大学科技学院2011年月日摘要电子节拍器是一种新颖的节拍器,它具有应用范围广、节拍可调,声音悦耳、成本低、容易自制、调试简单等优点,是一种能在各种速度中发出一种稳定的节拍的电动或电子装置,作为一种节奏性乐器使用。

本次的设计课题为“设计一电子节拍器,要求节拍器具有声光显示功能:设有2/4,3/4,4/4三档节拍转换开关,音响有强弱之分。

节拍速度连续可调。

”脉冲产生环节产生脉冲信号,然后输入到脉冲分配环节,脉冲分配环节按照所规定节拍规律分配脉冲信号的输出,然后由蜂鸣器发声产生节拍声音,发光二极管发出光显示,达到声光同步。

通过这次课程设计,使作者明白了电子节拍器的设计及制作过程,对专业基础课程的学习进行了巩固和加深,以及对数字电路的应用有了一个更深的理解,增强了对所学的专业的兴趣。

关键字:脉冲信号,节拍,声光显示,蜂鸣器目录前言 (4)第一章设计内容及要求 (5)1-1 设计要求 (5)1-2 系统组成 (5)第二章系统设计方案选择 (6)第三章系统组成及工作原理 (7)3.1 系统组成 (7)3.2 工作原理 (7)第四章单元电路设计及工作原理 (8)4.1脉冲产生电路 (8)4.2节拍控制电路 (10)4.3声光控制电路 (11)第五章实验、调试及测试结果分析 (14)5-1焊接 (14)5-2调试 (14)5-3 测试结果与分析 (15)结论及收获、体会 (16)参考文献 (17)附录一 (18)附录二 (19)前言《数字电子技术基础》是一门发展迅速、实践性和应用性很强的电子技术专业基础课程。

为了适应现代电子技术飞跃发展的需要,更好的培养21世纪应用型电子技术人才,需要在加强学生基础理论学习的同时,还要加强实验技能的训练。

将理论知识、课题内容的作业、讨论与技能训练相结合,融为一体,课程设计以此为目的使能力培养贯穿于整个教学过程。

电子节拍器设计范文

电子节拍器设计范文

电子节拍器设计范文电子节拍器,也称为节拍计器或节拍器,是一种电子设备,用于产生特定的节奏和节拍。

它可以用于音乐演奏、舞蹈和其他需要精确节拍的活动。

设计一个电子节拍器需要考虑到以下几个方面:节拍控制、节拍显示、音频输出和电源供应。

首先,节拍控制是电子节拍器的核心功能之一、它负责生成和控制节拍信号。

一般来说,节拍器可以具有多种节拍类型和节拍速度可调节。

为了实现这一点,可以使用一个微控制器或编码器来控制节拍的产生。

微控制器可以编程生成各种不同的节拍类型,例如4/4拍、3/4拍和6/8拍等。

编码器可以用来控制节拍的速度,用户可以通过旋钮或按钮来调节节拍的快慢。

其次,节拍显示是另一个重要的功能。

它可以显示当前的节拍和速度,以便用户能够准确把握节奏。

常见的节拍显示方式有LED灯和数码显示屏。

LED灯可以用红、绿和蓝三种颜色来表示不同的节拍,而数码显示屏可以显示具体的节拍数字和速度。

此外,还可以增加一个辅助显示器,用于显示节拍倒计时、节拍间隔和其他相关信息。

第三,音频输出是电子节拍器必不可少的功能。

它可以将产生的节拍信号转化为可听的声音,使用户能够更直观地感受节拍。

音频输出可以使用内置的扬声器或外部音箱。

此外,还可以提供音量控制和音色选择的功能,以满足不同用户的需求。

最后,电源供应是电子节拍器正常工作所必需的。

可以使用电池或电源适配器来供电。

如果使用电池供电,应设计低功耗电路以延长电池使用寿命。

如果使用电源适配器供电,应考虑到供电电压和电流的需求,以确保电子节拍器能够稳定工作。

综上所述,设计一个电子节拍器需要考虑节拍控制、节拍显示、音频输出和电源供应等方面。

通过合理的设计和选择合适的电子元件,可以制作出功能齐全、稳定可靠的电子节拍器。

同时,为了提高用户体验,还可以增加一些附加功能,例如节拍记忆、节拍录制和节拍播放等。

电子节拍器--潘子仁

电子节拍器--潘子仁

长沙学院数电课程设计说明书题目电子节拍器设计系(部) 电信系专业(班级) 电气02班姓名潘子仁学号2011024215指导教师龙英刘亮陈希起止日期2013.6.16—2013.6.20数字电子技术课程设计任务书(15)系(部):电子与通信工程系专业:电气工程及其自动化指导教师:陈希长沙学院课程设计鉴定表目录目录 (4)前言 (5)一、设计内容及要求 (6)二、系统的组成及工作原理 (6)三、电路方案设计 (6)四、实验调试及测试结果与分析 (9)4.1 调试 (9)4.2 测试结果与分析 (9)总结 (10)参考文献 (11)前言电子节拍器是一种能在各种速度中发出一种稳定的节拍的电动或电子装置,作为一种节奏性乐器使用。

1696年巴黎人E.卢列创制第一架节拍器后,这种装置的种类很多,最普遍使用的是1816年由奥地利人J.N.梅尔策尔发明的节拍器。

梅尔策尔的节拍器外形呈现金字塔形,内部为时钟结构,有齿轮及发条,带动一摆杆,摆杆每次摆动结束时发出尖锐的“滴答”声,这些滴答声的速度可根据刻在摆杆上的游尺度上下移动摆锤,进行调整,其速度每分钟40~210拍。

约在1945年瑞士钟表业生产袖珍节拍器,形如挂表。

匈牙利作曲家G利盖蒂在《交响诗》中用过100个节拍器以不同的速度鸣响。

节拍器最早时期是机械式的利用的是机械发车节拍,随着科学技术的发展现今的节拍器都是电子式的,现代半导体和集成电路底节拍器不但功能强性能好而且还小巧灵便,携带起来很方便。

在不久的将来还会出现只能化的电子节拍器。

电子节拍器对初学者来说是最好的指导老师,是钢琴学习者的铺助工具,合理地运用它,可使学琴者克服练习中的障碍,清楚每首乐曲所需的基本速度,并且对初级学琴者建立一定的心理节奏感,养成良好的节拍习惯具有积极的帮助作用,同时也起到速度的参照作用、纠正速度的作用。

一、设计内容及要求【基本要求】要求本节拍器具有声光显示功能:设有2/4,3/4,4/4三档节拍转换开关,音响有强弱之分。

电子节拍器的设计与实现

电子节拍器的设计与实现

电子节拍器的设计与实现四川信息职业技术学院毕业设计说明书(论文)设计(论文)题目:电子节拍器的设计与实现专业: 通信技术班级: 通技 06-2学号: 0620066姓名: 赵兵指导教师: 弥锐谭望春二OO八年十二月三十日四川信息职业技术学院毕业设计(论文)任务书教目录摘要 (1)第1章绪论 (2)第2章方案设计 (3)第3章单元电路的设计 (7) (7) (7)73.1.3 555定时器 (8)8 (10)10 (11) (12) (13) (14)第4章总体电路与电路检测 (15) (15) (16)4.3 电路工作的确认 (16)总结 (17)致谢 (18)参考文献 (19)附录PCB板底图 (20)摘要随着当今社会电子产品的飞速发展,电子产品也日新月异,许多高科技产品也慢慢介入了乐器市场,电子节拍器也步入市场,特别是在一些娱乐场所中,节拍器可让人们感受到音乐的美妙,对一些音乐爱好者来说也很重要,可以跟随节拍来更好的学习音乐知识。

本电路是利用RC环形振荡器、单稳多谐振荡、OTL放大扬声器电路设计一个能在1分钟内可在40~208次范围内快速调节发出节奏音乐的电子节拍器。

论文主要介绍了电子节拍器的选择方案和单元电路的设计以及电路的检测和确认。

关键词RC振荡器;单稳态多谐振荡器;OTL放大电路第1章绪论随着时代的进步,电子产品也日新月异,许多高科技产品也慢慢介入了乐器市场,节拍器现在几乎已经成为了初学者必备的学习工具,他的基本功能顾名思义就是帮助新手们树立并培养良好的节奏感,事实上今天的节拍器已经不只是这几点了他还有电子调音、节奏分类等功能尤其是电子调音。

产生音乐节拍的装置叫做节拍器。

电子节拍器具有强烈的节奏感,在娱乐场所里不时可以听到电子节拍器发出的有节奏的声音。

电子节拍器是一种能在各种频率中发出一种稳定的节拍的电子装置,作为一种节奏性乐器使用。

1696年巴黎人E-卢列创制第一架节拍器后,这种装置的种类就在不断更新,最普遍使用的是1816年由奥地利人J-N-梅尔策尔发明的节拍器。

电子节拍器电路原理图

电子节拍器电路原理图

电子节拍器电路原理图节拍器是非常重要的工具,如果你学习音乐的演奏。

有机械节拍器的装置,在过去,但今天,电子节拍器,更受欢迎,因为它可以很简单,紧凑型/小型,可靠,而且也有最有趣的特点:价格便宜。

这里是电子节拍器原理的一个例子:零件:C1的1 uF 63V涤纶电容器C2 10nF的63V涤纶电容器C3 47 UF 25V电解电容R1 10K 1/2W微调金属陶瓷R2的10K 1/4W电阻R3的330K 1/4W电阻R4 50K 1/2W微调金属陶瓷R5的100K 1/4W电阻R6,R7 1K 1/4W电阻P1的线性电位器100KSPST开关SW1(与P1伙同)SPK 8欧姆40毫米。

喇叭B1 12V电池(MN21,GP23A或VR22型)IC1选用NE555通用定时器ICQ1,Q2,BC560 45V百毫安低噪声高增益PNP晶体管第三ZTX753 100V 2A PNP晶体管Q1和Q2的周围建一个可变的电流源,提供的线性度,可直接映射到电位器的位置。

晶体管Q3放大信号,得到响亮的点击声音,类似发条的节拍器。

为了获得更多的输出功率和更紧凑的封装,12V微型电池使用。

不要担心,如果你不能得到的电池,因为它的作品也为9V 电池。

充分旋转对R2的P1,然后设置R1获得每分钟40次(与另一节拍器)。

旋转完全对R3的P1,然后设置R4获得每分钟208次。

最后,标志着整个规模与 ??共同节拍器步骤如下:40 - 42 - 44 - 46 - 48 - 50 - 52 - 54 - 58 - 60 - 63 - 66 - 69 - 72 - 76 - 80 - 84 - 88 - 92 - 96 - 100 - 104 - 108 - 112 - 116 - 120 - 126 - 132 - 138 - 144 - 152 - 160 - 168 - 176 - 184 - 192 - 200 - 208。

基于单片机的电子节拍器的设计和制作

基于单片机的电子节拍器的设计和制作

毕业设计(论文)文献综述(包括国内外现状、研究方向、进展情况、存在问题、参考依据等)基于单片机的电子节拍器的设计和制作1 节拍器的诞生中世纪时期, 大多数著名作曲家的作品都以出色的舞曲而命名,此趋势并非因为该作品具有那舞曲的特色, 而是因为作曲家要依靠该舞曲的节奏速度谱出自己喜爱的乐章。

但这些乐章的节奏究竟有多快或多慢, 则没有明确的定义。

任何一位演奏者只能凭自己的感觉或喜好, 随心所欲地去演奏乐章。

故此, 于世纪末, 一些法国音乐家和技术专家积极寻求各种方法去制定间距、速度和节奏, 好让音乐家弹奏乐曲的节奏与作曲家所编写的一致,于是便出现了节拍。

节拍是塑造音乐形象的基本表现手法,节拍器也慢慢介入了乐器市场,现在几乎已经成为了初学者必备的学习工具,他的基本功能顾名思义就是帮助新手们树立并培养良好的节奏感,用强弱关系来组织音乐,使音值相同的重音与非重音有规律的循环重复,从而使音乐练习达到事半功倍的效果。

2国内外有关节拍器的设计在国内外有关节拍器的设计中,大多都采用了单片机。

单片机以其高性能,小体积,廉价格的特点,在自动控制领域有十分广泛的应用。

日常生活所见的机械节拍器的节拍声音单调,而且有调节不便和价格较高的特点。

而采用单片机控制的电子音乐发生器有其独特的优点:电路设计简单、系统体积小、成本低;音乐中的音调和节拍准确;同时还能根据用户的要求存放其喜欢的歌曲,有较大的灵活性和趣味性,能很好的实现与使用者的交流。

2.1 基于Atmegal6的LED电子节拍器的设计基于一款性价比高的Atmegal6单片机,结合电气类组合电路和时序电路的基础知识,完成一种简单、易于制作、成本低廉的节拍器并且适合广大音乐爱好者DIY 的电路设计。

LED电子节拍器主要包括方波产生和数字显示电路、节拍控制电路、声音电路和光电路。

该节拍器具有0~7种不同的节拍.如嘀嘀嘀,滴答滴答,嘀嗒嗒嘀嗒嗒等。

拍速可从40—160拍/min的几种常用节拍进行调节。

电子节拍器课程设计解析

电子节拍器课程设计解析

课程设计报告课程设计名称:电子课程设计课程设计题目:电子节拍器学院名称:信息工程学院专业:通信工程班级: 130422班学号:姓名:评分:教师:2015年9月 25日数字电路 课程设计任务书 15 - 16 学年 第 1学期 第 2 周- 3 周注:1、此表一组一表二份,课程设计小组组长一份;任课教师授课时自带一份备查。

2、课程设计结束后与“课程设计小结”、“学生成绩单”一并交院教务存档。

摘要当今乐器的发展变化越来越快,歌曲的演奏离不开乐器,而电子节拍器作为一种节拍可调、声音悦耳、成本低、容易自制、调试简单的元器件而被被广泛应用于各种电子乐器当中。

本次课题设计的目的是:设计一电子节拍器,要求节拍器具有声光显示功能:设有2/4,3/4,4/4三档节拍转换开关,音响有强弱之分,节拍速度连续可调。

本次设计以NE555芯片和CD4017芯片组成振荡电路,驱动发光二极管发光和蜂鸣器发出声音,达到声音和发光同步。

CD4017组成的节拍选择控制电路。

当开关与不同的管脚接通时,就会有不同的节拍。

该节拍器的设计采用模块化结构,有3个模块即节拍脉冲模块、节拍选择控制模块、以及声光同步显示模块组成。

此电路是以NE555及CD4017构成振荡器产生节拍脉冲,并将脉冲输入到CD4017构成的节拍选择控制开关,此电路是以NE555构成自激振荡器产生脉冲,并将脉冲输入到蜂鸣器产生节拍的声音,及驱动发光二级管,达到声光同步显示效果。

在三周的时间内,通过作者与同组人的共同努力和在指导老师的帮助下,借助学校图书馆,网络等各种信息平台收集资料,经过分析,提炼,转变成自己的研究成果。

通过本次设计,使作者明白了一般电子产品的设计及制作过程,加深了对专业基础课的认识,以及对所学课程的实际应用有了一个更深的理解,促进了对所学专业的热爱。

关键字:节拍器,脉冲信号,声光显示,蜂鸣器目录前言 (1)第一章设计要求 (2)1.1设计基本要求 (2)第二章设计方案的选择 (3)2.1方案设计 (3)2.2方案比较 (4)第三章系统的设计及仿真 (5)3.1脉冲产生电路 (7)3.2节拍信号产生电路 (7)3.3声光显示电路 (10)第四章实验、调试及结果分析 (13)4.1试验及调试 (10)4.2测试结果与分析 (10)第五章收获与体会 (13)参考文献 (17)附录一元件清单 (18)附录二总设计图 (19)附录三实物图 (20)附录四P C B制图 (21)前言现代音乐的发展以及音乐对人们生活的重要影响,使得乐器发展变得更加迅猛,人们对乐器的要求越来越高。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北京邮电大学数字系统与逻辑设计实验报告电子节拍器的设计与实现学院 : 电子工程学院班级 : 2013211207学号: 2013210999姓名: 刘炜伦日期 : 2015-11-08电子节拍器的设计与实现一.设计课题的任务要求设计并实现一个具有声光显示的电子节拍器。

基本要求:1、速度在 40~120 次/分钟范围内连续可调,通过 2 个按键进行速度调节,一个用来增加,一个用来减少,当长按按键时,按 5 次/秒的速度连续增加或减少,用 3 个数码管显示当前速度。

2、节拍有 1/4、2/4、3/4、4/4、3/8、6/8 可选,通过一个按键选择,用 2个数码管显示。

3、通过一个按键开始和停止打节拍,开始后按照设置好的节拍和速度打节拍。

4、要求有声音和灯光提示,声音要有强弱区别,灯光可用不同颜色的发光二极管表示强弱。

提高要求:1、通过一个按键选择时值(节奏类型),并在用点阵显示,如下图。

2、实现在无节奏型的情况下,用点阵计时,点阵的显示从0到9,时间间隔为一秒,从而帮助使用者学习乐理知识。

二.系统设计(设计思路,总体框图,分块设计)1.设计思路程序分为输入模块,分频模块,中央控制模块和显示模块四大模块,其中显示模块又可细分为数码管显示,点阵显示,LED灯亮灯显示和蜂鸣器发声四个部分。

输入有reset(复位键),st(开关键),tn(调速键),tk(调节拍键),tj(调节奏键)五个键。

利用三个数码管显示速率,两个数码管显示节拍型,使用点阵显示节奏型,无节奏时点阵显示0到9的计时(时间间隔为1秒)。

对于开关,速率,节拍,节奏的调节,使用5HZ的时钟信号进行防抖和控制调节的速度。

利用取余函数将节拍器的速率的个十百位数字分别提取出来,并通过扫描显示将节拍器的速率和节拍型显示出来。

LED灯和点阵的信号依据节奏和节拍型确定,先考虑节奏型,分列出各个节奏型的信号,如果无节奏型再考虑节拍型,确定节拍型的信号。

最后蜂鸣器的信号由红灯信号与250HZ高频相乘所得信号和绿灯信号与500HZ高频相乘所得信号共同合成。

2.总体框图(1)系统顶层框图(2)系统对外接口图(3)逻辑划分方框图(4)逻辑流程图(由于状态先由有无节奏型确定,无节奏型时再看节拍型,为了使图形简洁美观,避免画图时线条过多和交叉,此处将逻辑流程图分为两个部分,当从有节奏型转换为无节奏型时,状态转入先前的节拍型,而非默认的40HZ的1/4拍)(5)MDS图节奏间的转移(其中0为无节奏,转移条件为节奏选择键输入tj):节拍间的转移(转移条件为节拍选择键输入tk):3.分块设计(1)分频模块:分频模块可以细分为两个部分,一个是与速率,节拍无关的普通分频,一个是与其有关的分频分频比的计算:待得信号单位时长 / 基础信号单位时长第一部分:需要分出的信号有clk500(用于蜂鸣器高音合成)clk250(用于蜂鸣器低音合成)clk5(用于调速,选节拍,选节奏的防抖和控制其变化速度)clk1(用于无节奏时控制计时器在0到9间转换)第二部分:需要分出的信号有clk8(八分音符信号)clk4(四分音符信号)clk2(二分音符信号)(2)调速,选拍,选节奏模块对于速率,拍子和节奏的选择,各使用·一个按钮输入,通过循环实现重复选择。

由于按钮输入时在上升沿有毛刺出现,为了防抖,引入5HZ的信号clk5,由clk5的上升沿决定是否变化。

同时,clk5的引入控制了变化的速度。

(3)数码管显示模块此模块共用到五个数码管,其中三个显示速率,两个显示节拍类型,通过引入clk250实现数码管的扫描显示。

节拍的显示可以通过k的值(6种情况)直接使用case语句分类输出。

而速率的显示由于速率从每分钟40次到每分钟120次,中间共有81种情况,不可能直接依据其值n进行分类,写出每一种情况对应的数码管扫描输出。

所以需要提前把速率的每一个数位上的数字提取出来,便于输出。

提取每一位的数字可以利用取余函数rem, 具体如下:c3<=n rem 10;c2<=((n-c3) rem 100)/10;c1<=(n-c2*10-c3)/100;(4)点阵显示模块实验室提供的点阵是8乘8的行扫描点阵。

点阵模块在此要实现两个功能能,一是在无节奏普通节拍的情况下实现从0到9的时钟计时(两个数字时间间隔为1秒),第二则是在有节奏型的情况下,将节奏型的符号显示在点阵上。

为了实现此两个功能,要引入一个变量p来进行区分:当无节奏型(j=1)时,p在0到9间转换,实现计时功能;当有节奏型(j!=1)时,p=j+8,用于显示节奏符号的情况。

实际上,点阵显示共有15种状态(10+5)。

(5)LED灯显示模块LED灯采用两个不同颜色的灯输出,一红一黄,分别代表强弱拍。

根据有无节奏类型和节拍类型,可先确定一个基本的信号,以下以3/4拍为例,则基本信号为四分音符信号clk4,再通过引入计数变量y1,y1在clk4的上升沿出现时发生变化,且在0到2间变化,若y1对3取余为0,则将基本信号赋值给红灯输出,否则将信号赋值给绿灯输出,从而实现信号的抽取(注意将此处得到的信号与普通分频得到的信号加以区分,占空比不为50%)。

其余的节奏和节拍均可用类似的方法抽取出LED红绿灯的信号。

(6)蜂鸣器发声模块蜂鸣器的声是实现在LED灯显示的基础上的,由于LED的红灯亮时,蜂鸣器发出声调较低的响声(强音),当LED绿灯亮时发出声调较高的响声(弱音),蜂鸣器和LED间有明显的同步关系,则蜂鸣器的具体实现为:将LED红灯信号与次高频信号相乘,将LED绿灯信号与高频信号相乘,再将两者相加,赋值给蜂鸣器。

实现语句可写为:clkf<=(clkr and clk250) or (clkg and clk500)三.仿真波形及波形分析1.分频波形分析此处的分频为与速率,节拍,节奏无关的分频。

从图中我们可以看出clk250是clk500的2分频,而clk5是clk250的50分频。

在仿真的后半部分,当reset输入为1时,clk250不再随clk500上升沿的到来而发生翻转,因为reset为1时,程序中令每一个用于记录翻转的信号temp为0,无法到达发生翻转的数值。

2.速率选择,节拍选择,节奏选择部分仿真对n(速率)的分析:从图中可以看出,n的初始值为40,输入信号tn为0时,n值保持不变;当输入信号tn为1且clk5的上升沿到来时,n的值加1。

当复位键信号reset为1时,n的值回复到默认设定值40。

从后半部分可以看出,当tn输入为1而clk5的时钟上升沿没到来的话,n的值不变。

对k(节拍)的分析:从图中可以看出,k的初始值为1,输入信号tk为0时,k值保持不变;当输入信号tk为1且clk5的上升沿到来时,k的值加1。

K的值在1到6间循环变换。

当复位键信号reset为1时,k的值回复到默认设定值1。

从后半部分可以看出,当tk输入为1而clk5的时钟上升沿没到来的话,k的值不变。

对j(节奏)的分析:从图中可以看出,j的初始值为1,输入信号tj为0时,j值保持不变;当输入信号tj为1且clk5的上升沿到来时,j的值加1。

j的值在1到6间循环变换。

当复位键信号reset为1时,j的值回复到默认设定值1。

从后半部分可以看出,当tj输入为1而clk5的时钟上升沿没到来的话,j的值不变。

总体分析:由于clk5信号的引入,按键输入实现的防抖的效果。

同时,clk5控制了速率,节拍,节奏的变化速度,当clk5取值5HZ的信号时,能够实现每秒变化5次的效果。

3.数码管显示部分仿真对c(数码管)的分析;c控制6个数码管的亮灭,且为低电平有效。

从图中可以看出,当clk250的上升沿到来的时候,c的值发生改变。

在此程序中,共使用5个数码管,当一个clk250的上升沿到来时,换一个数码管亮,数码管亮的次序为5->4->3->1->0,然后再循环。

由于每个数码管闪烁的频率为50hz,所以人眼无法分辨出来,实现每个管的稳定显示。

对单个数码管的分析:b控制单个数码管7个管脚的亮灭,且为高电平有效。

从图中可以看到:当n=40,k=1的时候,b表示的数字依次为0->4->0->1->4,表示速率为40hz每分钟和节拍型为1/4拍;当n=41,k=2的时候,b表示的数字依次为0->4->1->2->4,表示表示速率为41hz每分钟和节拍型为2/4拍。

综合分析:当复位键reset输入信号为1时,用于扫描计数的q_tem值一直为0,所以c中一直是数码管5亮,亮的时间延长。

Reset值对b的输出值无影响。

4.红绿灯输出,蜂鸣器输出部分仿真总体分析:从图中开始部分可以看出,当开关键输入为1且clk5的上升沿到来时,开关信号才输入有效,所以第二次开关键输入为1而无clk1的上升沿到来时,红绿灯蜂鸣器均有输出,不发生改变;末尾处开关输入为1且有上升沿,从“开”的状态转换为“关”状态,输出均为0。

红绿灯输出信号分析:开始时,k=1,p=1或p=5,由于p<10,为普通节拍型1/4拍,所以红灯信号等于时钟信号clk4;然后,k=2,p=0,由于p<10,为普通节拍型2/4拍,红绿信号单位置1时长与clk4的单位置1时长相等,且交替置1,表示红绿灯每次亮灯时长与clk4的单位高电平时长一致,且红绿灯交替闪烁;然后,k=5,p=1,由于p<10,为普通节拍型3/8拍,红绿信号单位置1时长与clk8的单位置1时长相等,且置1顺序为红绿绿,表示红绿灯每次亮灯时长与clk8的单位高电平时长一致,且红绿灯发光顺序为红绿绿;最后,k=1,p=13,由于p>10,为节奏型。

从图中可以看到,红灯信号的单位置1时长与clk4单位高电平时长一致,绿灯信号单位置1时长与clk8单位高电平时长一致,且置1的顺序为红绿绿。

则此时表示的节奏型为四分音符时长强拍八分音符时长弱拍八分音符时长弱拍,即“红~空空绿空绿空”“强~空空弱空弱空”的节奏型。

蜂鸣器分析:蜂鸣器的信号由红灯信号与clk250相乘加上绿灯信号与clk250相乘所得。

所以从图上可以看到,当红灯信号为1时,蜂鸣器等于信号clk250,当绿灯信号为1时,蜂鸣器等于信号clk500,否则蜂鸣器信号为0。

四.源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jiepaiqi isport(clk,st,tn,tk,tj,reset:in std_logic;b:out std_logic_vector(6 downto 0);c:out std_logic_vector(5 downto 0);r_out,g_out,f_out:out std_logic;row:out std_logic_vector(7 downto 0);list:out std_logic_vector(7 downto 0) );end jiepaiqi;architecture a of jiepaiqi issignal n:integer range 40 to 120;signal k:integer range 1 to 6;signal clk500,clk250, clk5, clk1,clk8,clk4,clk2,clk48,clkr,clkg,clkf,clkst:std_logic; signal tem500:integer range 0 to 49999;signal tem5:integer range 0 to 24;signal tem1:integer range 0 to 124;signal q_tem:integer range 0 to 4;signal c1:integer range 0 to 1;signal c2,c3:integer range 0 to 9;signal tem8:integer range 0 to 18749999;signal k1:integer range 0 to 7;signal y1:integer range 0 to 5;signal y2:integer range 0 to 5;signal y3:integer range 0 to 3;signal y4:integer range 0 to 2;signal r,g,f:std_logic;signal j:integer range 1 to 6;signal p:integer range 0 to 14;signal p_tem:integer range 0 to 5;beginp1:process(reset,clk) --clk分频,得500HZ信号clk500beginif reset='1'then tem500<=0;elsif (clk'event and clk='1')thenif tem500=49999 then tem500<=0;clk500<=not clk500;else tem500<=tem500+1;end if;end if;end process p1;p2:process(reset,clk500) --clk500分频,得250HZ信号clk250 beginif reset='1'then clk250<='0';elsif (clk500'event and clk500='1')thenclk250<=not clk250;end if;end process p2;p3:process(reset,clk250) --clk250分频,得5HZ信号clk5beginif reset='1'then tem5<=0;elsif (clk250'event and clk250='1')thenif tem5=24 then tem5<=0;clk5<=not clk5;else tem5<=tem5+1;end if;end if;end process p3;p4:process(reset,clk250) --clk250分频,得1HZ信号clk1 beginif reset='1'then tem1<=0;elsif (clk250'event and clk250='1')thenif tem1=124 then tem1<=0;clk1<=not clk1;else tem1<=tem1+1;end if;end if;end process p4;p5:process(reset,clk5,tn) --调速率nbeginif reset='1'then n<=40;elsif (tn='1' )then --防抖 if (clk5'event and clk5='1') thenif (n=120) then n<=40;else n<=n+1;end if;end if;end if;end process p5;p6:process(tk,reset,clk5) --调节拍型kbeginif reset='1'then k<=1;elsif (tk='1')then --防抖if (clk5'event and clk5='1') thenif k=6 then k<=1;else k<=k+1;end if;end if;end if;end process p6;p7:process(tj,reset,clk5) --调节奏型j beginif reset='1'then j<=1;elsif (tj='1')then --防抖if (clk5'event and clk5='1') thenif j=6 then j<=1;else j<=j+1;end if;end if;end if;end process p7;p8:process(reset,n,k,clk250) --数码管扫描显示beginif (clk250'event and clk250='1')thenif reset='1'then q_tem<=0;elsif q_tem=4 then q_tem<=0;else q_tem<=q_tem+1;end if;c3<=n rem 10; --提取速率的个十百位数字 c2<=((n-c3) rem 100)/10;c1<=(n-c2*10-c3)/100;case q_tem iswhen 0 =>c<="011111";case c1 iswhen 0 =>b<="1111110";when 1 =>b<="0110000";when others=>b<="0110000";end case;when 1 =>c<="101111";case c2 iswhen 0 =>b<="1111110";when 2 =>b<="1101101";when 3 =>b<="1111001";when 4 =>b<="0110011";when 5 =>b<="1011011";when 6 =>b<="1011111";when 7 =>b<="1110000";when 8 =>b<="1111111";when 9 =>b<="1111011";when others=>b<="0000000"; end case;when 2 => c<="110111";case c3 iswhen 0 =>b<="1111110";when 1 =>b<="0110000";when 2 =>b<="1101101";when 3 =>b<="1111001";when 4 =>b<="0110011";when 5 =>b<="1011011";when 6 =>b<="1011111";when 7 =>b<="1110000";when 8 =>b<="1111111";when 9 =>b<="1111011";when others=>b<="0000000"; end case;when 3 =>c<="111101";case k iswhen 1 =>b<="0110000";when 3 =>b<="1111001";when 4 =>b<="0110011";when 5 =>b<="1111001";when 6 =>b<="1011111";when others=>b<="0000000";end case;when 4 =>c<="111110";case k iswhen 1 =>b<="0110011";when 2 =>b<="0110011";when 3 =>b<="0110011";when 4 =>b<="0110011";when 5 =>b<="1111111";when 6 =>b<="1111111";when others=>b<="0000000";end case;end case;end if;end process p8;p9:process(j,reset,st,clk1,clk250) --点阵显示,此处为行扫描 beginif j=1 thenif( reset='1' or st='1' or p>9) then p<=0;elsif (clk1'event and clk1='1')thenif p=9 then p<=0;else p<=p+1;end if;end if;else p<=j+8;end if;if (clk250'event and clk250='1')then if reset='1'then p_tem<=0;elsif p_tem=5 then p_tem<=0; else p_tem<=p_tem+1;end if;case p_tem iswhen 0 =>row<="10111111"; case p iswhen 0 =>list<="00111100";when 1 =>list<="00100000";when 2 =>list<="00111100";when 3 =>list<="00111100";when 4 =>list<="00100100";when 5 =>list<="00111100";when 6 =>list<="00111100";when 7 =>list<="00111100";when 8 =>list<="00111100";when 9 =>list<="00111100";when 10 =>list<="00010000"; when 11 =>list<="00111100"; when 12 =>list<="00111100"; when 13 =>list<="11111110"; when 14 =>list<="00111100";when others=>list<="00000000"; end case;when 1 =>row<="11011111";case p iswhen 0 =>list<="00100100";when 1 =>list<="00100000";when 2 =>list<="00100000";when 3 =>list<="00100000";when 4 =>list<="00100100";when 5 =>list<="00000100";when 6 =>list<="00000100";when 7 =>list<="00100000";when 8 =>list<="00100100";when 9 =>list<="00100100";when 10 =>list<="00010000";when 11 =>list<="00100100";when 12 =>list<="00100100";when 13 =>list<="10010010";when 14 =>list<="00100100";when others=>list<="00000000"; end case;when 2 =>row<="11101111";case p iswhen 0 =>list<="00100100";when 1 =>list<="00100000";when 2 =>list<="00111100";when 3 =>list<="00111100";when 4 =>list<="00111100";when 5 =>list<="00111100";when 6 =>list<="00111100";when 7 =>list<="00100000";when 8 =>list<="00111100";when 9 =>list<="00111100";when 10 =>list<="00010000";when 11 =>list<="00100100";when 12 =>list<="00111100";when 13 =>list<="11110010";when 14 =>list<="00110100";when others=>list<="00000000"; end case;when 3 =>row<="11110111";case p iswhen 0 =>list<="00100100";when 1 =>list<="00100000";when 2 =>list<="00000100";when 3 =>list<="00100000";when 4 =>list<="00100000";when 5 =>list<="00100000";when 6 =>list<="00100100";when 7 =>list<="00100000";when 8 =>list<="00100100";when 9 =>list<="00100000";when 10 =>list<="00010000";when 11 =>list<="00100100";when 12 =>list<="00100100";when 13 =>list<="10010010";when 14 =>list<="00100100";end case;when 4 =>row<="11111011";case p iswhen 0 =>list<="00111100";when 1 =>list<="00100000";when 2 =>list<="00111100";when 3 =>list<="00111100";when 4 =>list<="00100000";when 5 =>list<="00111100";when 6 =>list<="00111100";when 7 =>list<="00100000";when 8 =>list<="00111100";when 9 =>list<="00111100";when 10 =>list<="00010000";when 11 =>list<="00100100";when 12 =>list<="00100100";when 13 =>list<="10010010";when 14 =>list<="00100100";when others=>list<="00000000"; end case;when 5 =>row<="11111101";case p iswhen 10 =>list<="00011000";when 11 =>list<="00110110";when 12 =>list<="00110110";when 13 =>list<="11011011";when 14 =>list<="00110110";end case;end case;end if;end process p9;p10:process(reset,clk,n) --依据n值,从clk分出8分音符间隔信号clk8 beginif reset='1'then tem8<=0;elsif (clk'event and clk='1')thenif tem8=750000000/n-1 then tem8<=0;clk8<=not clk8;else tem8<=tem8+1;end if;end if;end process p10;p11:process(clk8) --从clk8分出四分音符间隔信号clk4beginif (clk8'event and clk8='1')thenclk4<=not clk4;end if;end process p11;p12:process(clk4) --从clk4分出二分音符间隔信号clk2beginif (clk4'event and clk4='1')thenclk2<=not clk2;end if;end process p12;p13:process(k,clk2,clk4,clk8,reset,st,clk48,p) --红绿灯闪烁输出定值begincase k is --依据节拍型号赋值基本信号clk48,为红绿信号赋值做准备 when 1 =>clk48<=clk4;k1<=1;when 2 =>clk48<=clk4;k1<=2;when 3 =>clk48<=clk4;k1<=3;when 4 =>clk48<=clk4;k1<=4;when 5 =>clk48<=clk8;k1<=3;when 6 =>clk48<=clk8;k1<=6;when others=>clk48<=clk4;k1<=1;end case;if (reset='1' or st='1') then y3<=0;elsif (clk8'event and clk8='1')thenif y3=3 then y3<=0;else y3<=y3+1;end if;end if;if (reset='1' or st='1') then y4<=0;elsif (clk8'event and clk8='1')thenif y4=2 then y4<=0;else y4<=y4+1;end if;end if;if (reset='1' or st='1') then y1<=0;elsif (clk48'event and clk48='1')thenif y1=k1-1 then y1<=0;y2<=y1 rem k1;else y1<=y1+1;y2<=y1 rem k1;end if;end if;case p is --红绿灯信号赋值,10至14为节奏型,其余为基本节拍型(无节奏) when 10 =>clkr<=clk2;clkg<='0';when 11 =>clkr<=clk4;clkg<='0';when 12 =>clkr<=clk8;clkg<='0';when 13 =>if y3<2 then clkr<=clk4;clkg<='0';else clkg<=clk8;clkr<='0';end if;when 14=>if y4<2 then clkr<=clk4;clkg<='0';else clkg<=clk8;clkr<='0';end if;when others=> --节拍型的红绿灯信号赋值(从基本信号clk48抽取) if y2=0 then clkr<=clk48;clkg<='0';else clkg<=clk48;clkr<='0';end if;end case;end process p13;p14:process(st,clk5,clk500,clk250,clkr,clkg) --蜂鸣器输出赋值beginif (st='1')then --开关防抖if (clk5'event and clk5='1')thenclkst<=not clkst;end if;end if;if clkst='1' then clkf<=(clkr and clk250) or (clkg andclk500);f<=clkf;r<=clkr;g<=clkg;else clkf<='0';r<='0';g<='0';end if;end process p14;r_out<=r;g_out<=g;f_out<=clkf; --信号给输出红绿灯及蜂鸣器输出端口赋值end a;五.功能说明及资源利用情况1.功能说明本次实验所写程序完成的基本功能如下:(1)速度在 40~120 次/分钟范围内连续可调,通过1个按键进行速度调节,用来增加速率,当长按按键时,按 5 次/秒的速度连续增加,当速率达到120时循环增加回到40,用 3 个数码管显示当前速度。

相关文档
最新文档