vhdl实验报告--蜂鸣器

合集下载

蜂鸣报警器实训报告

蜂鸣报警器实训报告

一、实训目的本次实训旨在使学生了解蜂鸣报警器的工作原理、电路组成以及制作方法,培养学生的动手能力和实际操作技能。

通过本次实训,使学生掌握以下内容:1. 蜂鸣报警器的工作原理;2. 蜂鸣报警器电路的组成及各元件的作用;3. 蜂鸣报警器的制作方法;4. 蜂鸣报警器的调试与测试。

二、实训原理蜂鸣报警器是一种常用的电子报警设备,它利用蜂鸣器发出声音来提醒人们注意。

当电路中的某些参数(如电压、电流等)超过设定值时,蜂鸣器就会发出报警声。

本实训所采用的蜂鸣报警器电路主要由555定时器、蜂鸣器、电阻、电容等元件组成。

1. 555定时器:555定时器是一种集成电路,具有定时、振荡、整形等功能。

在本电路中,555定时器作为振荡器,产生一定频率的方波信号,控制蜂鸣器发出报警声。

2. 蜂鸣器:蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电。

当两端加上工作电压后,蜂鸣器即可以发出鸣叫声。

3. 电阻、电容:电阻和电容在电路中起到限流、滤波、耦合等作用。

三、实训内容1. 蜂鸣报警器电路的搭建(1)准备元件:555定时器、蜂鸣器、电阻、电容、面包板、导线等。

(2)按照电路图连接电路,注意连接顺序。

(3)将电路连接完成后,检查电路连接是否正确。

2. 蜂鸣报警器的调试与测试(1)给电路供电,观察蜂鸣器是否发出报警声。

(2)调整电路参数(如电阻、电容等),观察报警声的变化。

(3)记录不同参数下的报警声变化情况。

四、实训结果与分析1. 实训结果通过本次实训,成功搭建了蜂鸣报警器电路,并实现了报警功能。

2. 实训分析(1)电路连接正确,电源电压稳定,蜂鸣器能够发出报警声。

(2)调整电路参数,可以改变报警声的频率和音量。

(3)在实训过程中,遇到的问题及解决方法:问题1:蜂鸣器不发声。

解决方法:检查电路连接是否正确,确保电源电压稳定。

问题2:报警声频率不正常。

解决方法:调整电阻、电容等元件的参数,以达到预期的报警声频率。

五、实训心得体会1. 通过本次实训,加深了对蜂鸣报警器工作原理的理解,掌握了电路搭建、调试与测试的方法。

蜂鸣器实训报告

蜂鸣器实训报告

一、实训目的本次蜂鸣器实训的主要目的是通过实际操作,掌握蜂鸣器的工作原理、电路连接方法及其在电子项目中的应用。

通过实训,提升对电子元件的认识,增强动手实践能力,并培养解决实际问题的能力。

二、实训时间2023年X月X日至2023年X月X日三、实训地点电子实验室四、实训内容1. 蜂鸣器基本原理蜂鸣器是一种电子元件,它可以将电信号转换为声信号。

当通过蜂鸣器的电流发生变化时,蜂鸣器内部的电磁铁会产生振动,从而发出声音。

蜂鸣器分为无源蜂鸣器和有源蜂鸣器两种类型。

2. 蜂鸣器电路连接在本次实训中,我们主要学习了无源蜂鸣器的电路连接方法。

首先,我们需要准备以下材料:蜂鸣器、面包板、导线、电源、电阻等。

具体步骤如下:(1)将蜂鸣器的正负极分别与面包板上的两个孔相连;(2)将电阻的一端与蜂鸣器的正极相连,另一端与电源的正极相连;(3)将电源的负极与蜂鸣器的负极相连;(4)将电阻的另一端与电源的负极相连,形成一个完整的电路。

3. 蜂鸣器应用在电子项目中,蜂鸣器可以用来发出警告声、提示音等。

以下是一些蜂鸣器的应用实例:(1)电子门铃:当有人按下按钮时,蜂鸣器发出铃声;(2)温度报警器:当温度超过设定值时,蜂鸣器发出警报声;(3)水位报警器:当水位超过设定值时,蜂鸣器发出警报声。

五、实训过程1. 准备阶段在实训开始前,我们首先对蜂鸣器的基本原理进行了学习,了解了蜂鸣器的种类、工作原理以及电路连接方法。

2. 实践操作在实验室老师的指导下,我们按照步骤将蜂鸣器连接到电路中。

在连接过程中,我们注意了以下几点:(1)确保电路连接正确,避免短路或断路;(2)注意电源电压的选择,避免对蜂鸣器造成损害;(3)观察蜂鸣器的工作状态,确保其能够正常发出声音。

3. 问题解决在实训过程中,我们遇到了一些问题,如电路连接错误、蜂鸣器不发声等。

通过查阅资料、与同学讨论以及向老师请教,我们成功解决了这些问题。

六、实训总结通过本次蜂鸣器实训,我收获颇丰。

蜂鸣器谱曲实验报告

蜂鸣器谱曲实验报告

一、实验目的1. 了解蜂鸣器的工作原理和特性;2. 掌握蜂鸣器谱曲的基本方法;3. 通过实验,验证蜂鸣器演奏音乐的效果。

二、实验原理蜂鸣器是一种电磁声音变换器,它利用电信号的变化产生声音。

蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。

当接通电源后,多谐振荡器起振,输出音频信号,阻抗匹配器推动压电蜂鸣片发声。

蜂鸣器谱曲的基本方法是通过编程控制蜂鸣器发出不同频率的音频信号,从而实现演奏音乐的效果。

音乐由音调和节拍两个主要元素组成,对于蜂鸣器来说,频率的高低决定了音调的高低。

三、实验器材1. 蜂鸣器;2. 电脑;3. 编程软件(如C语言、Python等);4. 连接线和电源。

四、实验步骤1. 连接蜂鸣器将蜂鸣器的正负极分别连接到电脑的GPIO(通用输入输出)端口,确保连接正确。

2. 编写程序使用编程软件编写程序,实现以下功能:(1)初始化蜂鸣器端口;(2)定义音乐音符频率表,包括音符、频率和持续时间;(3)根据音符频率和持续时间,通过GPIO端口控制蜂鸣器发出相应频率的音频信号;(4)循环播放音乐音符,实现整首歌曲的演奏。

3. 编译程序将编写好的程序编译成可执行文件。

4. 播放音乐将编译好的程序运行在电脑上,观察蜂鸣器是否能够演奏出预定的音乐。

五、实验结果与分析1. 实验结果通过编程控制蜂鸣器,成功演奏了一首简单的歌曲。

播放过程中,蜂鸣器能够发出不同频率的音频信号,实现音乐演奏的效果。

2. 分析(1)蜂鸣器能够发出不同频率的音频信号,说明蜂鸣器具有较好的音质表现。

(2)通过编程控制蜂鸣器,可以实现音乐演奏的效果,说明蜂鸣器在音乐领域的应用前景广阔。

(3)实验过程中,由于蜂鸣器受到电源、环境等因素的影响,可能导致音质不够理想。

在今后的实验中,可以尝试优化程序,提高音质。

六、实验总结1. 通过本次实验,了解了蜂鸣器的工作原理和特性,掌握了蜂鸣器谱曲的基本方法。

2. 实验结果表明,蜂鸣器能够发出不同频率的音频信号,实现音乐演奏的效果。

按键计数蜂鸣器实验报告(3篇)

按键计数蜂鸣器实验报告(3篇)

第1篇一、实验目的1. 了解按键电路的工作原理。

2. 掌握蜂鸣器的工作原理及其控制方法。

3. 学习使用C语言进行嵌入式编程。

4. 培养动手实践能力和团队合作精神。

二、实验原理1. 按键电路:按键电路由按键、上拉电阻和下拉电阻组成。

当按键未被按下时,上拉电阻将输入端拉高;当按键被按下时,下拉电阻将输入端拉低。

2. 蜂鸣器电路:蜂鸣器是一种发声元件,其工作原理是利用电磁铁的磁力使振动膜片振动,从而产生声音。

蜂鸣器的控制主要通过改变输入信号的频率来实现。

3. 计数原理:通过按键输入信号,实现计数器的计数功能。

当按键被按下时,计数器加一;当按键被连续按下时,计数器的计数值随之增加。

三、实验器材1. 单片机开发板(如STC89C52)2. 按键3. 蜂鸣器4. 电阻5. 接线6. 电脑7. 调试软件(如Keil uVision)四、实验步骤1. 设计电路图:根据实验要求,设计按键、蜂鸣器和单片机的连接电路图。

2. 编写程序:使用C语言编写程序,实现按键计数和蜂鸣器控制功能。

3. 编译程序:将编写好的程序编译成机器码。

4. 烧录程序:将编译好的机器码烧录到单片机中。

5. 调试程序:通过调试软件对程序进行调试,确保程序正常运行。

6. 测试实验:将单片机连接到实验电路中,进行按键计数和蜂鸣器控制测试。

五、实验代码```cinclude <reg52.h>define uchar unsigned chardefine uint unsigned intsbit key = P3^2; // 按键连接到P3.2端口sbit buzzer = P1^0; // 蜂鸣器连接到P1.0端口uchar count = 0; // 计数器void delay(uint t) {uint i, j;for (i = 0; i < t; i++)for (j = 0; j < 127; j++);}void buzzer_on() {buzzer = 0; // 使蜂鸣器发声}void buzzer_off() {buzzer = 1; // 使蜂鸣器停止发声}void main() {while (1) {if (key == 0) { // 检测按键是否被按下delay(10); // 消抖if (key == 0) {count++; // 计数器加一buzzer_on(); // 使蜂鸣器发声delay(500); // 发声时间buzzer_off(); // 停止发声}}}}```六、实验结果与分析1. 当按键未被按下时,蜂鸣器不发声。

VHDL语言蜂鸣器

VHDL语言蜂鸣器

蜂鸣器输出报警声实验一.实验目的学习交流蜂鸣器的发音原理。

二.实验内容在SmartSOPC实验箱上的蜂鸣器输出报警笛声。

三.实验原理SmartSOPC实验箱上有1个交流蜂鸣器BUZZER,通过跳线JP6的BEEP与芯片相连接。

为了增强I/O口的驱动能力,在此采用了PNP型三极管,这样只要在BEEP上输入一定频率的脉冲蜂鸣器就会发出音乐。

四.实验程序实验源程序如下:Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity aa isPort( clk:in std_logic;beep:out std_logic);end aa;Architecture m1 of aa issignal beep_r:std_logic;signal count:std_logic_vector(15 downto 0);beginbeep<=beep_r;process(clk)beginif clk'event and clk='1' thencount<=count+'1';end if;end process;process(count(15))beginbeep_r<=not beep_r ;end process;end m1;五.实验步骤(1)、在QuartusII中建立一个工程项目文件beep.qpf,并在该项目下新建VHDL源程序文件输入源程序代码并保存。

(2)、选择目标器件并对相应的引脚进行锁定,在这里在这里所选择的目标器件为Altera 公司Cyclone系列的EP1C12Q240C8芯片,引脚锁定的方法如表6.1,将未使用的管脚设置为三态输入。

表1 引脚锁定方法信号引脚信号引脚1C6 1C12 EDA 1C6 1C12 EDA beep 175 175 175 clk 28 28 28(3)、对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。

制作蜂鸣器模块实验报告

制作蜂鸣器模块实验报告

一、实验目的1. 了解蜂鸣器的工作原理及分类。

2. 掌握蜂鸣器模块的制作方法。

3. 学会使用蜂鸣器模块进行简单的声音控制。

二、实验原理蜂鸣器是一种电子音响器件,其工作原理是利用电流通过压电陶瓷片或电磁线圈产生振动,从而发出声音。

根据驱动方式,蜂鸣器可分为有源蜂鸣器和无源蜂鸣器两种。

1. 有源蜂鸣器:内部自带振荡电路,只需接通电源即可发声。

2. 无源蜂鸣器:需要外部电路提供方波信号驱动。

本实验采用有源蜂鸣器模块,其内部结构包括振荡电路、驱动电路、压电陶瓷片等。

三、实验器材1. 有源蜂鸣器模块2. 单片机(如Arduino)3. 杜邦线4. 电源5. 万用表6. 烧录器四、实验步骤1. 搭建电路:- 将蜂鸣器模块的VCC引脚连接到单片机的5V电源;- 将蜂鸣器模块的GND引脚连接到单片机的GND;- 将蜂鸣器模块的I/O引脚连接到单片机的数字输出引脚(如D8)。

2. 编写程序:- 使用单片机编程语言(如Arduino)编写程序,通过控制数字输出引脚的高低电平,控制蜂鸣器发声。

3. 烧录程序:- 将编写好的程序烧录到单片机中。

4. 测试:- 连接电源,观察蜂鸣器是否发声。

五、实验结果与分析1. 实验结果:- 成功搭建蜂鸣器模块电路;- 编写程序控制蜂鸣器发声;- 实现简单的音乐播放功能。

2. 分析:- 通过控制单片机数字输出引脚的高低电平,可以改变蜂鸣器的频率,从而控制音调;- 通过改变高低电平的持续时间,可以改变蜂鸣器的音量;- 可以通过编程实现多种声音效果,如音乐播放、报警等。

六、实验总结1. 通过本次实验,掌握了蜂鸣器的工作原理及分类;2. 学会了蜂鸣器模块的制作方法;3. 掌握了使用蜂鸣器模块进行简单的声音控制。

七、拓展应用1. 将蜂鸣器模块应用于智能家居系统,实现门铃、报警等功能;2. 将蜂鸣器模块应用于机器人,实现语音提示、警报等功能;3. 将蜂鸣器模块应用于音乐创作,实现音效合成等功能。

单片机《蜂鸣器》实验报告

单片机《蜂鸣器》实验报告

单片机《蜂鸣器》实验报告单片机《蜂鸣器》实验报告一、实验目的本次实验旨在通过单片机的控制,实现对蜂鸣器的驱动和发声控制,进一步了解蜂鸣器的工作原理及应用。

二、实验原理蜂鸣器是一种电子发声器件,常用于发出警告、提示或声音信号。

其工作原理是利用电磁感应原理,在蜂鸣器线圈中通入电流时,会产生磁场,该磁场与蜂鸣器内部的一块磁铁产生相互作用力,使蜂鸣器内部的膜片发生振动,从而发出声音。

在本实验中,我们将通过单片机控制蜂鸣器的驱动信号,使其发出不同的声音,从而实现单片机对蜂鸣器的控制。

三、实验步骤1、准备实验器材:单片机开发板、蜂鸣器模块、杜邦线等。

2、将蜂鸣器模块连接至单片机开发板的某个数字引脚上。

3、通过单片机编程软件编写控制程序,实现对蜂鸣器的控制。

4、将编写好的程序下载到单片机开发板中,并进行调试。

5、通过单片机控制蜂鸣器发出不同的声音,观察其工作情况。

四、实验结果与分析1、实验结果通过本次实验,我们成功实现了单片机对蜂鸣器的控制,可以通过编写不同的程序,使蜂鸣器发出不同的声音。

以下是实验中蜂鸣器发出的声音及其对应的程序代码:(1) 发出“滴”的一声(2) 发出“嘟嘟”的警告声2、结果分析通过实验结果可以看出,通过单片机对蜂鸣器进行控制,可以实现发出不同声音的效果。

在第一个实验中,我们通过设置引脚的高低电平及延时时间,使蜂鸣器发出一声“滴”的声音。

在第二个实验中,我们通过一个无限循环,使蜂鸣器发出“嘟嘟”的警告声。

五、结论与展望通过本次实验,我们深入了解了蜂鸣器的工作原理及应用,并成功实现了单片机对蜂鸣器的控制。

实验结果表明,我们可以根据实际需要编写不同的程序,实现对蜂鸣器的灵活控制。

展望未来,我们可以进一步研究蜂鸣器的其他应用场景,例如在智能家居、机器人等领域中的应用。

我们也可以通过其他方式对蜂鸣器进行控制,例如通过传感器采集信号或者通过无线网络进行远程控制等。

vhdl实验报告--蜂鸣器

vhdl实验报告--蜂鸣器

vhdl实验报告--蜂鸣器VHDL 实验报告蜂鸣器一、实验目的本次实验的主要目的是通过使用 VHDL 语言来设计并实现一个蜂鸣器的控制电路,深入理解数字电路的设计原理和 VHDL 编程的基本方法,掌握硬件描述语言在实际电路设计中的应用,提高自己的逻辑思维和问题解决能力。

二、实验原理蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电。

常见的蜂鸣器分为有源蜂鸣器和无源蜂鸣器两种。

有源蜂鸣器内部自带了振荡源,只要给其供电就能发出固定频率的声音;无源蜂鸣器则需要外部提供一定频率的脉冲信号才能发声。

在本实验中,我们使用 VHDL 语言来控制一个无源蜂鸣器。

通过编写代码,生成特定频率的脉冲信号,从而驱动蜂鸣器发声。

三、实验设备及工具1、计算机2、 Quartus II 软件3、开发板四、实验内容及步骤1、设计思路首先,需要确定蜂鸣器发声的频率。

通过计算得出所需的时钟周期数。

然后,使用计数器来产生特定频率的脉冲信号。

最后,将脉冲信号输出到蜂鸣器的控制引脚。

2、 VHDL 代码编写```vhdllibrary ieee;use ieeestd_logic_1164all;use ieeenumeric_stdall;entity buzzer_control isport(clk : in std_logic;rst : in std_logic;buzzer : out std_logic);end entity;architecture Behavioral of buzzer_control isconstant CLK_FREQ : integer := 50_000_000; 系统时钟频率constant BUZZER_FREQ : integer := 1000; 蜂鸣器发声频率signal counter : integer range 0 to CLK_FREQ/BUZZER_FREQ 1; signal clk_div : std_logic;beginprocess(clk, rst)beginif rst ='1' thencounter <= 0;clk_div <='0';elsif rising_edge(clk) thenif counter = CLK_FREQ/BUZZER_FREQ 1 thencounter <= 0;clk_div <= not clk_div;elsecounter <= counter + 1;end if;end if;end process;buzzer <= clk_div;end architecture;```3、编译与仿真将编写好的 VHDL 代码在 Quartus II 软件中进行编译。

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

VHDL 实验报告一、实验目的1、掌握蜂鸣器的使用;2、通过复杂实验,进一步加深对VHDL语言的掌握程度。

二、实验原理乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在蜂鸣器上连续地发出各个音符的音调。

而要准确地演奏出一首乐曲,仅仅让蜂鸣器能够发声是不够的,还必须准确地控制乐曲的节奏,即每个音符的持续时间。

由此可见,乐曲中每个音符的发音频率及其持续的时间是乐曲能够连续演奏的两个关键因素。

乐曲的12 平均率规定:每2 个八度音(如简谱中的中音1 与高音1)之间的频率相差1 倍。

在2个八度音之间,又可分为12个半音。

另外,音符A(简谱中的低音6)的频率为440Hz, 音符B到C之间、E到F之间为半音,其余为全音。

由此可以计算出简谱中从低音I至高音1 之间每个音符的频率,如表所示。

音名频率/Hz 音名频率/Hz 音名频率/Hz 低音1 中音1 高音1低音2 中音2 高音2低音3 中音3 高音3低音4 中音4 高音4低音5 392 中音5 784 高音5 1568低音6 440 中音6 880 高音6 1760 低音7 中音7 高音7表简谱音名与频率的对应关系产生各音符所需的频率可用一分频器实现, 由于各音符对应的频率多为非整数, 而分频系数又不能为小数, 故必须将计算得到的分频数四舍五入取整。

若分频器时钟频率过低, 则由于分频系数过小, 四舍五入取整后的误差较大;若时钟频率过高,虽然误差变小,但分频数将变大。

实际的设计应综合考虑两方面的因素, 在尽量减小频率误差的前提下取合适的时钟频率。

实际上,只要各个音符间的相对频率关系不变,演奏出的乐曲听起来都不会走调。

音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定。

因此, 要控制音符的音长,就必须知道乐曲的速度和每个音符所对应的节拍数, 本例所演奏的乐曲的最短的音符为四分音符,如果将全音符的持续时间设为1s 的话,那么一拍所应该持续的时间为秒,则只需要提供一个4HZ的时钟频率即可产生四分音符的时长。

本例设计的音乐电子琴选取40MHZ的系统时钟频率。

在数控分频器模块,首先对时钟频率进行40分频,得到1MHZ的输入频率,然后再次分频得到各音符的频率。

由于数控分频器输出的波形是脉宽极窄的脉冲波, 为了更好的驱动蜂鸣器发声, 在到达蜂鸣器之前需要均衡占空比, 从而生成各音符对应频率的对称方波输出。

这个过程实际上进行了一次二分频, 频率变为原来的二分之一即。

因此,分频系数的计算可以按照下面的方法进行。

以中音1为例,对应的频率值为523. 3Hz,它的分频系数应该为:0.375MHZ 0.375 106716 523.3 523.3至于其他音符,同样可由上式求出对应的分频系数,这样利用程序可以很轻松地得到相应的乐声。

音名频率/Hz 分频系数音名频率/Hz 分频系数低音1 1911 咼音1 478 低音2 1702 咼音2 425 低音3 1517 咼音3 379 低音4 1431 咼音4 359 低音5 392 1276 咼音5 1568 319 低音6 440 1136 咼音6 1760 284 低音7 1014 咼音7 253 中音1 956 中音2 851 中音3 758 中音4 716中音5 784 638 中音6 880 568中音7 506表各音名对应的分频系数至于音长的控制,在自动演奏模块,每个乐曲的音符是按地址存放的,播放乐曲时按4HZ的时钟频率依次读取简谱,每个音符持续时间为秒。

如果乐谱中某个音符为三拍音长,那又该如何控制呢其实只要在3个连续地址存放该音符,这时就会发三个秒的音长,即持续了三拍的时间,通过这样一个简单的操作就可以控制音长了。

三、实验步骤1、设置端口1)输入端口CLK 40MHZ系统时钟输入端口。

2)输出端口device :乐曲的声音输出端口,输出的是对应各音符频率的方波信号。

2、设置模块1)自动演奏模块自动演奏模块可以自动播放电子琴内置乐曲,按节拍读取内置乐谱。

将键盘输入的音符信号输出。

因此,本模块是向Tone模块提供音符信息。

首先,对40MHz系统时钟进行10M的分频,得到4Hz的信号,这样一秒中就可以按照四拍进行。

然后依照此频率进行地址累计。

2)音频发生器模块根据自动演奏模块的信号输出,不同的信号被翻译为不同的频率。

3) 蜂鸣器驱动模块根据音频发生器发出音频的不同,蜂鸣器得到的驱动也不同。

首先,对系统时钟进行40分频,再对1mhz的脉冲再次分频,得到所需要的音符频率,然后再进行2分频。

四、实验代码library ieee; use tone is port(index: in std_logic_vector(15 downto 0); -- 音符输入信号tone0: out integer range 0 to 2047 -- 音符的分频系数);end tone;architecture behavioral of tone isbeginsearch :process(index) -- 此进程完成音符到音符的分频系数译码,音符的显示,高低音阶begin case index iswhen "0000000000000001" => tone0<=1433;when "0000000000000010" => tone0<=1277;when "0000000000000100" => tone0<=1138;when "0000000000001000" => tone0<=1074;when "0000000000010000" => tone0<=960;when "0000000000100000" => tone0<=853;when "0000000001000000" => tone0<=759;when "00000000" => tone0<=716;when "00000000" => tone0<=358;when "00000000" => tone0<=319; when "00000" => tone0<=284;when "0000" => tone0<=268;when "000" => tone0<=239;when "000" => tone0<=213;when "000" => tone0<=190;when "000" => tone0<=638; when others => tone0<=0; end case;end process;end behavioral;library ieee;use speaker isport(clk1: in std_logic; -- tone1: in integer range 0 to 2047;-- spks: out std_logic --);end speaker;architecture behavioral of speaker issignal preclk, fullspks:std_logic;begin p1:process(clk1)-- 此进程对系统时钟进行16 分频variable count: integer range 0 to 16;beginif clk1'event and clk1='1' then count:=count+1;if count=8 then preclk<='1';elsif count=16 thenpreclk<='0'; count:=0;end if;end if;end process p1;p2:process(preclk,tone1)-- 对的脉冲再次分频,得到所需variable count11:integer range 0 to 2047;beginif preclk'event and preclk='1' thenif count11<tone1 then count11:=count11+1;fullspks<='1';elsecount11:=0; fullspks<='0';end if;end if;end process p2;p3:process(fullspks)-- 此进程对fullspks 进行2 分频variable count2: std_logic:='0';beginif fullspks'event and fullspks='1' thencount2:=not count2;if count2='1' thenspks<='1';else spks<='0';end if;end if;end process p3;end behavioral;library ieee;use laohu is port(系统时钟12mhz 音符分频系数驱动扬声器的音频信号的音符频率clk: in std_logic;-- 系统时钟;键盘输入/自动演奏tone_key_0: buffer std_logic_vector(15 downto 0)-- 音符信号输出);end laohu;architecture behavioral of laohu issignal count0:integer range 0 to 31;--changesignal clk2:std_logic;beginp1:process(clk)-- 对12mhz系统时钟进行3m的分频,得到4hz的信号clk2 variable count:integer range 0 to 3000000;beginif clk'event and clk='1' then count:=count+1;if count=1500000 then clk2<='1';elsif count=3000000 then clk2<='0'; count:=0;end if;end if;end process p1;p2:process(clk2)-- 此进程完成自动演奏部分乐曲的地址累加beginif clk2'event and clk2='1' thenif count0=29 then count0<=0;elsecount0<=count0+1;end if; end if;end process p2;p3:process(count0,tone_key_0)begincase count0 is-- 此case 语句:存储自动演奏部分的乐曲when 0 => tone_key_0<=b"00000001_00000000"; --1 when 1 =>tone_key_0<=b"00000010_00000000"; --2 when 2 =>tone_key_0<=b"00000100_00000000"; --3 when 3 =>tone_key_0<=b"00000001_00000000"; --1 when 4 =>tone_key_0<=b"00000001_00000000"; --1 when 5 =>tone_key_0<=b"00000010_00000000"; --2 when 6 =>tone_key_0<=b"00000100_00000000"; --3 when 7 =>tone_key_0<=b"00000001_00000000"; --1 when 8 =>tone_key_0<=b"00000100_00000000"; --3 when 9 =>tone_key_0<=b"00001000_00000000"; --4 when 10 =>tone_key_0<=b"00010000_00000000"; --5 when 11 =>tone_key_0<=b"00000100_00000000"; --3 when 12 =>tone_key_0<=b"00001000_00000000"; --4 when 13 =>tone_key_0<=b"00010000_00000000"; --5 when 14 =>tone_key_0<=b"00010000_00000000"; --5 when 15 =>tone_key_0<=b"00100000_00000000"; --6 when 16 =>tone_key_0<=b"00010000_00000000"; --5 when 17 =>tone_key_0<=b"00001000_00000000"; --4 when 18 =>tone_key_0<=b"00000100_00000000"; --3 when 19 =>tone_key_0<=b"00000001_00000000"; --1 when 20 =>tone_key_0<=b"00010000_00000000"; --5 when 21 =>tone_key_0<=b"00100000_00000000"; --6 when 22 =>tone_key_0<=b"00010000_00000000"; --5 when 23 =>tone_key_0<=b"00001000_00000000"; --4 when 24 =>tone_key_0<=b"00000100_00000000"; --3 when 25 =>tone_key_0<=b"00000001_00000000"; --1 when 26 =>tone_key_0<=b"00000100_00000000"; --3 when 27 =>tone_key_0<=b"00000000_00100000"; --di6 when 28 =>tone_key_0<=b"00000001_00000000"; --1 when others => null;end case;end process p3;end behavioral;library ieee; use beep0 isport(clk:in std_logic;device:out std_logic);end beep0; architecture behavioral of beep0 is component laohu isport(clk: in std_logic;-- 系统时钟;键盘输入/自动演奏tone_key_0: out std_logic_vector(15 downto 0)-- 音符信号输出);end component; component tone isport(index: in std_logic_vector(15 downto 0);-- 音符输入信音符的分频系数tone0: out integer range 0 to 2047-););end component;component speaker isport(clk1: in std_logic;-- 系统时钟12mhztone1: in integer range 0 to 2047; -- 音符分频系数spks: out std_logic-- 驱动扬声器的音频信号);end component;signal mid:std_logic_vector(15 downto 0);signal tones:integer;beginu0:laohu port map(clk,mid);u1:tone port map(mid,tones); u2:speaker port map(clk,tones,device);end behavioral;五、实验结果及其分析频率折算中,由于频率计数3 不能是小数,采用了四舍五入的方法,所以得到的频率并不是十分精确的,但是不会影响结果。

相关文档
最新文档