基于单片机的音乐播放器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于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 祝你生日快乐"};