首页 > 其他分享 >15_蜂鸣器

15_蜂鸣器

时间:2023-11-19 13:56:03浏览次数:29  
标签:15 H2 H3 H1 M7 蜂鸣器 include define

蜂鸣器

介绍

image-20231115160654625

驱动电路

image-20231115160932723

ULN2003

image-20231115161007599

键盘与音符对照

image-20231115161031965

音符与频率对照

image-20231115161147712

简谱

image-20231115161051859

image-20231115161231961

独立按键触发蜂鸣器按时长发声

Buzzer.c

#include <REGX52.H>
#include "Delay.h"
#include "intrins.h"

//蜂鸣器端口
sbit BEEP=P2^5;

/**
  * @brief 蜂鸣器私有延时函数,延时500us
  * @param 无
  * @retval 无
  */
void Buzzer_Delay500us(void)	//@12.000MHz
{
	unsigned char data 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++)
	{
		BEEP=!BEEP;
		Buzzer_Delay500us();
	}
}

Buzzer.h

#ifndef __BUZZER_H__
#define __BUZZER_H__

void Buzzer_Time(unsigned int ms);

#endif

main.c

#include <REGX52.H>
#include "Delay.h"
#include "Key.h"
#include "Nixie.h"
#include "Buzzer.h"

unsigned char KeyNum;

void main()
{
	while(1)
	{
		KeyNum=Key();
		if(KeyNum)
		{
			Buzzer_Time(100);
		}
	}
}

蜂鸣器播放小星星

Timer0.c

#include <REGX52.H>

/**
* @brief 定时器0初始化,1毫秒@12.000MHz
  * @param 无
  * @retval 无
  */
void Timer0_Init(void)
{
	TMOD &= 0xF0;			//设置定时器模式
	TMOD |= 0x01;			//设置定时器模式
	TL0 = 0x18;				//设置定时初始值
	TH0 = 0xFC;				//设置定时初始值
	TF0 = 0;				//清除TF0标志
	TR0 = 1;				//定时器0开始计时
	ET0=1;
	EA=1;
	PT0=0;
}

/* 定时器中断函数模板
void Timer0_Routine() interrupt 1
{
	static unsigned int T0Count;
	TL0 = 0x18;
	TH0 = 0xFC;
	T0Count++;
	if(T0Count>=1000)
	{
		T0Count=0;
		
	}
}
*/

Timer0.h

#ifndef __TIMER0_H__
#define __TIMER0_H__

void Timer0_Init(void);

#endif

main.c

#include <REGX52.H>
#include "Delay.h"
#include "Timer0.h"

#define SPEED 250

//蜂鸣器端口
sbit BEEP=P2^5;

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,6519865217,65235,65252,65268,65283,
};
unsigned char Music[]={
	13,4,
	13,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,
};

unsigned char FreqSelect,MusicSelect;

void main()
{
	Timer0_Init();
	while(1)
	{
		if(MusicSelect<sizeof(Music))
		{
			FreqSelect=Music[MusicSelect++];
			Delay(SPEED/4*Music[MusicSelect++]);
			TR0=0;
			Delay(5);
			TR0=1;
		}
		else
		{
			MusicSelect=0;
		}
	}
}

void Timer0_Routine() interrupt 1
{
	if(FreqTable[FreqSelect])
	{
		TL0 = FreqTable[FreqSelect]%256;
		TH0 = FreqTable[FreqSelect]/256;
		BEEP=!BEEP;
	}
	
}

蜂鸣器播放天空之城

main.c

#include <REGX52.H>
#include "Delay.h"
#include "Timer0.h"

#define SPEED 250

#define P 	0
#define L1  1
#define L1_ 2
#define L2  3
#define L2_ 4
#define L3  5
#define L4  6
#define L4_ 7
#define L5  8
#define L5_ 9
#define L6  10
#define L6_ 11
#define L7  12
#define M1  13
#define M1_ 14
#define M2  15
#define M2_ 16
#define M3  17
#define M4  18
#define M4_ 19
#define M5  20
#define M5_ 21
#define M6  22
#define M6_ 23
#define M7  24
#define H1  25
#define H1_ 26
#define H2  27
#define H2_ 28
#define H3  29
#define H4  30
#define H4_ 31
#define H5  32
#define H5_ 33
#define H6  34
#define H6_ 35
#define H7  36

//蜂鸣器端口
sbit BEEP=P2^5;

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,6519865217,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,
	
};

unsigned char FreqSelect,MusicSelect;

void main()
{
	Timer0_Init();
	while(1)
	{
		if(MusicSelect<sizeof(Music))
		{
			FreqSelect=Music[MusicSelect++];
			Delay(SPEED/4*Music[MusicSelect++]);
			TR0=0;
			Delay(5);
			TR0=1;
		}
		else
		{
			MusicSelect=0;
		}
	}
}

void Timer0_Routine() interrupt 1
{
	if(FreqTable[FreqSelect])
	{
		TL0 = FreqTable[FreqSelect]%256;
		TH0 = FreqTable[FreqSelect]/256;
		BEEP=!BEEP;
	}
	
}

标签:15,H2,H3,H1,M7,蜂鸣器,include,define
From: https://www.cnblogs.com/mzx233/p/17841974.html

相关文章

  • CF1552D题解
    CF1552D题解思路首先,$a_i$的正负不重要,如果$a_i=b_j-b_k$,那么就有$-a_i=b_k-b_j$,读入时将$a_i$全部转化为正数。若满足$a_i+a_j+\ldots+a_k$,那么就可以构造出$b$序列,否则不行。从左到右遍历一遍$a$序列,动态规划推出所有可以组成的和,并判断是否满足上式,时间复杂度$O......
  • 代码随想录算法训练营第七天 | ● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和
    今日学习的文章链接和视频链接https://programmercarl.com/链表理论基础.html●454.四数相加IIvarfourSumCount=function(nums1,nums2,nums3,nums4){letcount=0letmap=newMap();for(letnumber1ofnums1){for(letnumber2ofnums......
  • 【15章】网络安全主动防御技术与应用
    15.1入侵阻断技术与应用入侵阻断是网络安全主动防御的技术方法,其基本原理是通过对目标对象的网络攻击行为进行阻断,从而达到保护目标对象的目的。15.1.1入侵阻断技术原理防火墙、IDS是保障网络安全不可缺少的基础技术,但是防火墙和IDS本身存在技术上的缺陷。防火墙是基于静......
  • L1-6 吉老师的回归 (15 分)(C/C++)
    输入样例1:51L1-1isaqiandaoproblem.L1-2isso...easy.L1-3isEasy.L1-4isqianDao.Wow,suchL1-5,soeasy.输出样例1:L1-4isqianDao.输入样例2:54L1-1isa-qiandaoproblem.L1-2issoeasy.L1-3isEasy.L1-4isqianDao.Wow,suchL1-5,so!!easy.输出样例......
  • AO3415-ASEMI低压MOS管AO3415参数、封装、尺寸
    编辑:llAO3415-ASEMI低压MOS管AO3415参数、封装、尺寸型号:AO3415品牌:ASEMI封装:SOT-23连续漏极电流(Id):4A漏源电压(Vdss):20V功率(Pd):1.5W芯片个数:1引脚数量:3类型:MOS管特性:P沟道MOS管、低压MOS管RDS(on):55mΩVGS:1.45封装尺寸:如图工作温度:-55°C~150°CAO3415特性:AO3415采用先进的沟槽......
  • AO3415-ASEMI低压MOS管AO3415参数、封装、尺寸
    编辑:llAO3415-ASEMI低压MOS管AO3415参数、封装、尺寸型号:AO3415品牌:ASEMI封装:SOT-23连续漏极电流(Id):4A漏源电压(Vdss):20V功率(Pd):1.5W芯片个数:1引脚数量:3类型:MOS管特性:P沟道MOS管、低压MOS管RDS(on):55mΩVGS:1.45封装尺寸:如图工作温度:-55°C~150°CAO3415特性:AO......
  • 软件设计实验15:职责链模式
    实验15:职责链模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解职责链模式的动机,掌握该模式的结构;2、能够利用职责链模式解决实际问题。 [实验任务一]:财务审批某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万......
  • (链表)15-删除有序链表中的重复元素-a
    1importjava.util.*;23/*4*publicclassListNode{5*intval;6*ListNodenext=null;7*publicListNode(intval){8*this.val=val;9*}10*}11*/12publicclassSolution{13/**14*@paramhead......
  • [20231115]如何快速获取AWR中涉及到的表.txt
    [20231115]如何快速获取AWR中涉及到的表.txt--//昨天看了链接:如何快速获取AWR中涉及到的表=>https://www.cnblogs.com/jyzhao/p/how-to-get-tables-in-awr.html--//作者介绍的方法是直接从awr报表抽取from后面的信息,grep写法还很少用.grep-o-i'\bFROM\s\+\(\w\+\)'awr.html......
  • 关于 Angular 构建之后生成的 dist 目录和 esm2020, fesm2015 等等
    在Angular应用中,dist目录是构建应用后的输出目录,其中包含了已编译、打包和优化的应用文件。assets文件夹通常用于存放应用所需的静态资源,如图片、字体、配置文件等。esm2020、fesm2015和fesm2020是Angular构建过程中生成的文件夹,它们主要与Angular的模块加载系统和代码优化有关。......