> 文章列表 > 【STC8A8K64D4开发板】——有源蜂鸣器鸣响控制

【STC8A8K64D4开发板】——有源蜂鸣器鸣响控制

【STC8A8K64D4开发板】——有源蜂鸣器鸣响控制

学习目的

  1. 掌握有源蜂鸣器驱动电路的设计:控制方式、限流电阻的计算和确定。
  2. 了解有源蜂鸣器的特性以及和无源蜂鸣器的区别。

硬件电路设计

开发板上的蜂鸣器驱动电路如下图所示,使用的蜂鸣器是3V有源蜂鸣器,这里,我们有必要了解一下有源蜂鸣器和无源蜂鸣器的区别:

  • 有源蜂鸣器:有源蜂鸣器内部带震荡源,所以只要通电就会鸣响。
  • 无源蜂鸣器:内部不带震荡源,用直流信号无法令其鸣响。必须用频率信号去驱动他才会鸣响。

所以,对于有源蜂鸣器来说,只要通电就会鸣响。为了实现控制有源蜂鸣器的鸣响,我们的电路中就需要一个“开关”来实现有源蜂鸣器接通或断开电源。在开发板上,是使用NPN三极管9013来实现“开关”的功能的,通过单片机的引脚P2.0输出高低电平控制“开关”的接通和断开,即:

  • 当P2.0输出逻辑0,即低电平时,9013基极电压约为0V,基极没有电流,因此集电极也没有电流流过,三极管处于截止状态,即蜂鸣器和GND之间“断开”,蜂鸣器不鸣响。
  • 当P2.0输出逻辑1,即高电平时,9013饱和导通,即蜂鸣器和GND之间“接通”,蜂鸣器鸣响。

电路中的R11是为了保证P2.0输出逻辑0时三极管可靠的截止。

在这里插入图片描述

图1:有源蜂鸣器驱动电路

有源蜂鸣器占用的STC8A8K64D4的引脚如下表:

表1:有源蜂鸣器引脚分配

名称 引脚 说明
有源蜂鸣器 P2.0 独立GPIO

软件设计

GPIO配置

本实验中只需将STC8A8K64D4的引脚P2.0配置为推挽输出,并输出高低电平即可(高电平鸣响蜂鸣器,低电平关闭蜂鸣器鸣响),原理和LED实验一样,参见“第2-1讲:点灯实验”中GPIO部分的描述即可。

蜂鸣器鸣响实验

  • 注:本节的实验是在“实验2-1-3:流水灯(自编驱动文件方式)”的基础上修改,本节对应的实验源码是:“实验2-2-1:有源蜂鸣器鸣响控制”。

实验内容

  1. 配置驱动蜂鸣器的GPIO P2.0为推挽输出。
  2. 主循环中驱动蜂鸣器间隔性鸣响:每200ms改变一次P2.0的输出电平,即蜂鸣器以200ms的间隔鸣响。

代码编写

  1. 新建一个名称为“beep.c”的文件及其头文件“beep.h”并保存到工程的“Source”文件夹,并将“beep.c”加入到Keil工程中的“SOURCE”组。
  2. 本例中编写了两个操作蜂鸣器的函数:beep_on函数和beep_off函数,分别用于鸣响蜂鸣器和关闭蜂鸣器鸣响,他们的代码清单如下。

**代码清单:**beep_on函数

  1. /**************************************************************************
  2. 功能描述:鸣响蜂鸣器
  3. 参 数:无
  4. 返 回 值:无
  5. *************************************************************************/
  6. void beep_on(void)
  7. {
  8. BEEP_P20 = 1; //蜂鸣器鸣响
  9. }

**代码清单:**beep_off函数

  1. /**************************************************************************
  2. 功能描述:蜂鸣器停止鸣响
  3. 参 数:无
  4. 返 回 值:无
  5. *************************************************************************/
  6. void beep_off(void)
  7. {
  8. BEEP_P20 = 0; //蜂鸣器停止鸣响
  9. }
  10. 主程序“main.c”中先配置P2.0为推挽输出,之后在主循环中以200ms间隔轮流鸣响和关闭蜂鸣器鸣响,代码清单如下:

**代码清单:**主函数

  1. /**************************************************************************
  2. 功能描述:主函数
  3. 入口参数:无
  4. 返回值:int类型
  5. *************************************************************************/
  6. int main(void)
  7. {
  8. P2M1 &= 0xFE; P2M0 |= 0x01; //配置P2.0为推挽输出
  9. while(1)
  10. {
  11. beep_on(); //鸣响蜂鸣器
  12. delay_ms(200); //延时200ms
  13. beep_off(); //蜂鸣器停止鸣响
  14. delay_ms(200); //延时200ms
  15. }
  16. }

硬件连接

本实验中,控制有源蜂鸣器的引脚P2.0没有和其他电路复用,因此,没有短接跳线帽的操作,用USB数据线将开发板连接到电脑即可。

实验步骤

  1. 解压“…\\第3部分:配套例程源码”目录下的压缩文件“实验2-2-1:有源蜂鸣器鸣响控制”,将解压后得到的文件夹拷贝到合适的目录,如“D\\STC8”(这样做的目的是为了防止中文路径或者工程存放的路径过深导致打开工程出现问题)。
  2. 双击“…\\beep\\project”目录下的工程文件“beep.uvproj”。
  3. 点击编译按钮编译工程,编译成功后生成的HEX文件“beep.hex”位于工程的“…\\beep\\project\\Objects”目录下。
  4. 打开STC-ISP软件下载程序,下载使用内部IRC时钟,IRC频率选择:24MHz。
  5. 程序运行后,可以观察到蜂鸣器鸣响200ms,之后关闭鸣响200ms,如此往复。
    t\\Objects”目录下。
  6. 打开STC-ISP软件下载程序,下载使用内部IRC时钟,IRC频率选择:24MHz。
  7. 程序运行后,可以观察到蜂鸣器鸣响200ms,之后关闭鸣响200ms,如此往复。