资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
5-2-1 项目六 简易电子琴(1)简易电子琴一、项目要求:设计一个简单的硬件电子琴,当按下某键时发该键对应的音,并显示对应的音名。二、实训目的:学习使用数控分频器设计实用电路。三、硬件要求:主芯片EPF10K10LC84-4。可变时钟源。8位按键开关。两位7段数码管。扬声器。四、相关原理:1音名与频率的关系:音乐的十二平均率规定:每两个八度音(如简谱中的中音1与高音1)之间的频率相差一倍。在两个八度音之间,又可分为十二个半音,每两个半音的频率比为。另外,音名A(简谱中的低音6)的频率为440Hz,音名B到C之间、E到F之间为半音,其余为全音。由此可以计算出简谱中从低音1至高音1之间每个音名的频率,如表所示。简谱中音名与频率的关系音名频率(HZ)音名频率(HZ)音名频率(HZ)低音1 26163 中音1 52325 高音1 104650低音2 29367 中音2 58733 高音2 117466低音3 32963 中音3 65925 高音3 131851低音4 34923 中音4 69846 高音4 139692低音5 39199 中音5 78399 高音5 156798低音6 440 中音6 880 高音6 1760低音7 49388 中音7 98776 高音7 197552表:5由于音阶频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。若基准频率过低,则由于分频系数过小,四舍五入取整后的误差较大。若基准频率过高,虽然误码差变小,但分频结构将变大。实际的设计应综合考虑两方面的因素,在尽量减小频率误差的前提下取合适的基准频率。本例中选取5MHZ的基准频率。若无5MHz的时钟频率,则可以先分频得到4MHz或换一个新的基准频率。实际上,只要各个音名间的相对频率关系不变,C作1与D作1演奏出的音乐昕起来都不会“走调”。图:222系统设计:主系统如图所示,其内部有4个功能模块预制数计数器、初始计数值、二分频器和音名译码电路。当8位发声控制键输入中某一位为高电平时,则对应某一音阶的初始计数值作为获得该音阶的分频预置值将送入预制数计数器;预制数计数器输出相应的频率同时输出对应该音阶简谱的显示数码;该频率经二分频器后送入扬声器,同时在数码管上显示该音名的键码。五、项目内容:1.示例程序顶层文件如图所示。模块DZQS是音阶发生器,当8位发声控制输入DAIN中某一位为高电平时,则对应某一音阶的数值将从端口DOUT输出,作为获得该音阶的分频预置值;同时由CODE输出对应该音阶简谱的显示数码,如5,并由HIGH输出指示音阶高8度显示。图:23 硬件电子琴电路结构模块DZQC中的主要电路是一个数控分频器,它由一个初值可预置的加法计数器构成,当模块DZQC由端口DIN获得一个2进制数后,将以此值为计数器的预置数,对端口CLK输入的频率进行分频,之后由SP向扬声器输出发声。编译适配以上3个示例文件,给出仿真波形,最后进行下载和硬件测试实验。建议用8位拨码开关作为DA7.0输入信号控制各音阶;选择2个数码管分别显示显示琴音简谱码和高8度。建议CLK接5MHz时钟,CP接1KHz时钟,SP接扬声器输入端,DA7.0接8位拨码开关,SEL2.0和SEG6.0分别接7段码对应的SEL2.0和GA。注:示例程序在文件夹EXAMPLE13中,DZQ.GDF文件是示例程序的顶层文件。参考程序1:DZQC.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DZQC ISPORT (CLK : IN STD_LOGIC;DIN : IN INTEGER RANGE 0 TO 16#1FFF#;SP : OUT STD_LOGIC );END;ARCHITECTURE A OF DZQC ISSIGNAL SPK : STD_LOGIC;BEGINPROCESS(CLK)V ARIABLE COUNT : INTEGER RANGE 0 TO 16#1FFF#;BEGINIF CLK EVENT AND CLK = 1 THENIF COUNT = 16#1FFF# THENCOUNT := DIN;SPK ELSECOUNT := COUNT + 1; SPK END IF;END IF;END PROCESS;PROCESS(SPK)V ARIABLE C : STD_LOGIC;BEGINIF SPK EVENT AND SPK = 1 THENC := NOT C;IF C = 1 THEN SP ELSE SP END IF;END IF;END PROCESS;END;参考程序2:DZQS.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DZQS ISPORT (DAIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0);CODE,HIGH : OUT INTEGER RANGE 0 TO 15;DOUT : OUT INTEGER RANGE 0 TO 16#1FFF# );END;ARCHITECTURE A OF DZQS ISBEGINPROCESS(DAIN)BEGINCASE DAIN ISWHEN 00000001 = DOUT WHEN 00000010 = DOUT WHEN 00000100 = DOUT WHEN 00001000 = DOUT WHEN 00010000 = DOUT WHEN 01000000 = DOUT WHEN 10000000 = DOUT END CASE;END PROCESS;END;参考程序3:SEG.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SEG ISPORT(CP : IN STD_LOGIC;DATA1,DATA2 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); SEL : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);SEG7 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END;ARCHITECTURE A OF SEG ISSIGNAL SE : STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL DOUT : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(CP)BEGINIF SE = 010 THENSE ELSIF CP EVENT AND CP = 1 THENSE END IF;END PROCESS;SEL DOUT DATA2 ;SEG7 0000110 WHEN DOUT = 1 ELSE1011011 WHEN DOUT = 2 ELSE1001111 WHEN DOUT = 3 ELSE1100110 WHEN DOUT = 4 ELSE1101101 WHEN DOUT = 5 ELSE1111101 WHEN DOUT = 6 ELSE0000111 WHEN DOUT = 7 ELSE1111111 WHEN DOUT = 8 ELSE1101111 WHEN DOUT = 9 ELSE0000000;END ;
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号