最近在制作一个单片机音乐播放器,遂查询网上的实例,但发现都不是特别全面。所以在自研了一段时间后的出实例,发表此文用以记录,以防忘记。诸位也可拿去参见。若有不足,请谅解。
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;
***it 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;
}
}
}
参照以下
音符频率对照表
翻译乐谱
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.首先了解声音是一种波,声波。波有周期和频率,其关系为:
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;
***it 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;
}
}
}
参照以下
音符频率对照表
翻译乐谱
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);
数据结构核心原理与算法应用
举报