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

这篇具有很好参考价值的文章主要介绍了MCU-51:单片机蜂鸣器播放音乐和提示音。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、蜂鸣器介绍

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

单片机蜂鸣器编程音乐,51单片机学习,单片机,嵌入式硬件,51单片机,c语言

二、驱动电路

2.1 三极管驱动

单片机蜂鸣器编程音乐,51单片机学习,单片机,嵌入式硬件,51单片机,c语言

2.2 集成电路驱动

单片机蜂鸣器编程音乐,51单片机学习,单片机,嵌入式硬件,51单片机,c语言
单片机蜂鸣器编程音乐,51单片机学习,单片机,嵌入式硬件,51单片机,c语言

三、蜂鸣器播放音乐

3.1 键盘与音符对照

单片机蜂鸣器编程音乐,51单片机学习,单片机,嵌入式硬件,51单片机,c语言

3.2 音符与频率对照

单片机蜂鸣器编程音乐,51单片机学习,单片机,嵌入式硬件,51单片机,c语言

3.3 简谱

单片机蜂鸣器编程音乐,51单片机学习,单片机,嵌入式硬件,51单片机,c语言

四、代码演示

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口
	}
}

注意:一定要看

千万不要直接复制代码,因为是模块化编写,模块的代码没有往上复制,大家一定要自己动手跟着教学视屏自己写!!!!!文章来源地址https://www.toymoban.com/news/detail-781256.html

到了这里,关于MCU-51:单片机蜂鸣器播放音乐和提示音的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 5-51单片机-蜂鸣器实验

            1. 对系统默认的数据类型进行重定义,u8,u16;         2.延时函数,主要是将传过来的整数进行减减实现延时;         3.还用到了while()循环;         1. 首次定义一个变量,主要是为了延时蜂鸣器响亮的时长;         2.通过while()循环,使得Buzzer_Port产生脉冲信号,从而使蜂

    2024年04月16日
    浏览(26)
  • 【【51单片机蜂鸣器实现起风了】】

    前面的有两个非常关键的点希望兄弟们明白 我一开始也失算了 这里兄弟们注意务必改成int 不然会超出 就会出现播放一半从头开始的情况 下面是两份起风了代码直接附上main.c 因为另外的其实和我之前说的模板都一样复制粘贴就行 为什么是2份因为什么ABCD大调我不懂啊 我看乐

    2024年02月16日
    浏览(91)
  • 51单片机学习笔记-9蜂鸣器

    [toc] 注:笔记主要参考B站江科大自化协教学视频“51单片机入门教程-2020版 程序全程纯手打 从零开始入门”。 注:工程及代码文件放在了本人的Github仓库。 蜂鸣器 是一种将电信号转换为声音信号的器件,常用来产生设备的按键音、报警音等提示信号。蜂鸣器按驱动方式可分

    2024年02月06日
    浏览(27)
  • 【【51单片机的蜂鸣器实现小星星】】

    我们在设置板子的时候要翻转 翻转IO口是因为使用了步进电机的多余的芯片管脚 我们翻转之后还想让它保持一段时间 就是先翻转500次 Delay(1)之后 就是最小的单位每隔1ms 周期就是2ms 频率就是500HZ 蜂鸣器播放音乐 我们首先在前面到现在必须明白一个道理 就是我们的蜂鸣器发

    2024年02月16日
    浏览(30)
  • 使用单片机控制蜂鸣器播放音乐的代码

    在嵌入式系统中,单片机常常被用于控制各种外设,其中包括蜂鸣器。蜂鸣器是一种能够发出声音的电子元件,可以通过单片机的控制来播放各种音乐或声效。本文将介绍如何使用单片机控制蜂鸣器播放音乐,并提供相应的源代码。 在开始编写代码之前,我们首先需要确定使

    2024年02月01日
    浏览(25)
  • stm32单片机/51单片机蜂鸣器不响(proteus模拟)

    1提高蜂鸣器电阻,这样根据分压原理,可以提升蜂鸣器2段电压 2更改蜂鸣器的工作电压为更小的值,这个可以通过在proteus内设置探针查看电压值,更改为其值就可以了 我觉得如果不是仿真的话,蜂鸣器额定电压是不能改的,如果电压不够的话好像就只能够选用合适的三极管

    2024年02月11日
    浏览(25)
  • 33、基于51单片机老人防跌倒蜂鸣器报警系统加速度检测

    背景技术 老年人出门由于身体不灵活、视力较差,容易发生跌倒,现用的老年人跌倒报警装置是通过无线对讲系统研发的,它外观精美,自动化程度高,有很强的专业性,但是,设计者忽略了一个问题,因为大多数老年人使用现代化产品不熟练,随着视力、操作能力的下降,

    2023年04月08日
    浏览(66)
  • 【51单片机】:闪灯、流水灯(从左往右)、流水灯(从右往左)、蜂鸣器。

            言归正传,一切都回归本源,从51再来一次,首先就是最简单的点灯大师。         这么些年从51 到  32  再到  arduino  再到  ESP  等等,都是从点灯大师开始的。 于是介绍如下: 闪灯 流水灯(从左往右) 流水灯(从右往左) 蜂鸣器         LED灯的原理:LED是发

    2024年02月11日
    浏览(32)
  • 基于51单片机的烟雾检测+温度检测+蜂鸣器报警+光耦+风扇+LCD4602液晶显示(含原理图/PCB/代码)

    讲在前面: 51单片机是大多数电子爱好者的入门级单片机,这款设计是一个比较综合的单片机设计。本文介绍了一个典型的51单片机设计,希望对各位有帮助。 本人也在其他平台开源了一些项目和分享: 点击进入B站传送门 1)产品功能: 使用51单片机作为控制器,与ADC0832(

    2024年01月22日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包