1、电子节拍器的设计与实现电子节拍器的设计与实现 学院: 明光桥北技术学院 班级: 18 姓名: 文熙 学号: 2333 班内序号: 666 1、设计思想 本实验采用自顶向下设计的方法。从整体上考虑系统的功能,划分出不同 的功能模块,然后选用器件实现相应模块,反复改进、反复实践,最终完成系统的设计。在前期,我主要是进行各个模块的测试,分别测试完成之后,再通过顶层文件进行电路的连接,实现全部的设计。2、总体框图(1)系统框图一、故障及问题分析1.当按键按下之后,按下一次会产生多次按下的效果。问题分析与解决:由于抖动的原因,需要加上一个防抖的程序。2. 速度加1加5的时钟计时时间偏小。问题分析与解决:
2、通过实验室多次调试解决。3.播放自制歌曲时无法进行节拍演示。问题分析与解决:case语句需要改进。(由于此歌曲在验收实验前一天晚上才完成没有时间改进。)4.蜂鸣器一开始输入高低电平。问题分析与解决:后来查阅资料和同学沟通发现应该是输入不同频率的方波信号。5.导致数码管显示不正常。问题分析与解决:对数码管扫描频率一开始过大,应该调整为10kHz六、总结和结论好人有好报-造福学弟学妹七、源程序顶层文件library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY jiepaiqi IS PORT ( a
3、dd : 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 : O
4、UT STD_LOGIC_VECTOR(5 DOWNTO 0) );END jiepaiqi;ARCHITECTURE a OF jiepaiqi IS COMPONENT beeper PORT( 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 fenpinqi PORT(clk : IN STD_LOGIC; clear : IN STD_LOG
5、IC; S : IN STD_LOGIC_VECTOR(6 DOWNTO 0); speed : OUT STD_LOGIC; ms : OUT STD_LOGIC );END COMPONENT;COMPONENT led PORT(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 pace PORT(sw : I
6、N STD_LOGIC; clear : IN STD_LOGIC; J : OUT STD_LOGIC_VECTOR(2 DOWNTO 0) );END COMPONENT;COMPONENT smgymq PORT(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
7、0) );END COMPONENT;COMPONENT speeder PORT(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 fenpinqismg PORT(clk : IN STD_LOGIC; clear : IN STD_LOGIC; clkout : OUT STD_LOGIC );END COMPONENT; SIGNAL SW_0 :
8、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;BEGIN led1 = SW_0;led2 = SW_1;led3 clk, clear = clear, state =state, success=succe
9、ss, 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
10、= 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
11、fenpinqismg is port( clk,clear :in std_logic; clkout :out std_logic);end fenpinqismg;architecture a of fenpinqismg is signal temp:integer range 0 to 2499; signal clk_tmp : std_logic;begin process(clk,clear) begin if clear=0then temp=0; clk_tmp=0; else if clkevent and clk=1 then if temp=2499 then tem
12、p=0; clk_tmp= not clk_tmp; else temp=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 is port( add,sub,clear,clk :in std_logic; S:out std_logic_vector(6 downto 0);end speeder;architecture a of sp
13、eeder is signal 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;begin process(clk) begin if(clkevent and clk=1)then -add- if S_temp1010000then -节奏速度小于12
14、0 if(add=0)then time1a=0; time1b=0; elsif (add=1and time1a=2000 and S_temp1001100) then -节奏速度小于115按键1秒速度+5 S_temp=S_temp+5; time1a=0; elsif(add=1and time1b=0)then S_temp=S_temp+1; time1b=time1b+1; elsif(add=1and time1a2000)then time1a0000000then -节奏速度大于40 if(sub=0)then time2a=0; time2b=0; elsif (sub=1and tim
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1