理论教育 按键控制蜂鸣器实验优化

按键控制蜂鸣器实验优化

时间:2023-06-25 理论教育 版权反馈
【摘要】:图5-16蜂鸣器控制电路原理图本实验的管脚分配如下表5-7按键控制蜂鸣器实验管脚分配所示。图5-18按键控制蜂鸣器系统框图这里我们补充下如何查看软件生成的模块端口及信号连接图。蜂鸣器控制模块,通过对按键信号的识别,起到控制蜂鸣器鸣叫的作用。

按键控制蜂鸣器实验优化

实验目的:使用按键控制蜂鸣器发声。初始状态为蜂鸣器鸣叫,按下开关后蜂鸣器停止鸣叫,再次按下开关,蜂鸣器重新鸣叫。

实验原理:蜂鸣器按照驱动方式主要分为有源蜂鸣器和无源蜂鸣器,其主要区别为蜂鸣器内部是否含有震荡源。有源蜂鸣器内部自带震荡源,只要加上合适的直流电压即可发声;而无源蜂鸣器由于不含内部震荡源,需要外接震荡信号才能发声。本次实验使用的是有源蜂鸣器。图5-16为蜂鸣器控制电路的原理图

图5-16 蜂鸣器控制电路原理图

本实验的管脚分配如下表5-7按键控制蜂鸣器实验管脚分配所示。

表5-7 按键控制蜂鸣器实验管脚分配

需要说明的是,由于蜂鸣器需要的驱动电流较大,使用默认8mA的驱动电流有可能出现蜂鸣器发声较小的情况,解决方法是将蜂鸣器输出的驱动电流修改成12mA或者是16mA,如图5-17按键控制蜂鸣器管脚分配图所示。

图5-17 按键控制蜂鸣器管脚分配图

由实验任务可知,我们只需要在按键按下时改变蜂鸣器的鸣叫状态,但实际上在按键按下的过程中存在按键抖动的干扰,体现在数字电路中就是不断变化的高低电平,为避免在抖动过程中采集到错误的按键状态,我们需要对按键数据进行消除抖动处理。因此本系统应至少包含按键消抖模块和蜂鸣器控制模块,按键控制蜂鸣器系统框图如图5-18所示。

图5-18 按键控制蜂鸣器系统框图

这里我们补充下如何查看软件生成的模块端口及信号连接图。首先对工程进行编译,然后点击菜单栏的Tools→NetList Viewers→RTL Viewer,如图5-19所示。

图5-19 打开端口及信号连接图

稍后就可以看到软件生成的模块端口及信号连接图了,如图5-20所示。

(www.daowen.com)

图5-20 端口及信号连接图

需要注意的是,必须已经执行过综合或编译之后,才能打开模块端口及信号连接图。打开之后,按下Ctrl键,滚动鼠标的滚轮可以对连接图进行放大和缩小。模块端口及信号连接图可以比较清晰的查看各个模块端口信号的连接,同时双击模块,也可以进一步查看模块的原理图。

由图5-20的连接图可知,顶层模块例化了以下两个模块:按键消抖模块(key_debounce)和蜂鸣器控制模块(beep_control)。顶层模块(top_key_beep)完成了对另外两个模块的例化。按键消抖模块,主要起到延时采样,防止按键抖动的干扰。蜂鸣器控制模块,通过对按键信号的识别,起到控制蜂鸣器鸣叫的作用。

实验流程:理解任务、分析原理、硬件设计、程序编码、仿真验证、具体实现。

示例程序:

顶层模块代码如下:

在顶层模块中例化了按键消抖模块和按键控制蜂鸣器模块。按键消抖模块代码如下:

蜂鸣器控制模块的代码如下:

beep初始状态为高电平,蜂鸣器鸣叫,当检测到按键有效信号key_flag为高电平,同时按键信号key_value为低电平时说明按键被有效按下,此时beep取反,蜂鸣器停止鸣叫。当按键再次按下时,beep再次取反,蜂鸣器重新开始鸣叫。

在modelsim内对代码进行仿真,Testbench模块代码如下:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈