基于单片机的音乐播放器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于单片机的音乐播放器 The latest revision on November 22, 2020

基于51单片机的音乐播放器制作

一、设计原理

乐曲中有不音符,实质就是不同频率的声音。通过单片机产生不同的频率的脉冲信号,经过放大电路,由蜂鸣器放出,就产生了美妙和谐的乐曲。

二、AT89C51简介

AT89C51:是一种4K字节FLASH存储器的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AAT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

主要功能特性:

1)与MCS-51兼容;

2)4K字节可编程FLASH存储器;

3)全静态工作:0Hz-24MHz;

4)128×8位内部RAM;

5)两个16位定时器/计数器;

6)5个中断源;

7)可编程串行通道;

8)低功耗的闲置和掉电模式;

9)片内振荡器和时钟电路。

三、硬件结构

下图是以AT89C51单片机为核心的音乐播放器系统硬件设计结构图。该系统主要是由复位电路、按键电路、时钟电路、中心模块、扬声器驱动等组成。其工作原理为:此音乐播放器,有三个按键及控制按钮:播放/暂停、下一曲、上一曲;通过控制按钮控制单片机,播放所要求的音乐,并通过放大电路和喇叭输出声音。

三、简易仿真原理图

四、音乐发声设计原理

发声原理

一首乐曲是由多个音符构成的。每个音符都对应着一个确定的频率,乐曲中不同的音符,实质就是不同频率的声音;另外每个音符会根据乐曲的要求设定一个确定的节拍。可以控制单片机不同频率不同节拍的脉冲信号,蜂鸣器发出就产生了美妙和谐的乐曲。

单片机产生不同频率脉冲信号的原理

1、要产生音频脉冲,只要算出来某一个音频的脉冲(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这半周期的时间,每当计时到后就降输出脉冲I/O反相,然后重复计时此半周期的时间再对I/O反相,就可以在I/O脚上得到此频率的脉冲。

2、计算脉冲值与频率的关系公式如下:N=Fi/2/Fr

其中N表示计数值;Fi表示内部计时一次为1uS,故其频率为1MHz;Fr表示要产生的频率。

3、其计数值的求法如下:T=65536-N=65536-Fi/2/Fr

4、每个音符使用1个字节,字节高4位代表音符高低,低4位代表音符节拍。假设1/4节拍为1DELAY,则1拍应为4DELAY,以此类推。只要求得1/4拍的DELAY时间,其余节拍则为它的倍数,此设计取4/4调值,延时时间125ms,其中节拍码与实际节拍对照表如下表所示。

五、音乐播放程序设计

#include <>

#include <>

#include <>

#define uchar unsigned char

#define uint unsigned int

#define w_c_add XBYTE[0x2070] /* 写命令字地址 */

#define w_d_add XBYTE[0x2071] /* 写数据地址 */

#define r_s_add XBYTE[0x2072] /* 读状态字地址 */

#define r_d_add XBYTE[0x2073] /* 读数据地址 */

uchar code * song;

uchar code * song_name;

uchar code * song_lrc;

uchar code

tab[]={0xf8,0x94,0xf9,0x5c,0xfa,0x1a,0xfa,0x6a,0xfb,0x00,0xfb,0x8c,0x fc,0x0e,

0xfc,0x4a,0xfc,0xae,0xfd,0x08,0xfd,0x30,0xfd,0x80,0xfd,0xc6,0xfe,0x02,

0xfe,0x2a,0xfe,0x5c,0xfe,0x84,0xfe,0x98,0xfe,0xc0,0xfe,0xe8,0xfe,0x06 };

uchar code

song_name3[18]={0xc7,0xfa,0xc4,0xbf,0xc8,0xfd,0xa1,0xc3,0xc9,0xfa,0xc 8,0xd5,0xbf,0xec,0xc0,0xd6,0xff};//生日快乐

uchar code

song3[]={0xC4,0x12,0x32,0x44,0x42,0x52,0x52,0x44,0x32,0x32,0x12,0x14,

0x12,0x12,0x32,0x42,0x54,0x44,0x4F,0xC4,0x12,0x32,0x44,0x42,

0x72,0x58,0x42,0x32,0x34,0x14,0x12,0x32,0x34,0x12,0x1F,0xff};

uchar code song_lrc3[]={"祝你生日快乐祝你生日快乐 HAPPY BIRTHDAY TO YOU 祝你生日快乐"};

相关文档
最新文档