当前位置:   article > 正文

单片机 89c52rc C语言设计 蜂鸣器变频 实现音乐播放_stc89c52rc音乐播放器

stc89c52rc音乐播放器

单片机 89c52rc C语言设计 蜂鸣器变频

最近在制作一个单片机音乐播放器,遂查询网上的实例,但发现都不是特别全面。所以在自研了一段时间后的出实例,发表此文用以记录,以防忘记。诸位也可拿去参见。若有不足,请谅解。

1.首先了解声音是一种波,声波。波有周期和频率,其关系为:
f(频率)=1/t(周期)

2.其次在多数电子设备设备中也存在着(机器)周期和(时钟)频率,89c52rc 的默认频率为11.0592MHz ,一个默认的计算周期为12T。

3.所以得出结论:
T(声)=f(时钟)/12t

依靠每一次计算的时差,累加得到音频周期,启动一次蜂鸣器。
制作出如下流程图。

在这里插入图片描述

#include    "reg52.h"
#define Fosc 110592L   //时钟频率

typedef unsigned char	u8;
typedef unsigned int	u16;
typedef unsigned long   u32;

sbit P23=P2^3;//连接蜂鸣器阳极的针脚

void buzzer(u8 f,u8 time_ms);

void main(void)
{
			buzzer(1,10);
}

void buzzer(u8 f,u8 time_ms)
{
	u16 time = (Fosc / 2400)*time_ms;
	u16 C = 110592/(72*f),x=0;
	for(;time>=0;time--)
	{
		if(x>=C){
			P23=0;
			x=0;
		}else{
			x++;
			P23=1;
		}
	}
}


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

参照以下
音符频率对照表

翻译乐谱
在这里插入图片描述
BPM为184拍,每60/184=0.326秒一拍。

得出以下程序

			buzzer(784,163);
			buzzer(698,163);
			buzzer(440,326);
			buzzer(494,326);
			buzzer(659,163);
			buzzer(578,163);
			buzzer(349,326);
			buzzer(392,326);
			buzzer(578,163);
			buzzer(523,163);
			buzzer(330,326);
			buzzer(392,326);
			buzzer(523,978);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

仓库地址

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/554268
推荐阅读
相关标签
  

闽ICP备14008679号