1、 基于基于 5151 单片机音乐播放器设计单片机音乐播放器设计 1. 1. 概述概述 基于单片机的音乐播放器可应用于 mp3,MP4,扩音器等很多方面,并可作 为很多系统的辅助功能,作为单片机的重要硬件资源之一,利用定时器可以产 生各种固定频率的方波信号,也可以产生包括“Do“、“Re“、“Me“-等音阶在内 的各种频率声音。将各个音阶连接在一起,便可组成一支曲子或是演奏一段旋 律。 基于这个思想, 我设计了一款特殊的“音乐播放器“, 本播放器可实现播放、 切换、复位等功能。由于时间及条件限制,本设计实现了一种简单的音乐播放 器,其核心器件采用 STC89C52 单片机,本播放器具有电路简单,
2、易于拓展等 特点。在此基础上,可以添加按键,LED 显示屏等模块,实现切换歌曲,歌名 显示等功能。 2.2.硬件电路设计硬件电路设计 2.12.1 设计目的设计目的 设计一个音乐播放器,有五个按键及控制按钮:播放、切换、复位,通过 控制按钮控制单片机,播放所要求的音乐,并通过放大电路和喇叭输出声音。 演奏结束时,LED 灯亮。 2.2 2.2 电路设计原理电路设计原理 图 1 电路设计原理图 STC89C52 电源电源 复位电路复位电路 12M 晶振电路晶振电路 LED 显示电路显示电路 按键控制电按键控制电 路路 发声电路发声电路 3.13.1 主程序流程图主程序流程图 NONO Y Y 3
3、.23.2节拍的产生节拍的产生 音乐中的节拍用延时时间产生。例如:1拍=0.4s,1/2=0.2s,以此类推。 开始开始 初始化初始化 查询按键查询按键 按下按下? 播放歌曲播放歌曲 音乐播放完毕音乐播放完毕 LED 显示显示 只要求出1/2拍的延时时间,其余节拍是他的倍数就行了。 得到音符并加上起 对应的节拍就可得到音调。以此将音调连起来就可获得曲子。 3.3 3.3 程序设计程序设计 播放器程序 #include #define uchar unsigned char bit flag; /标志音乐输出脚电平的高低 sbit beep=P14; uchar ptr = 0x00; /取音符
4、 uchar high; /计数器高位 uchar low; /计数器低位 / 本曲谱为 “新年好“,前两个十六进制表示发声频率,后一个表示发声时 间,0xFF,0xFF 表示休止符 / 0x00 表示结束 / 1 _ 1_ 1 .5 uchar code music = 0xFC,0x44,0x7F, 0xFC,0x44,0x7F, 0xFC,0x44,0xFF, 0xFA,0x68,0xFF, / 3 _ 3_ 3 1 0xFD,0x23,0x7F, 0xFD,0x23,0x7F, 0xFD,0x23,0xFF, 0xFC,0x44,0xFF, / 1_ 3_ 5 5 0xFC,0x44,
5、0x7F, 0xFD,0x23,0x7F, 0xFD,0x82,0xFF, 0xFD,0x82,0xFF, / 4_ 3_ 2 - 0xFD,0x23,0x7F, 0xFD,0x23,0x7F, 0xFC,0xAC,0xFF, 0xFF,0xFF,0xFF, / 2_ 3_ 4 4 0xFC,0xAC,0x7F, 0xFD,0x23,0x7F, 0xFD,0x34,0xFF, 0xFD,0x34,0xFF, / 3_ 2_ 3 1 0xFD,0x23,0x7F, 0xFC,0xAC,0x7F, 0xFD,0x23,0xFF, 0xFC,0x44,0xFF, / 1_ 3_ 2 .5 0xFC,
6、0x44,0x7F, 0xFD,0x23,0x7F, 0xFC,0xAC,0xFF, 0xFA,0x68,0xFF, / .7_ 2_ 1 - 0xFC,0x0C,0x7F, 0xFC,0xAC,0x7F, 0xFC,0x44,0xFF, 0xFF,0xFF,0xFF, 0x00/结束 ; void Init(void); /初始化函数 void DelayMs(unsigned int time); /毫秒级延时函数 void main() uchar time; Init(); TH0 = high; TL0 = low; while (1) if (musicptr != 0xFF beep = 1; DelayMs(10); /间歇 TR0 = 1; high = musicptr; /取设置频率数值的高 8 位 low = musicptr + 1; /取设置频率数值的低 8 位 time = musicptr + 2; /取发声时间 DelayMs(time); p