目录

  • 一、蜂鸣器介绍
  • 二、驱动电路
    • 2.1 三极管驱动
    • 2.2 集成电路驱动
  • 三、蜂鸣器播放音乐
    • 3.1 键盘与音符对照
    • 3.2 音符与频率对照
    • 3.3 简谱
  • 四、代码演示
    • 4.1 按键蜂鸣器播放提示音
    • 4.2 小星星
  • 注意:一定要看

一、蜂鸣器介绍

蜂鸣器是一种将电信号转换为声音信号的器件,常用来产生设备的按键音、报警音等提示信号
蜂鸣器按驱动方式可分为有源蜂鸣器和无源蜂鸣器
有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定
无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音

二、驱动电路

2.1 三极管驱动

2.2 集成电路驱动


三、蜂鸣器播放音乐

3.1 键盘与音符对照

3.2 音符与频率对照

3.3 简谱

四、代码演示

4.1 按键蜂鸣器播放提示音

main.c

#include <REGX52.H>
#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 <REGX52.H>
#include "Delay.h"    //包含Delay头文件//数码管段码表
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//数码管显示子函数
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 <REGX52.H>
#include <INTRINS.H>
#include "Delay.h"//蜂鸣器端口
sbit Buzzer=P2^5;/*** @brief  蜂鸣器私有延时函数,延时500us* @param  无* @retval 无*/void Buzzer_Delay500us()      //@12.000MHz
{unsigned char i;_nop_();i = 247;while (--i);
}/*** @brief  蜂鸣器发声* @param  ms 发声时长* @retval 无*/void Buzzer_Time(unsigned int ms)
{unsigned int i;for(i=0;i<ms*2;i++){Buzzer=!Buzzer;Buzzer_Delay500us();}
}

Buzzer.h

#ifndef __BUZZER_H__
#define __BUZZER_H__void Buzzer_Time(unsigned int ms);#endif

Nixie.h

#ifndef __NIXIE_H__
#define __NIXIE_H__void Nixie(unsigned char Location,Number);#endif

key.c

#include <REGX52.H>
#include "Delay.h"unsigned char Key()
{unsigned char KeyNumber=0;if(P3_1==0){Delay(20);while(P2_1==0);Delay(20);KeyNumber=1;}if(P3_0==0){Delay(20);while(P2_0==0);Delay(20);KeyNumber=2;}if(P3_2==0){Delay(20);while(P2_2==0);Delay(20);KeyNumber=3;}if(P3_3==0){Delay(20);while(P2_3==0);Delay(20);KeyNumber=4;}return KeyNumber;}

key.h

#ifndef __KEY_H__
#define __KEY_H__unsigned char Key();#endif

Delay.c


void Delay(unsigned int i)
{while(i--);
}

Delay.h

#ifndef __DELAY_H__
#define __DELAY_H__void Delay(unsigned int i);#endif

4.2 小星星

#include <REGX52.H>
#include "Delay.h"
#include "Timer0.h"//蜂鸣器端口定义
sbit Buzzer=P2^5;//播放速度,值为四分音符的时长(ms)
#define SPEED   50//索引与频率对照表
unsigned int FreqTable[]={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  Music[]={13,4,14,4,20,4,20,4,22,4,22,4,20,4+4,0,4,18,4,18,4,17,4,17,4,15,4,15,4,13,4+4,0xFF,
};unsigned char FreqSelect,MusicSelect;void main()
{Timer0_Init();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口}
}

注意:一定要看

千万不要直接复制代码,因为是模块化编写,模块的代码没有往上复制,大家一定要自己动手跟着教学视屏自己写!!!!!

MCU-51:单片机蜂鸣器播放音乐和提示音相关推荐

  1. 51单片机蜂鸣器播放音乐C语言程序实例,基于proteus的51单片机仿真实例八十八、用蜂鸣器播放一段音乐应用实例...

    1.前面我们已经学习了如何让单片机控制蜂鸣器发出不同的声音.现在我们更进一步,让单片机控制蜂鸣器发出再复杂一些的声音:模拟乐音输出 2.关于音乐的乐谱和节拍这些知识,我们将在下一节进一步说明 3.在k ...

  2. 51单片机蜂鸣器播放音乐C语言程序实例,51单片机蜂鸣器音乐之八月桂花播放源程序...

    /************************************************************************ [文件名]  C51音乐程序(八月桂花) [功能]  ...

  3. 51单片机蜂鸣器播放天空之城

    51单片机蜂鸣器播放天空之城 附:天空之城乐谱 第三张图片中65行46968改为64968,希望凉解.(由于本人对乐谱知之甚少,上述有关音符代码由网络提供.如有错误,敬请雅正.)

  4. python蜂鸣器天空之城频率_51单片机蜂鸣器播放音乐天空之城PPT教程+程序+Proteus仿真...

    /*************** author:zc description: 蜂鸣器播放音乐 天空之城 晶振11.0592Mhz 实现方法: while(1)循环中生成音调方波: 定时器1记录每个音 ...

  5. 利用51单片机蜂鸣器播放《只因你太美》代码

    使用以下代码在51单片机上控制蜂鸣器播放"只因你太美"的音乐: #include <reg51.h> #include <intrins.h>#define ...

  6. 51单片机 蜂鸣器播放提示音

    主函数 #include <REGX52.H> #include "Delay.h" #include "Key.h" #include " ...

  7. 基于51单片机蜂鸣器的音乐播放器设计C

    原理图: 代码: #include <reg51.h> #include <stdio.h> sbit beep = P2^3; unsigned char timer0h, ...

  8. MCU-51:单片机蜂鸣器播放孤勇者

    目录 一.蜂鸣器介绍 二.驱动电路 2.1 三极管驱动 2.2 集成电路驱动 三.蜂鸣器播放音乐 3.1 键盘与音符对照 3.2 音符与频率对照 四.孤勇者乐谱 五.代码演示 前面学习了 MCU-51 ...

  9. 51单片机_11-2 蜂鸣器播放音乐

    文章目录 要求 资源 main函数 要求 控制蜂鸣器播放音乐 资源 工程文件压缩包 链接:https://pan.baidu.com/s/1hA-aa0JRP33IlOYFNzKf7A 提取码:0id ...

最新文章

  1. mysql vue 菜谱_vue+ java 实现多级菜单递归效果
  2. C 语言编程 — 静态库、动态库和共享库
  3. 致青春VS杜蕾斯,用QQ空间电影大数据解读关联性
  4. android录制视频横向,Android从零开始(26)(设置全屏+横屏、相机拍照、视频录制)(新)...
  5. Spark Java API:foreach、foreachPartition、lookup
  6. less linux命令,less 命令用法详解
  7. 大家都在用这个神器分析数据,而你还只会Excel表头过滤?
  8. 静态类 c# 1615139615
  9. 微课|中学生可以这样学Python(例11.3):tkinter通信录管理系统1
  10. 从中台、数仓与元数据不为人知的3个角度,看数据管理的生与死
  11. java 复制mysql某张表_java实现mysql数据库从一张表插入数据到另一张表
  12. “吃神么,买神么”的第一个Sprint计划(第三天)
  13. ELK日志分析系统迁移记录
  14. rabbitnq 源码安装_RabbitMQ的安装步骤
  15. mysql mssql 性能对比_详解mysql分区实验测试--非分区表与分区表的性能对比
  16. 3D建模软件的选择(UG,Solidworks,ProE)
  17. iOS UI 自动化测试原理以及在 Trip.com 的应用实践
  18. 爆品思维——TRIZ创新方法在工作中的运用--张维明老师--沪师刘建
  19. 我个人总结的Halcon内存管理心得笔记,关于C#/C++内存释放
  20. [渝粤题库]西北工业大学中国古代法制史

热门文章

  1. 电子商务组成与流程框架
  2. java ikanalyzer分词_利用ikanalyzer分词
  3. 那些年,在MSRA实习过的女孩,现在都怎么样了?
  4. excel表格如何添加删除线
  5. 字符编码笔记:ASCII,Unicode 和 UTF-8
  6. QT16进制、英文转换
  7. 科技“扶智”走进四川阿坝,“书路计划”让藏区孩子爱上阅读
  8. 2010Asia Harbin Regional Contest----Seaside(HDU3665)
  9. 企业局域网无线认证解决方案
  10. 格密码开源库PALISADE的使用