51单片机(十一)蜂鸣器 您所在的位置:网站首页 51单片机蜂鸣器是哪个管脚 51单片机(十一)蜂鸣器

51单片机(十一)蜂鸣器

2024-06-28 05:00| 来源: 网络整理| 查看: 265

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋。 🌙专栏目标:实现从零基础入门51单片机和STM32单片机,力求在玩好单片机的同时,能够了解一些计算机的基本概念,了解电路及其元器件的基本理论等。

⭐️ 专栏主要内容: 主要学习51单片机的功能、各个模块、单片机的外设、驱动等,最终玩好单片机和单片机的外设,全程手敲代码,实现我们所要实现的功能。 🌴 专栏说明 :如果文章知识点有错误的地方,欢迎大家随时在文章下面评论,我会第一时间改正。让我们一起学习,一起进步。 💑专栏主页:http://t.csdn.cn/HCD8v

本学习过程参考:https://space.bilibili.com/383400717

单片机安装软件、各种资料以及源码的路径: https://pan.baidu.com/s/1vDTN2o8ffvczzNQGfyjHng 提取码:gdzf

本节主要介绍学习蜂鸣器的相关知识,包括蜂鸣器基础知识介绍、本节目标等;并利用两个小实验来写程序进行练习,分别是蜂鸣器播放提示音以及蜂鸣器播放音乐,最后附上相关代码。

文章目录 一、蜂鸣器和本节目标1.1 蜂鸣器基础知识1.2 本节目标 二、蜂鸣器播放提示音三、蜂鸣器播放音乐

一、蜂鸣器和本节目标 1.1 蜂鸣器基础知识

蜂鸣器介绍

在这里插入图片描述

驱动电路

在这里插入图片描述

驱动电路有三极管驱动和集成电路驱动;在三极管驱动中又分为NPN型三极管和PNP型三极管;NPN型三极管是高电平导通,即左边电阻那根管给高电平1时,右边蜂鸣器导通;反之,在PNP型三极管是低电平导通,即即左边电阻那根管给低电平0时,右边蜂鸣器导通;

蜂鸣器的电路图如下图所示:

在这里插入图片描述

蜂鸣器的BZ口是接在步进电机上的,如下图

在这里插入图片描述

下面介绍下ULN2003D(达林顿管)的相关知识:

在这里插入图片描述

ULN2003D达林顿管能够增强驱动能力,一般用于步进电机的驱动;其逻辑框图如下图所示

在这里插入图片描述 ⑨COM是其公共端;左边①到⑧是七个非门,即输入0则输出1,输入1则输出0; 我们的蜂鸣器是如下图接在上面的:

在这里插入图片描述

所以想使蜂鸣器响,则需要给⑦输入1,则经过非门后,输出到⑩的就是0;这一端是低电平,而蜂鸣器的另一端是正极高电压,所以蜂鸣器就能响了。

在这里插入图片描述 所以总结一下,根据以上的分析,以及上图可知,只要控制P15口,输入高电平1,则OUT5就会输出低电平0;蜂鸣器就能响起来;

关于乐理部分就不想详细学习了,直接参考视频:https://www.bilibili.com/video/BV1Mb411e7re?p=25&vd_source=e2638d12685eef84cda913d9d67be0a9第27分钟后面

1.2 本节目标

目标1:蜂鸣器播放提示音 现象是当按下独立按键后,蜂鸣器给到短暂的回应提示音,也就是给我们一个按键的反馈,并在数码管上显示对应的键码值,如下图: 在这里插入图片描述

目标2:蜂鸣器播放音乐

用蜂鸣器播放固定的音乐,比如天空之城。

二、蜂鸣器播放提示音

代码路径:51单片机入门教程资料\课件及程序源码\程序源码\KeilProject\11-1 蜂鸣器播放提示音 具体代码:

#include #include "Delay.h" #include "Key.h" #include "Nixie.h" #include "Buzzer.h" unsigned char KeyNum; void main() { Nixie(1,0); while(1) { KeyNum=Key(); if(KeyNum) { Buzzer_Time(100); Nixie(1,KeyNum); } } }

Nixie.c的内容: 主要负责数码管显示

#include #include "Delay.h" //数码管段码表 unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; /** * @brief 数码管显示 * @param Location 要显示的位置,范围:1~8 * @param Number 要显示的数字,范围:段码表索引范围 * @retval 无 */ void Nixie(unsigned char Location,Number) { switch(Location) //位码输出 { case 1:P2_4=1;P2_3=1;P2_2=1;break; case 2:P2_4=1;P2_3=1;P2_2=0;break; case 3:P2_4=1;P2_3=0;P2_2=1;break; case 4:P2_4=1;P2_3=0;P2_2=0;break; case 5:P2_4=0;P2_3=1;P2_2=1;break; case 6:P2_4=0;P2_3=1;P2_2=0;break; case 7:P2_4=0;P2_3=0;P2_2=1;break; case 8:P2_4=0;P2_3=0;P2_2=0;break; } P0=NixieTable[Number]; //段码输出 // Delay(1); //显示一段时间 // P0=0x00; //段码清0,消影 }

Buzzer.c的内容(主要负责蜂鸣器发声):

#include #include //蜂鸣器端口: sbit Buzzer=P1^5; /** * @brief 蜂鸣器私有延时函数,延时500us * @param 无 * @retval 无 */ void Buzzer_Delay500us() //@12.000MHz { unsigned char i; _nop_(); i = 247; while (--i); } /** * @brief 蜂鸣器发声 * @param ms 发声的时长,范围:0~32767 * @retval 无 */ void Buzzer_Time(unsigned int ms) { unsigned int i; for(i=0;i 0, 63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528, 64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030, 65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283, }; //乐谱 unsigned char code Music[]={ //音符,时值, //1 P, 4, P, 4, P, 4, M6, 2, M7, 2, H1, 4+2, M7, 2, H1, 4, H3, 4, M7, 4+4+4, M3, 2, M3, 2, //2 M6, 4+2, M5, 2, M6, 4, H1, 4, M5, 4+4+4, M3, 4, M4, 4+2, M3, 2, M4, 4, H1, 4, //3 M3, 4+4, P, 2, H1, 2, H1, 2, H1, 2, M7, 4+2, M4_,2, M4_,4, M7, 4, M7, 8, P, 4, M6, 2, M7, 2, //4 H1, 4+2, M7, 2, H1, 4, H3, 4, M7, 4+4+4, M3, 2, M3, 2, M6, 4+2, M5, 2, M6, 4, H1, 4, //5 M5, 4+4+4, M2, 2, M3, 2, M4, 4, H1, 2, M7, 2+2, H1, 2+4, H2, 2, H2, 2, H3, 2, H1, 2+4+4, //6 H1, 2, M7, 2, M6, 2, M6, 2, M7, 4, M5_,4, M6, 4+4+4, H1, 2, H2, 2, H3, 4+2, H2, 2, H3, 4, H5, 4, //7 H2, 4+4+4, M5, 2, M5, 2, H1, 4+2, M7, 2, H1, 4, H3, 4, H3, 4+4+4+4, //8 M6, 2, M7, 2, H1, 4, M7, 4, H2, 2, H2, 2, H1, 4+2, M5, 2+4+4, H4, 4, H3, 4, H3, 4, H1, 4, //9 H3, 4+4+4, H3, 4, H6, 4+4, H5, 4, H5, 4, H3, 2, H2, 2, H1, 4+4, P, 2, H1, 2, //10 H2, 4, H1, 2, H2, 2, H2, 4, H5, 4, H3, 4+4+4, H3, 4, H6, 4+4, H5, 4+4, //11 H3, 2, H2, 2, H1, 4+4, P, 2, H1, 2, H2, 4, H1, 2, H2, 2+4, M7, 4, M6, 4+4+4, P, 4, 0xFF //终止标志 }; unsigned char FreqSelect,MusicSelect; void main() { Timer0Init(); while(1) { if(Music[MusicSelect]!=0xFF) //如果不是停止标志位 { FreqSelect=Music[MusicSelect]; //选择音符对应的频率 MusicSelect++; Delay(SPEED/4*Music[MusicSelect]); //选择音符对应的时值 MusicSelect++; TR0=0; Delay(5); //音符间短暂停顿 TR0=1; } else //如果是停止标志位 { TR0=0; while(1); } } } void Timer0_Routine() interrupt 1 { if(FreqTable[FreqSelect]) //如果不是休止符 { /*取对应频率值的重装载值到定时器*/ TL0 = FreqTable[FreqSelect]%256; //设置定时初值 TH0 = FreqTable[FreqSelect]/256; //设置定时初值 Buzzer=!Buzzer; //翻转蜂鸣器IO口 } }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有