MCU-51:单片机蜂鸣器播放音乐和提示音
目录
- 一、蜂鸣器介绍
- 二、驱动电路
- 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:单片机蜂鸣器播放音乐和提示音相关推荐
- 51单片机蜂鸣器播放音乐C语言程序实例,基于proteus的51单片机仿真实例八十八、用蜂鸣器播放一段音乐应用实例...
1.前面我们已经学习了如何让单片机控制蜂鸣器发出不同的声音.现在我们更进一步,让单片机控制蜂鸣器发出再复杂一些的声音:模拟乐音输出 2.关于音乐的乐谱和节拍这些知识,我们将在下一节进一步说明 3.在k ...
- 51单片机蜂鸣器播放音乐C语言程序实例,51单片机蜂鸣器音乐之八月桂花播放源程序...
/************************************************************************ [文件名] C51音乐程序(八月桂花) [功能] ...
- 51单片机蜂鸣器播放天空之城
51单片机蜂鸣器播放天空之城 附:天空之城乐谱 第三张图片中65行46968改为64968,希望凉解.(由于本人对乐谱知之甚少,上述有关音符代码由网络提供.如有错误,敬请雅正.)
- python蜂鸣器天空之城频率_51单片机蜂鸣器播放音乐天空之城PPT教程+程序+Proteus仿真...
/*************** author:zc description: 蜂鸣器播放音乐 天空之城 晶振11.0592Mhz 实现方法: while(1)循环中生成音调方波: 定时器1记录每个音 ...
- 利用51单片机蜂鸣器播放《只因你太美》代码
使用以下代码在51单片机上控制蜂鸣器播放"只因你太美"的音乐: #include <reg51.h> #include <intrins.h>#define ...
- 51单片机 蜂鸣器播放提示音
主函数 #include <REGX52.H> #include "Delay.h" #include "Key.h" #include " ...
- 基于51单片机蜂鸣器的音乐播放器设计C
原理图: 代码: #include <reg51.h> #include <stdio.h> sbit beep = P2^3; unsigned char timer0h, ...
- MCU-51:单片机蜂鸣器播放孤勇者
目录 一.蜂鸣器介绍 二.驱动电路 2.1 三极管驱动 2.2 集成电路驱动 三.蜂鸣器播放音乐 3.1 键盘与音符对照 3.2 音符与频率对照 四.孤勇者乐谱 五.代码演示 前面学习了 MCU-51 ...
- 51单片机_11-2 蜂鸣器播放音乐
文章目录 要求 资源 main函数 要求 控制蜂鸣器播放音乐 资源 工程文件压缩包 链接:https://pan.baidu.com/s/1hA-aa0JRP33IlOYFNzKf7A 提取码:0id ...
最新文章
- mysql vue 菜谱_vue+ java 实现多级菜单递归效果
- C 语言编程 — 静态库、动态库和共享库
- 致青春VS杜蕾斯,用QQ空间电影大数据解读关联性
- android录制视频横向,Android从零开始(26)(设置全屏+横屏、相机拍照、视频录制)(新)...
- Spark Java API:foreach、foreachPartition、lookup
- less linux命令,less 命令用法详解
- 大家都在用这个神器分析数据,而你还只会Excel表头过滤?
- 静态类 c# 1615139615
- 微课|中学生可以这样学Python(例11.3):tkinter通信录管理系统1
- 从中台、数仓与元数据不为人知的3个角度,看数据管理的生与死
- java 复制mysql某张表_java实现mysql数据库从一张表插入数据到另一张表
- “吃神么,买神么”的第一个Sprint计划(第三天)
- ELK日志分析系统迁移记录
- rabbitnq 源码安装_RabbitMQ的安装步骤
- mysql mssql 性能对比_详解mysql分区实验测试--非分区表与分区表的性能对比
- 3D建模软件的选择(UG,Solidworks,ProE)
- iOS UI 自动化测试原理以及在 Trip.com 的应用实践
- 爆品思维——TRIZ创新方法在工作中的运用--张维明老师--沪师刘建
- 我个人总结的Halcon内存管理心得笔记,关于C#/C++内存释放
- [渝粤题库]西北工业大学中国古代法制史