基于单片机的音乐播放器
基于单片机的音乐播放器设计毕业论文
图书分类号:密级:毕业设计(论文)基于单片机的MP3播放器设计学生姓名汤明学院名称信电工程学院专业名称电子信息工程指导教师陈豹2012年5月10日摘要因为单片机编写的MP3播放器具有执行效率高、频率输出稳定、易于修改、高可靠性、高性价比、低电压、低功耗等,使单片机近几年得到迅猛发展和大范围推广,广泛应用于工业控制系统、数据采集系统、智能化仪器仪表、及通讯设备、日常消费类产品、玩具等[1] .利用单片机设计的MP3播放器具有硬件电路简单,软件运行可靠等特点。
本文介绍了一种以 AT89S52 单片机为控制核心的MP3。
该设计采用2*16个点阵液晶模块LCD1602作为显示界面,蜂鸣器作为发声元件,并利用定时器进行中断控制。
本文分析了基于单片机的MP3播放器的工作原理,详细介绍了MP3播放器的功能及其硬件设计和软件设计的方法,给出了基于MCS-51单片机的MP3播放器的具体实现方案并重点讲述了其硬件实现与软件编写,实现了单片机MP3播放器对音乐的演奏。
关键词:MP3播放器;AT89S52;LCD1602目录摘要 (I)1绪论 (1)2设计综述 (2)2。
1单片机工作原理 (2)2。
1。
1 单片机概述 (2)2。
1.2 单片机的应用领域及发展趋势 (2)2.2 单片机产生音调的方法 (3)2。
3 KEIL开发系统 (4)2.4 PROTEUS的操作 (8)3硬件设计 (9)3。
1总体方案设计 (9)3.2 单片机最小系统电路 (9)3.2。
1 AT89S52芯片性能介绍 (9)3。
2.2 电源电路 (13)3。
2.3 时钟振荡电路 (13)3。
3 键盘扫描模块 (15)3。
4 显示模块 (16)3.5 播放模块 (17)4 系统软件设计 (18)4。
1编程原理及流程图 (18)5 调试与仿真结果 (22)5.1 软件调试 (22)5.1.1 测试LED显示模块 (23)5。
1.2 测试键盘控制模块 (24)5.1.3 测试P3.0口输出 (24)5.2 调试中遇到的问题及解决 (25)5.3 仿真结果 (25)结束语 (26)致谢 (27)参考文献 (28)附录 (29)附录1 源程序 (29)1绪论几千年来,各种乐器的发声无一不是依靠琴弦、簧片、哨片引起管柱振动而作为声源的。
基于单片机控制的MP3音乐播放器的设计
目录1引言 (1)2硬件设计 (2)2.1硬件电路的设计框图 (2)2.2硬件电路设计模块的选定 (2)2.2.1中心模块 (2)2.2.2播放模块 (3)2.2.3显示模块 (4)2.2.4电子琴模块 (4)2.3各硬件电路的具体设计 (5)2.3.1 AT89S52控制模块的设计 (5)2.3.2按键模块的设计 (6)2.3.3扬声器播放模块的设计 (7)2.3.4 LCD显示电路的设计 (7)2.3.5彩灯伴奏电路的设计 (8)3软件设计 (9)3.1单片机发声的基本原理 (9)3.2设计的相关音乐说明 (9)3.3切换原理 (10)3.4音乐播放器软件程序设计 (10)3.4.1按键扫描子程序设计 (10)3.4.2 1ms延时程序设计 (14)3.4.3 LCD显示子程序设计 (15)3.4.4函数初始化子程序设计 (16)3.4.5系统主程序设计 (17)4结论 (19)参考文献 (20)附录一硬件原理图 (21)附录二软件主程序 (22)致谢............................................................................................................... 错误!未定义书签。
摘要目前流行的MP3播放器的音质已相当好,但略感遗憾的是除了选择歌曲和显示歌名外,绝大部分播放器没有诸如随意弹奏乐曲、乐曲节奏跳动等功能。
而随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一。
要为现代人工作、生活提供更好的更方便的服务就需要从单片机技术着手,一切向着数字化控制、智能化控制方向发展。
本设计是采用单片机为核心设计的数字音乐播放器。
本设计在实现音乐的播放及歌曲名显示等基本功能的基础上进行了扩展,添加了彩灯伴奏、按键弹奏、显示音乐节拍等功能。
本论文给出了系统方案的建立、硬件电路的详细设计及软件的程序实现。
基于单片机实现的音乐播放器设计
目录1、设计课题任务、功能要求说明及总体方案介绍1.1 设计课题任务 (1)1.2 功能要求说明 (1)1.3 设计课题总体方案介绍及工作原理说明 (1)2、设计课题硬件系统的设计2.1 设计课题硬件系统各模块功能简要介绍 (5)2.2 设计课题电路原理图、PCB图、元器件布局图 (5)2.3 设计课题元器件清单 (5)3、设计课题软件系统的设计3.1 设计课题使用单片机资源的情况 (7)3.2 设计课题软件系统各模块功能简要介绍 (7)3.3 设计课题软件系统程序流程框图 (7)3.4 设计课题软件系统程序清单 (7)4、设计结论、仿真结果、误差分析、教学建议等等4.1 设计课题的设计结论及使用说明 (10)4.2 设计课题的仿真结果 (10)4.3 设计课题的误差分析 (10)4.4 设计体会 (10)4.5 教学建议 (11)参考文献 (12)致谢 (13)附录 (14)第一章设计课题任务、功能要求说明及总体方案介绍1.1 设计课题任务设计一个具有特定功能的音乐播放器。
该音乐播放器上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。
该音乐播放器可以播放多首音乐,曲目选择可以由键盘控制,曲目名称可以显示在显示器上。
1.2功能要求说明(1) 该音乐播放器上电后显示系统提示符“P.”。
(2) 在按下第一个键后就播放第一首歌曲,并在显示器上显示“1”。
(3) 在按下第二个键后就播放第二首歌曲,并在显示器上显示“2”。
(4) 在按下第三个键后就播放第三首歌曲,并在显示器上显示“3”。
(5) 在播放音乐的中间能切换歌曲,在放完一首歌后回到起始状态,下一步的动作由人控制。
1.3设计课题总体方案介绍及工作原理说明本设计由AT89C52 单片机,3*1独立键盘,数码管等构成。
总体方案图如图1.1所示图1.1 总体方案图(1)总体原理:乐曲中不同的音符,实质就是不同频率的声音。
通过单片机产生不同的频率的脉冲信号,由蜂鸣器放出,就产生了美妙和谐的乐曲。
基于单片机的音乐播放系统.
音乐播放系统设计李凯龙目录摘要 (1)1 绪论 (1)1.1 功能需求 (2)2 硬件设计 (2)2.1 音乐播放系统的电路原理图 (2)2.2 电源输入的电路原理图 (3)2.3 晶振电路 (3)3 系统工作原理 (4)3.1 系统的总体方案设计 (4)3.2 主控芯片AT89C51简介 (4)4 线路连接 (5)5 软件设计 (6)5.1 主程序流程图 (6)6 调试与故障分析 (8)6.1 软件程序调试 (8)6.2 硬件电路调试 (8)7 结论 (9)8 致谢 (9)参考文献 (10)附录一:电路图 (11)附录二:主程序 (11)摘要本文将介绍一种以89C51型单片机为基础元件设计的自动音乐播放器。
在当今这个科技高速发展的时代,生活节奏的加快,人们长期处于工作、学习压力过大的状态,对于调节心理压力而言音乐对于每一个人都十分重要,由此音乐播放器在国内已经开始普及。
校园里的上下课的铃声,宿舍内早晨的起床号声音,都由以前枯燥刺耳的铃音转变成了好听的音乐,公路、广场中的计时装置也逐渐开始采用音乐来充当铃声。
此装置不仅为人们日常生活的计时提供了方便,同时也为目前快节奏的生活带来了乐趣。
本文是应用MCS-51单片机原理和控制理论设计音乐演奏控制器的硬件电路,并利用C语言进行程序设计。
通过控制单片机内部的定时器来产生不同频率的方波,驱动蜂鸣器发出不同音调的音乐,再利用延迟来控制发音时间的长短。
把乐谱转化成相应的定时常数就可以从发音设备中演奏出悦耳动听的音乐。
这种控制电路结构简单,可读性高,应用性强;软件程序适应范围广,对于不同的音乐只需要改变相应的定时常数即可。
关键词:音乐播放器,51单片机,C语言1 绪论单片机,更确切地说应称为作微控制器,是20世纪70年代中期发展起来的一种面向控制的大规模集成电路模块,其特点是功能强、体积小、可靠性高、价格低廉。
它一面世便在工业控制、数据采集、智能仪表化、机电一体化、家用电器等领域得到了广泛应用,极大地提高了这些领域的技术水平和自动化程度。
基于单片机的音乐播放器
基于单片机的音乐播放器制作(一)硬件部分设计
整个硬件电路是由中心控制模块、播放模块、按键模块、显示模块,电源模块和彩灯模块六部分组成,基本实现音乐的选曲,和播放模式的控制,电源大小的控制。
(1)中心控制模块
中控采用AT89S52芯片,AT89S52是拥有2个外部中断,2个16位定时器,2个可编程串口UART的单片机。
(2)显示模块
显示模块采用Lcd-1602液晶,主要显示曲目,播放命令。
(3)播放模块
播放模块是由8550NPN三极管和电磁蜂鸣器组成。
A T89S52输出高电平控制信号,启动8550NPN三极管使信号放大,从而启动电磁蜂鸣器。
(4)按键模块
按键模块采用独立按键模块模式。
(5)彩灯模块
彩灯模块主要有4个LED彩灯组成,,起指示作用。
(6)电源模块
电路原理图(二)软件部分。
音乐播放器单片机课程设计-基于单片机的音乐播放器
⾳乐播放器单⽚机课程设计-基于单⽚机的⾳乐播放器⼀.概述 (2)⼆.系统总体⽅案设计 (3)三.硬件设计 (6)3.1 89C51单⽚机 (6)图3-1和3-2 (7)3.2 I/O并⾏⼝直接驱动LED显⽰ (7)四.软件设计 (10)4.1.软件设计 (10)五.系统调试与仿真 (12)5.1软件仿真阶段 (12)5.2系统的仿真调试阶段 (12)5.3硬件安装调试 (12)六.总结 (14)参考⽂献 (15)附录A:⾳乐播放器电路设计图 (16)附录B:程序清单 (17)⼀.概述本课题要求以单⽚机为核⼼设计⼀个⾳乐播放器,完成多曲选择播放控制、停⽌控制、省电模式控制等功能。
⾳乐播放器利⽤单⽚机的定时器产⽣乐谱的各种频率⽅波,信号经过放⼤后由喇叭发出声⾳,选取某段⾳乐使单⽚机连续播放。
设计3个按键:播放/停⽌、下⼀曲、上⼀曲;4位LED显⽰器,⽤来显⽰所选曲⽬,该显⽰器在播放期间为了节省电源,设计为关闭状态,当⼀歌曲演奏结束,或选曲时显⽰器才显⽰曲⽬信息。
总体的设计思路是这样的。
⼆.系统总体⽅案设计本课题要求以单⽚机为核⼼设计⼀个简易⾳乐播放器,具有⾃动播放乐曲的功能。
⼀⾸⾳乐是许多不同的⾳阶组成的,⽽每个⾳阶对应着不同的频率,这样我们就可以利⽤不同的频率的组合,即可构成我们所想要的⾳乐了,⾳阶对应频率关系图1-1:图2-1本设计⽤89C51单⽚机为核⼼,利⽤8段数码管显⽰器.采⽤动态显⽰输出,声⾳输出⽤蜂鸣器来实现。
采⽤8段数码管显⽰器进⾏动态显⽰需要占⽤4根I/O线,蜂鸣器占⽤1根I/O线,89C51单⽚机有⾜够的线,不⽤扩展I/O⼝。
⽤⼀⽚单⽚机即可满⾜本设计的输⼊输出。
系统框图如图1-2所⽰:图2-2通过对⾳乐播放器主体部分的电路进⾏模仿设计,达到播放器固有的基本功能,设定按钮K1、 K2和K3。
按钮K1打开并⾃动播放乐曲1;按钮K2打开并⾃动播放乐曲2;按钮K3为⼿动控制⾳乐停⽌的按键。
基于单片机的音乐播放器 本科毕业论文
基于单片机的音乐播放器作者:学号:系别:专业:指导教师:专业技术职务2007 年3 月摘要本文介绍了基于AT89C2051单片机的乐曲播放器的硬件设计和软件设计过程。
本系统实现了播放乐曲,并可以通过按键随时播放下一曲和上一曲,同时显示当前播放乐曲的条目的功能。
播放的乐曲可以通过软件的方式进行添加和删除。
通过实际的实验证明,该系统具有硬件设计简单,软件可调整性大,系统稳定可靠等优点。
关键词:AT89C2051,乐曲播放器引言简简单单的几个音符,却展现了它奇特多彩的个性,呈现出一个色彩斑斓的世界。
人们的生活离不开音乐,音乐可以陶冶人们的情操,使心灵变得纯净、美好,使人的大脑变得聪明、伶俐;音乐可以让生活充满欢乐、祥和;音乐甚至可以治理环境,让人与人之间的关系变得更亲近、和谐。
音乐的基本要素是指构成音乐的各种元素,包括音的高低、音的长短、音的强弱和音色。
由这些基本要素互相结合,形成音乐的常用的“形式要素”,例如:节奏、曲调、和声,以及力度、速度、调式、曲式、织体等。
1、节奏:音乐的节奏是指音乐运动中音的长短和强弱。
音乐的节奏常被比喻为音乐的骨架。
节拍是音乐中的重拍和弱拍周期性地、有规律地重复进行。
我国传统音乐称节拍为“板眼”,“板”相当于强拍;“眼”相当于次强拍(中眼)或弱拍。
2、曲调:曲调也称旋律。
高低起伏的乐音按一定的节奏有秩序地横向组织起来,就形成曲调。
曲调是完整的音乐形式中最重要的表现手段之一。
曲调的进行方向是变幻无穷的,基本的进行方向有三种:“水平进行”、“上行”和“下行”。
相同音的进行方向称水平进行;由低音向高音方向进行称上行;由高音向低音方向进行称下行。
曲调的常见进行方式有:“同音反复”、“级进”和“跳进”。
依音阶的相邻音进行称为级进,三度的跳进称小跳,四度和四度以上的跳进称大跳。
3、和声:和声包括“和弦”及“和声进行”。
和弦通常是由三个或三个以上的乐音按一定的法则纵向(同时)重叠而形成的音响组合。
基于51单片机的音乐播放器
基于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单片机为核心的音乐播放器系统硬件设计结构图。
该系统主要是由复位电路、按键电路、时钟电路、中心模块、扬声器驱动等组成。
其工作原理为:此音乐播放器,有三个按键及控制按钮:播放/暂停、下一曲、上一曲;通过控制按钮控制单片机,播放所要求的音乐,并通过放大电路和喇叭输出声音。
三、简易仿真原理图四、音乐发声设计原理4.1发声原理一首乐曲是由多个音符构成的。
每个音符都对应着一个确定的频率,乐曲中不同的音符,实质就是不同频率的声音;另外每个音符会根据乐曲的要求设定一个确定的节拍。
可以控制单片机不同频率不同节拍的脉冲信号,蜂鸣器发出就产生了美妙和谐的乐曲。
4.2单片机产生不同频率脉冲信号的原理1、要产生音频脉冲,只要算出来某一个音频的脉冲(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这半周期的时间,每当计时到后就降输出脉冲I/O反相,然后重复计时此半周期的时间再对I/O反相,就可以在I/O 脚上得到此频率的脉冲。
基于单片机多功能音乐播放器的设计
多功能音乐播放器的设计一、 设计任务与设计原理 1、设计任务(1) 可播放多首音乐,且通过按键来选择播放的音乐 (2) 选择音乐时,音乐名称在LCD 上显示(3) 音乐播放种类跨度要大一些,播放声音要清晰 电路原理图⑴、单片机最小系统电路,主要由:时钟振荡电路、复位电路、电源电路等组 成。
图2-1-2 单片机最小系统电路(2)、矩阵键盘输入电路⑶、LCD12864显示电路B O -------C O —图2-1-3 矩阵键盘输入电路图2-1-4 LCD12864显示电路(4) 、蜂鸣器播放电路POO/ADO P01/AD1 PO.2/AD2 PO3/AD3 PO.4/AD4 P0S/AD5 PO6/AD6 PO7/AD7 P2 <MA0 P2 1/A9 P2 2/A10 P2.J/A11 P2A/A12 P2 WA13 P2 7/A15 P3 CVRX Dpa.irrxoP3.2/IN1O P3.3/INT1 P3 4/TO P3 5fT1 P3.6AVRLCD1C, ! I -m m o -.J1J RV1 iDR?3531-■L - J J B JJZETJD0- JL'JIxTALIRSTPQ QTADO PO HW L DI P0 2/AD2 P0 3/AM P0 4/ACMP0 5/AD5 ro&AD6TO 决MP2 (¥A6 P2 P2 2MT0 1 PSEF4P2MT1 ALEP2.^AT2 EAP2 0M330图2-1-5 蜂鸣器播放电路2整体电路原理图LC01图2-1-6 系统仿真效果图二、软件设计 1、 流程图设计2、完整程序代码整个KEIL工程文件有4个.C文件和1个头文件组成,具体代码如下: (1 ) PlayMusic . c#include <REG52.H> #include "SoundPlay.h" #include<math.h>#define uchar unsigned char #define uint unsigned intsbit WAI_INT0=P3A2; // 复位//水平与垂直偏移uchar H_Offset=0; // uchar V_page_Offset=0; extern uchar Key_Num; extern uchar code Name_Of_Song[]; extern uchar KeyScan(); // 矩阵键盘扫描子程序extern voidLCD12864_Initialization();extern void Display_Word(uchar P2,uchar L2,uchar *M) reentrant; extern void Display_char(ucharP1,uchar L1,uchar *M) reentrant; void delay(uint K); //延时子程序void key_process();// 矩阵键盘按键处理子程序void Delay1ms(uint count){unsigned int i,j;for(i=0;i<count;i++) for(j=0;j<120;j++);}//*****************************Music******************************************************//挥着翅膀的女孩unsigned char code Music_Girl[]={ 0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x03,0x16,0x03, 0x17,0x03, 0x17,0x03, 0x17,0x03, 0x18,0x03,0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x02, 0x18,0x03,0x17,0x03, 0x15,0x02, 0x18,0x03, 0x17,0x03, 0x18,0x02,0x10,0x03, 0x15,0x03, 0x16,0x02, 0x15,0x03, 0x16,0x03,0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x1A,0x03,0x1B,0x03, 0x1F,0x03, 0x1F,0x03, 0x17,0x03, 0x18,0x03,0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03,0x18,0x03, 0x1F,0x03, 0x1F,0x02, 0x16,0x03, 0x17,0x03,0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02,0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03,0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,0x1A,0x03, 0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03,0x16,0x66, 0x17,0x04, 0x18,0x04, 0x18,0x03, 0x19,0x03,0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03,0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03,0x19,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x00, 0x1A,0x03, 0x1A,0x03, 0x1A,0x03,0x1B,0x03, 0x1B,0x03, 0x1A,0x03, 0x19,0x03, 0x19,0x02, 0x17,0x03, 0x15,0x17, 0x15,0x03,0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x04, 0x18,0x0E, 0x18,0x03, 0x17,0x04, 0x18,0x0E,0x18,0x66, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02, 0x1F,0x03,0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66,0x1F,0x04, 0x1B,0x0E, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03,0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03, 0x16,0x66, 0x17,0x04, 0x18,0x04, 0x18,0x03,0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03,0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,0x1A,0x03, 0x19,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x00, 0x18,0x02, 0x18,0x03,0x1A,0x03, 0x19,0x0D, 0x15,0x03, 0x15,0x02, 0x18,0x66, 0x16,0x02, 0x17,0x02, 0x15,0x00,0x00,0x00}; //同一首歌unsigned char code Music_Same[]={ 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x66, 0x18,0x03, 0x17,0x02, 0x15,0x02, 0x16,0x01, 0x15,0x02, 0x10,0x02, 0x15,0x00,0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x02,0x18,0x66, 0x17,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x16,0x00, 0x17,0x01, 0x19,0x02,0x1B,0x02, 0x1B,0x70, 0x1A,0x03, 0x1A,0x01, 0x19,0x02, 0x19,0x03, 0x1A,0x03, 0x1B,0x02, 0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x18,0x66, 0x18,0x03, 0x19,0x02, 0x1A,0x02, 0x19,0x0C,0x18,0x0D, 0x17,0x03, 0x16,0x01, 0x11,0x02, 0x11,0x03, 0x10,0x03, 0x0F,0x0C, 0x10,0x02,0x15,0x00, 0x1F,0x01, 0x1A,0x01, 0x18,0x66, 0x19,0x03, 0x1A,0x01, 0x1B,0x02, 0x1B,0x03,0x1B,0x03, 0x1B,0x0C, 0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x1F,0x01, 0x1A,0x01, 0x18,0x66, 0x19,0x03, 0x1A,0x01, 0x10,0x02, 0x10,0x03, 0x10,0x03, 0x1A,0x0C, 0x18,0x0D, 0x17,0x03,0x16,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x70, 0x18,0x03, 0x17,0x02, 0x15,0x03,0x15,0x03, 0x16,0x66, 0x16,0x03, 0x16,0x02, 0x16,0x03, 0x15,0x03, 0x10,0x02, 0x10,0x01,0x11,0x01, 0x11,0x66, 0x10,0x03, 0x0F,0x0C, 0x1A,0x02, 0x19,0x02, 0x16,0x03, 0x16,0x03,0x18,0x66, 0x18,0x03, 0x18,0x02, 0x17,0x03, 0x16,0x03, 0x19,0x00,0x00,0x00 };//两只蝴蝶unsigned char code Music_Two[] ={ 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03,0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03, 0x16,0x03,0x15,0x03, 0x10,0x03, 0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x16,0x03, 0x17,0x01,0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x16,0x0D,0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x15,0x03, 0x16,0x01, 0x17,0x03, 0x16,0x03,0x17,0x01, 0x16,0x03, 0x17,0x03, 0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02,0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0E, 0x15,0x04, 0x0F,0x01,0x17,0x03, 0x19,0x03, 0x19,0x01, 0x19,0x03, 0x1A,0x03, 0x19,0x03, 0x17,0x01, 0x16,0x03,0x16,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0D,0x15,0x00, 0x19,0x03, 0x19,0x03, 0x1A,0x03, 0x1F,0x03, 0x1B,0x03, 0x1B,0x03, 0x1A,0x03,0x17,0x0D, 0x16,0x03, 0x16,0x03, 0x16,0x0D, 0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03,0x1A,0x02, 0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x01, 0x17,0x03, 0x19,0x03,0x19,0x03, 0x17,0x03, 0x19,0x02, 0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04,0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, 0x1A,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03, 0x17,0x0D, 0x16,0x03, 0x17,0x03, 0x19,0x01, 0x19,0x03, 0x19,0x03, 0x1A,0x03,0x1F,0x03, 0x1B,0x03, 0x1B,0x03, 0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03, 0x16,0x03,0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, 0x1A,0x02, 0x1A,0x02, 0x10,0x03, 0x17,0x0D,0x16,0x03, 0x16,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03, 0x19,0x03, 0x1F,0x02,0x1B,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, 0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, 0x17,0x16, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04, 0x1A,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03, 0x0F,0x02, 0x10,0x03, 0x15,0x00, 0x00,0x00 };//死了都要爱unsigned char code Music_Three[]={ 0x17,0x03, 0x1F,0x02, 0x1F,0x03, 0x1F,0x03, 0x1F,0x02,0x20,0x03, 0x1B,0x03, 0x1A,0x03, 0x19,0x03, 0x16,0x03,0x16,0x03, 0x17,0x04, 0x17,0x04, 0x17,0x15, 0x18,0x03,0x18,0x04, 0x19,0x0E, 0x19,0x03, 0x1A,0x03, 0x16,0x02,0x16,0x04, 0x17,0x0E, 0x17,0x03, 0x18,0x16, 0x1A,0x04,0x1A,0x04,0x1B,0x03, 0x1A,0x04, 0x1B,0x0E, 0x1B,0x01,0x17,0x18, 0x17,0x03, 0x1F,0x02, 0x1F,0x03, 0x1F,0x03,0x1F,0x02, 0x20,0x03, 0x1B,0x03, 0x1A,0x03, 0x19,0x03,0x16,0x03, 0x16,0x02, 0x17,0x04, 0x17,0x0E, 0x17,0x15,0x18,0x02, 0x18,0x04, 0x19,0x0E, 0x19,0x03, 0x1A,0x03,0x1F,0x02, 0x1B,0x02, 0x1A,0x15, 0x15,0x02, 0x0D,0x02,0x0E,0x02, 0x0D,0x03, 0x0D,0x03, 0x11,0x03, 0x11,0x03,0x0D,0x03, 0x11,0x03, 0x15,0x04, 0x15,0x0E, 0x1F,0x02,0x10,0x02, 0x10,0x03, 0x0F,0x03, 0x0E,0x66, 0x0E,0x03,0x0C,0x03, 0x0E,0x03, 0x16,0x03, 0x15,0x03, 0x15,0x67,0x11,0x04, 0x11,0x0E, 0x1B,0x02, 0x15,0x02, 0x0D,0x02,0x0E,0x66, 0x0D,0x03, 0x0D,0x03, 0x11,0x03, 0x11,0x03,0x0D,0x03, 0x11,0x03, 0x15,0x04, 0x15,0x0E, 0x15,0x04,0x17,0x03, 0x17,0x04, 0x17,0x03, 0x18,0x03, 0x10,0x02,0x10,0x67, 0x0F,0x03, 0x10,0x00, 0x18,0x0B, 0x18,0x03,0x19,0x03, 0x18,0x03, 0x16,0x03, 0x18,0x03, 0x17,0x03,0x17,0x15, 0x16,0x03, 0x16,0x04, 0x16,0x0E, 0x16,0x04,0x16,0x04, 0x17,0x03, 0x18,0x04, 0x17,0x67, 0x16,0x04,0x15,0x67, 0x15,0x03, 0x15,0x04, 0x15,0x0E, 0x15,0x04,0x15,0x04, 0x17,0x68, 0x17,0x0E, 0x17,0x03, 0x10,0x03,0x15,0x03, 0x17,0x03, 0x18,0x66, 0x18,0x04, 0x19,0x04,0x1A,0x03, 0x19,0x03, 0x18,0x03, 0x18,0x03, 0x18,0x03,0x17,0x04, 0x17,0x0E, 0x17,0x02, 0x16,0x04, 0x15,0x0E,0x15,0x16, 0x18,0x03, 0x18,0x04, 0x19,0x0E, 0x19,0x03,0x1A,0x03, 0x16,0x03, 0x16,0x04, 0x17,0x0E, 0x17,0x03,0x18,0x17, 0x1A,0x03, 0x1B,0x03, 0x1A,0x03, 0x1B,0x16,0x17,0x03, 0x1F,0x02, 0x1F,0x03, 0x1F,0x03, 0x1F,0x66,0x20,0x03, 0x1B,0x03, 0x1A,0x03, 0x19,0x03, 0x16,0x03,0x16,0x03, 0x17,0x04, 0x17,0x0E, 0x17,0x7B, 0x18,0x03,0x18,0x04, 0x19,0x0E, 0x19,0x03, 0x1A,0x03, 0x16,0x03,0x16,0x04, 0x17,0x0E, 0x17,0x04, 0x18,0x17, 0x1A,0x04,0x1A,0x04, 0x1B,0x03, 0x1A,0x04, 0x1B,0x72, 0x17,0x04,0x1F,0x02, 0x1F,0x03, 0x1F,0x03, 0x1F,0x66, 0x20,0x03,0x1B,0x03, 0x1A,0x03, 0x19,0x03, 0x16,0x03, 0x16,0x03,0x17,0x04, 0x17,0x0E, 0x17,0x67, 0x18,0x03, 0x18,0x04,0x19,0x0E, 0x19,0x03, 0x1A,0x03, 0x1F,0x02, 0x1B,0x02,0x1A,0x14, 0x00,0x00 };unsigned char code Music_End[]={0x00,0x00,0x00,0x00};//***********************************************************************************void main(){P1=0x0f;InitialSound();EX0=1;IT0=1;LCD12864_Initialization();// 液晶初始化函数// 以下显示“环境工程学院张小波”Display_Word(V_page_Offset+4,H_Offset,Name_Of_Song+15*32);Display_Word(V_page_Offset+4,16+H_Offset,Name_Of_Song+16*32);Display_Word(V_page_Offset+4,32+H_Offset,Name_Of_Song+19*32);Display_Word(V_page_Offset+4,48+H_Offset,Name_Of_Song+20*32);Display_Word(V_page_Offset+4,80+H_Offset,Name_Of_Song+21*32);Display_Word(V_page_Offset+4,96+H_Offset,Name_Of_Song+22*32);Display_Word(V_page_Offset+4,112+H_Offset,Name_Of_Song+23*32);while(1){ key_process();}}/* ------- 延时子程序------ */void delay(uint K){uint i,j;for(i=K;i>0;i--) for(j=120;j>0;j--);}/* -------------- 按键处理子程序-------------- */void key_process(){EA=1;KeyScan(); switch(Key_Num){case 13: delay(200);if (Key_Num==13) {//以下显示歌曲名:挥着翅膀的女孩Display_Word(V_page_Offset+2,H_Offset,Name_Of_Song+0*32);Display_Word(V_page_Offset+2,16+H_Offset,Name_Of_Song+1*32);Display_Word(V_page_Offset+2,32+H_Offset,Name_Of_Song+2*32);Display_Word(V_page_Offset+2,48+H_Offset,Name_Of_Song+3*32);Display_Word(V_page_Offset+2,64+H_Offset,Name_Of_Song+4*32);Display_Word(V_page_Offset+2,80+H_Offset,Name_Of_Song+5*32);Display_Word(V_page_Offset+2,96+H_Offset,Name_Of_Song+6*32);Play(Music_Girl,0,2,360);}break;case 2: delay(200);if (Key_Num==2)//以下显示歌曲名:同一首歌Display_Word(V_page_Offset+2,H_Offset,Name_Of_Song+24*32);Display_Word(V_page_Offset+2,16+H_Offset,Name_Of_Song+7*32);Display_Word(V_page_Offset+2,32+H_Offset,Name_Of_Song+8*32);Display_Word(V_page_Offset+2,48+H_Offset,Name_Of_Song+9*32);Display_Word(V_page_Offset+2,64+H_Offset,Name_Of_Song+10*32);Display_Word(V_page_Offset+2,80+H_Offset,Name_Of_Song+24*32);Display_Word(V_page_Offset+2,96+H_Offset,Name_Of_Song+24*32);Play(Music_Same,2,2,500);}//break; case 1: delay(200);if (Key_Num==1) {//以下显示歌曲名:两只蝴蝶Display_Word(V_page_Offset+2,H_Offset,Name_Of_Song+24*32);Display_Word(V_page_Offset+2,16+H_Offset,Name_Of_Song+11*32);Display_Word(V_page_Offset+2,32+H_Offset,Name_Of_Song+12*32);Display_Word(V_page_Offset+2,48+H_Offset,Name_Of_Song+13*32);Display_Word(V_page_Offset+2,64+H_Offset,Name_Of_Song+14*32);Display_Word(V_page_Offset+2,80+H_Offset,Name_Of_Song+24*32);Display_Word(V_page_Offset+2,96+H_Offset,Name_Of_Song+24*32);Play(Music_Two,0,2,360);} //break; case 5: delay(200);if (Key_Num==5) {//以下显示歌曲名:死了都要爱Display_Word(V_page_Offset+2,H_Offset,Name_Of_Song+24*32);Display_Word(V_page_Offset+2,16+H_Offset,Name_Of_Song+25*32);Display_Word(V_page_Offset+2,32+H_Offset,Name_Of_Song+26*32);Display_Word(V_page_Offset+2,48+H_Offset,Name_Of_Song+27*32);Display_Word(V_page_Offset+2,64+H_Offset,Name_Of_Song+28*32);Display_Word(V_page_Offset+2,80+H_Offset,Name_Of_Song+29*32);Display_Word(V_page_Offset+2,96+H_Offset,Name_Of_Song+24*32);Play(Music_Three,10,1,300);}break;/* case 5: delay(200);if (Key_Num==5)Play(Music_Three,0,2,360);} break; */}}void waibuzhongduan_INT0()interrupt 0{uchar i;EA=0;for(i=0;i<8;i++){ Display_Word(V_page_Offset+2,i*16+H_Offset,Name_Of_Song+24*32);}}(2) Keypad.c#include <reg52.H>#define uchar unsigned char#define uint unsigned int//扫描键盘时发送到0-3 列上的扫描码uchar KeyboardScanCode[4]={0xef,0xdf,0xbf,0x7f};uchar Key_Num=16;//---------------------------------------------------//扫描键盘并返回按键在键盘上的位置系列号//------------------------------------------------uchar KeyScan(){uchar Row=0,Col=0,Temp;for(Col=0;Col<4;Col++){P1=KeyboardScanCode[Col];Temp=P1&0x0f;if(Temp!=0x0f){switch(Temp){case 0x0e: Row=0;break;case 0x0d:Row=1;break;case 0x0b:Row=2;break;case 0x07:Row=3;break;}break;}P1=0x0f;return Key_Num=Row*4+Col; // 返回按键位置序号0-15}(3) 12864 显示驱动程序.C//------------------------- LCD_12864.c ------------------------// 名称:12864LCD 显示驱动程序(不带字库)//----------------------------------------------------------------#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define LCD_DB_PORT P0 // 液晶数据线端口DB0-DB7#define LCD_START_ROW 0xc0 // 起始行命令#define LCD_PAGE 0xB8 // 页指令#define LCD_COL 0x40 // 列指令bit Reverse_Display=0;// 是否反相显示(白底黑字/黑底白字) //液晶引脚定义sbit DI=P2A0;sbit RW=P2A1;sbit E=P2A2;sbit CS1=P2A3;sbit CS2=P2A4;sbit RST=P2A5;//------------------------------------------------------------- // 检查LCD 是否忙//------------------------------------------------------------- bit LCD_IS_BUSY(){LCD_DB_PORT=0xFF;RW=1;_nop_();DI=0;E=1;_nop_();E=0;return (bit)(P0&0x80);}//------------------------------------------------------------- // 向LCD 写入一个字节(一般用于发送命令)//------------------------------------------------------------- void Write_Byte_To_LCD(uchar comand){while(LCD_IS_BUSY());LCD_DB_PORT=0xFF;RW=0;_nop_();DI=0;LCD_DB_PORT=comand;E=1;_nop_();E=0;}//-------------------------------------------------------------// 向LCD 写入数据//-------------------------------------------------------------void Write_Data_To_LCD(uchar dat){while(LCD_IS_BUSY());LCD_DB_PORT=0xFF;RW=0;_nop_();DI=1;if(!Reverse_Display) //根据Reverse_Display 决定是否反相显示LCD_DB_PORT=dat;elseLCD_DB_PORT=~dat;E=1;_nop_();E=0;}//-------------------------------------------------------------// 初始化LCD//-------------------------------------------------------------void LCD12864_Initialization(){CS1=1;CS2=1;Write_Byte_To_LCD(0x38);Write_Byte_To_LCD(0x3F);Write_Byte_To_LCD(0x01);Write_Byte_To_LCD(0x06); Write_Byte_To_LCD(LCD_START_ROW);}//-------------------------------------------------------------r 所指的数组中//通用显示函数从第P页第L列显示W个字节数据,具体显示的数据在//-------------------------------------------------------------void LCD_Show(uchar P,uchar L,uchar W,uchar *r) reentrant uchar i;if(L<64){CS1=1;CS2=0;Write_Byte_To_LCD(LCD_PAGE+P);Write_Byte_To_LCD(LCD_COL+L); if(L+W<64){for(i=0;i<W;i++)Write_Data_To_LCD(r[i]);}else{for(i=0;i<64-L;i++)Write_Data_To_LCD(r[i]);CS1=0;CS2=1;Write_Byte_To_LCD(LCD_PAGE+P);Write_Byte_To_LCD(LCD_COL); for(i=64-L;i<W;i++)Write_Data_To_LCD(r[i]);}}else{CS1=0;CS2=1;Write_Byte_To_LCD(LCD_PAGE+P);Write_Byte_To_LCD(LCD_COL+L-64); for(i=0;i<W;i++)Write_Data_To_LCD(r[i]);}}//-------------------------------------------------------------//显示一个8X 16点阵字符//-------------------------------------------------------------void Display_char(uchar P1,uchar L1,uchar *M) reentrant{LCD_Show(P1,L1,8,M);LCD_Show(P1+1,L1,8,M+8);}//-------------------------------------------------------------------//显示一个16 X 16点阵字符(汉字上半部分与下半部分分别处在相邻两页中) // --------------------------------------------------------------------void Display_Word(uchar P2,uchar L2,uchar *M) reentrant{LCD_Show(P2,L2,16,M);LCD_Show(P2+1,L2,16,M+16);}(4) DotMatrix.c// -----------------------------------------------// 与本程序有关的数字和汉字的点阵编码DotMatrix.c// ----------------------------------------------#include <reg51.h>#include <string.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int//年、月、日、星期、时、分、秒等汉字点阵(16X16)uchar code Name_Of_Song[]={/*-- 文字0: 挥--*/0x08,0x08,0x08,0xFF,0x88,0x48,0x16,0xD2,0x3A,0x16,0xD2,0x12,0x12,0x16,0x02,0x00,0x02,0x42,0x81,0x7F,0x00,0x08,0x09,0x09,0x09,0x09,0xFF,0x09,0x09,0x09,0x08,0x00, /*--文字1: 着--*/0x00,0x44,0x54,0x54,0x55,0x56,0xD4,0x7C,0x54,0x54,0x56,0x55,0x54,0x44,0x44,0x00,0x08,0x08,0x04,0x04,0x02,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0xFF,0x00,0x00,0x00,/*-- 文字2: 翅--*/0x04,0xE4,0x24,0x3F,0x24,0xE4,0x0A,0x32,0x82,0xFE,0x08,0x32,0x82,0xFE,0x00,0x00,0x40,0x21,0x16,0x08,0x16,0x21,0x22,0x49,0x50,0x4F,0x42,0x49,0x50,0x4F,0x40,0x00, /*--文字3: 膀--*/0x00,0xFE,0x12,0x12,0xFE,0x00,0x64,0x24,0x2C,0x75,0xA6,0x34,0x2C,0x64,0x24,0x00,0xC0,0x3F,0x41,0x81,0x7F,0x00,0x81,0x61,0x1F,0x05,0x45,0x85,0x7D,0x01,0x00,0x00, /*--文字4: 的--*/0x00,0xF8,0x8C,0x8B,0x88,0xF8,0x40,0x30,0x8F,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x00,0x7F,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x03,0x26,0x40,0x20,0x1F,0x00,0x00, /*--文字5: 女--*/0x20,0x20,0x20,0x20,0xE0,0x38,0x27,0x20,0x20,0x20,0xE0,0x20,0x20,0x20,0x20,0x00,0x80,0x80,0x40,0x41,0x22,0x22,0x14,0x0C,0x0C,0x0B,0x10,0x30,0xE0,0x40,0x00,0x00, /*--文字6: 孩--*/0x02,0x02,0x02,0xF2,0x8A,0x06,0x44,0x64,0x54,0x4D,0x46,0xC4,0x64,0x04,0x04,0x00,0x01,0x23,0x41,0x3F,0x00,0x48,0x48,0x24,0x24,0x12,0x09,0x0C,0x12,0x61,0x00,0x00, /*--文字7: 同--*/0x00,0xFE,0x02,0x12,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x12,0x02,0xFE,0x00,0x00,0x00,0xFF,0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x08,0x1F,0x40,0x80,0x7F,0x00,0x00, /*--文字8: 一--*/0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字9: 首--*/0x04,0x04,0x04,0xE4,0x25,0x26,0x34,0x2C,0x24,0x24,0x26,0xE5,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x7F,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x7F,0x00,0x00,0x00,0x00,/*-- 文字10: 歌--*/ 0x80,0xBA,0xAA,0xAA,0xBA,0x82,0xFE,0xA2,0x90,0x0C,0xEB,0x08,0x28,0x18,0x08,0x00, 0x00,0x1E,0x12,0x12,0x5E,0x80,0x7F,0x40,0x20,0x18,0x07,0x08,0x30,0xE0,0x40,0x00,/*-- 文字11: 两--*/ 0x02,0xF2,0x12,0x12,0x12,0xFE,0x92,0x12,0x12,0xFE,0x12,0x12,0x12,0xFB,0x12,0x00,0x00,0x7F,0x08,0x04,0x03,0x00,0x10,0x09,0x06,0x01,0x01,0x26,0x40,0x3F,0x00,0x00,/*-- 文字12: 只--*/ 0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,0x40,0x20,0x31,0x18,0x0E,0x04,0x00,0x00,0x00,0x02,0x04,0x19,0x70,0x20,0x00,/*-- 文字13: 蝴--*/ 0xF0,0x10,0xFF,0x10,0xF0,0x08,0x88,0xFF,0x88,0x08,0x00,0xFE,0x12,0x12,0xFE,0x00,0x43,0x42,0x3F,0x2A,0x73,0x20,0x0F,0x88,0x4F,0x20,0x18,0x07,0x41,0x81,0x7F,0x00,/*-- 文字14: 蝶--*/ 0x00,0xF8,0x08,0xFF,0x08,0xF8,0x04,0xFE,0x84,0xBF,0xA4,0xA4,0xBF,0x84,0x04,0x00,0x10,0x11,0x11,0x0F,0x09,0x9D,0x4A,0x22,0x1A,0x06,0xFF,0x06,0x0A,0x72,0x22,0x00,/*-- 文字15: 环--*/ 0x00,0x22,0x22,0xFE,0x22,0x22,0x00,0x02,0xC2,0x32,0xFE,0x42,0x82,0x02,0x02,0x00,0x00,0x04,0x04,0x03,0x12,0x0A,0x04,0x03,0x00,0x00,0xFF,0x00,0x00,0x03,0x0E,0x00,/*-- 文字16: 境--*/ 0x20,0x20,0xFE,0x20,0x20,0x00,0x24,0xAC,0xB4,0xA5,0xA6,0xB4,0xAC,0x24,0x00,0x00,0x10,0x30,0x1F,0x08,0x08,0x00,0x80,0x4F,0x3A,0x0A,0x0A,0x7A,0x8F,0x80,0xE0,0x00,/*-- 文字17: 工--*/ 0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,/*-- 文字18: 程--*/0x10,0x12,0xD2,0xFE,0x91,0x11,0x80,0xBF,0xA1,0xA1,0xA1,0xA1,0xBF,0x80,0x00,0x00,0x04,0x03,0x00,0xFF,0x00,0x41,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x40,0x00,/*-- 文字19: 学--*/ 0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00,/*-- 文字20: 院--*/ 0xFE,0x02,0x32,0x4A,0x86,0x0C,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x0C,0x04,0x00,0xFF,0x00,0x02,0x04,0x83,0x41,0x31,0x0F,0x01,0x01,0x7F,0x81,0x81,0x81,0xF1,0x00,/*-- 文字24: --*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*-- 文字25: 死--*/0x00,0x02,0xC2,0xB2,0x1E,0x12,0x92,0x72,0x02,0xFE,0x82,0x42,0x42,0x22,0x22,0x00,0x42,0x41,0x20,0x20,0x13,0x0C,0x03,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x78,0x00,/*-- 文字26: 了--*/0x00,0x02,0x02,0x02,0x02,0x02,0x02,0xF2,0x12,0x0A,0x0A,0x06,0x06,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字27: 都--*/0x20,0x24,0x24,0xA4,0x7F,0x24,0x34,0x28,0x24,0x00,0xFE,0x22,0x52,0x8A,0x06,0x00,0x04,0x02,0x7F,0x25,0x25,0x25,0x25,0x7F,0x00,0x00,0xFF,0x08,0x08,0x10,0x0F,0x00, /*-- 文字28: 要--*/0x02,0x02,0xFA,0x4A,0x4A,0xFE,0x4A,0x4A,0x4A,0x7E,0x4A,0x4A,0xFA,0x02,0x02,0x00,0x02,0x82,0x82,0x42,0x4E,0x2B,0x2A,0x12,0x12,0x12,0x2A,0x26,0xC2,0x42,0x02,0x00, /*-- 文字29: 爱--*/0x00,0x40,0xB2,0x96,0x9A,0x92,0xF6,0x9A,0x93,0x91,0x99,0x97,0x91,0x90,0x30,0x00,0x40,0x20,0xA0,0x90,0x4C,0x47,0x2A,0x2A,0x12,0x1A,0x26,0x22,0x40,0xC0,0x40,0x00,};〃0-9等数字点阵(8X 16)uchar code Digits[]={0x00,0x00,0xF0,0xF8,0x08,0x68,0xF8,0xF0,0x00,0x00,0x07,0x0F,0x0B,0x08,0x0F,0x07, //00x00,0x20,0x20,0x30,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x00,0x00, //10x00,0x30,0x38,0x08,0x88,0xF8,0x70,0x00,0x00,0x0C,0x0E,0x0B,0x09,0x08,0x08,0x00, // 2 0x00,0x30,0x38,0x88,0x88,0xF8,0x70,0x00,0x00,0x06,0x0E,0x08,0x08,0x0F,0x07,0x00, //30x00,0x00,0xF8,0xF8,0x00,0xE0,0xE0,0x00,0x00,0x03,0x03,0x02,0x02,0x0F,0x0F,0x02,//40x00,0xF8,0xF8,0x88,0x88,0x88,0x08,0x00,0x00,0x08,0x08,0x08,0x0C,0x07,0x03,0x00,//50x00,0xC0,0xE0,0x78,0x58,0xC8,0x80,0x00,0x00,0x07,0x0F,0x08,0x08,0x0F,0x07,0x00,//60x00,0x08,0x08,0x88,0xE8,0x78,0x18,0x00,0x00,0x00,0x0E,0x0F,0x01,0x00,0x00,0x00,//70x00,0x70,0xF8,0xC8,0x88,0xF8,0x70,0x00,0x00,0x07,0x0F,0x08,0x09,0x0F,0x07,0x00,//80x00,0xF0,0xF8,0x08,0x08,0xF8,0xF0,0x00,0x00,0x00,0x09,0x0D,0x0F,0x03,0x01,0x00,//9};(5) SOUNDPLAY .H/说明**************************************************************************曲谱存贮格式unsigned char code MusicName{ 音高,音长,音高,音长..... , 0,0}; 末尾:0,0 表示结束(Important)音高由三位数字组成:个位是表示1~7 这七个音符十位是表示音符所在的音区:1-低音,2-中音,3-高音;百位表示这个音符是否要升半音: 0-不升, 1 -升半音。
「基于单片机的MP3播放器设计_毕业设计」
「基于单片机的MP3播放器设计_毕业设计」随着科技的发展,MP3播放器成为了大众日常生活中不可或缺的一部分。
本文将介绍一个基于单片机的MP3播放器的设计,并探讨其在毕业设计中的应用。
首先,我们需要明确设计目标。
该MP3播放器的主要功能是播放音频文件,包括MP3和其他常见格式的音频文件。
除此之外,它还应具备控制播放、暂停、快进、快退等功能。
另外,该MP3播放器还需要具备文件管理功能,能够浏览音频文件,并通过界面进行选择和播放。
接下来,我们将进行硬件设计。
MP3播放器的核心部分是单片机,我们可以选择一款功能强大的单片机,如ARM Cortex-M系列的单片机。
该单片机需要支持音频解码功能,因此可以选择一款集成了音频解码芯片的单片机,这样可以减小外围电路的复杂度。
此外,我们还需要添加音频输入和输出电路,以及LCD显示屏、按键和电源管理电路。
在软件设计方面,我们需要进行音频解码的程序开发。
我们可以选择使用现成的开源解码软件库,如mad(MPEG Audio Decoder)或LAME (LAME Ain't an MP3 Encoder)。
这些库可以实现对MP3格式的音频文件进行解码,并输出数字音频信号。
我们还需要开发一个用户界面程序,实现文件浏览和选择,并与解码软件库进行交互。
最后,我们将介绍该MP3播放器的应用于毕业设计中的可能性。
毕业设计可以从以下几个方面展开:1.性能优化:可以通过对音频解码算法的优化,提高音频文件的解码速度和音质;或者对MP3播放器的界面进行优化,提高用户体验。
2.功能扩展:可以通过添加额外的功能模块,如蓝牙模块、存储卡接口等,实现更多的功能,如无线传输、外部存储扩展等。
3.系统集成:可以将MP3播放器与其他系统进行集成,如车载音频系统、家庭音响系统等,以实现更广泛的应用。
综上所述,基于单片机的MP3播放器设计具有许多潜在的应用领域。
在毕业设计中,我们可以通过对性能优化、功能扩展和系统集成等方面的研究,使MP3播放器的设计更加完善和创新。
基于51单片机音乐播放器设计
基于51单片机音乐播放器设计音乐播放器是一种可以播放音频文件的设备,广泛应用于日常生活中。
本文将基于51单片机设计一个简单的音乐播放器。
一、设计目标本音乐播放器设计的主要目标是实现以下功能:1.支持播放多种格式的音频文件,如MP3、WAV等;2.支持音量调节和音频文件选择功能;3.具备简单的界面和易于理解的操作方式;4.能够适应不同的音频文件大小和音乐时长。
二、硬件设计2. 存储器:选择外接Flash存储器作为音频文件的存放介质,具备较大的存储容量和较高的读写速度,能够满足音频文件的多样性需求。
3.音频解码芯片:选择支持MP3和WAV格式音频解码的芯片,能够将音频文件翻译成能够被音频输出部分播放的信号。
4.音频输出部分:选择合适的音频输出部分,如耳机接口或喇叭接口,将解码后的音频信号输出为声音。
三、软件设计1.系统初始化:在开机时进行系统初始化,包括对主控芯片、存储器和音频解码芯片的初始化。
2.文件系统管理:设计一个简单的文件系统,能够以目录结构的形式管理存储器中的音频文件。
3.音频解码:根据选择的音频文件格式,进行相应的解码操作,将解码后的音频数据传输给音频输出部分。
4.播放控制:实现音量调节和音频文件选择功能,能够暂停、播放、停止等操作。
5.用户界面:设计一个简单直观的用户界面,通过按键或显示屏等方式进行操作反馈和信息显示。
四、系统流程1.开机初始化:对主控芯片、存储器和音频解码芯片进行初始化。
2.文件系统管理:读取存储器中的文件目录,生成文件列表供用户选择。
3.用户操作:用户通过按键或其他方式进行音量调节和音频文件选择操作。
4.音频解码:根据用户选择的音频文件,进行相应的解码操作。
5.播放控制:根据用户的操作,进行音频的暂停、播放、停止等操作。
6.操作反馈:在用户界面上显示操作反馈和信息。
五、总结本文基于51单片机设计了一个简单的音乐播放器,实现了支持多种格式音频文件的播放、音量调节和文件选择功能,并提供了简单的用户界面。
基于单片机的音乐播放器
目录第1章绪论 (1)1.1电子音乐概述 (1)1.2国内外电子音乐的发展 (1)1.3音乐发生器的扩展 (2)第2章设计方案 (3)2.1 设计方案论证 (3)2.1.1方案一 (3)2.1.2 方案二 (4)2.1.2 方案三 (5)2.1.3 方案比较 (6)第3章硬件设计 (7)3.1 电路组成及工作原理 (7)3.1.1 电路组成 (7)3.1.2 电路工作原理 (7)3.2 AT89C51的简介 (8)3.2.1 AT89C51功能概述 (8)3.2.2 AT89C51的管脚图 (8)3.2.3 AT89C51 单片机的引脚介绍 (9)3.3 晶振电路 (9)3.4 扬声器电路 (10)3.5 显示电路 (10)3.6 更换歌曲电路 (11)3.7 复位电路 (12)3.8 程序存储器外部扩展电路 (13)第4章液晶显示原理及LM016L简介 (14)4.1 液晶显示原理及分类 (14)4.1.1液晶显示原理 (14)4.1.2液晶显示器的分类 (14)4.1.3液晶显示器各种图形的显示原理: (14)4.2 LCD1602简介 (15)第5章稳压电源 (17)5.1 稳压电源的功能 (17)5.2直流稳压电源 (17)5.3 220v交流电转5v直流电的电源设计 (18)5.3.1电路工作原理 (18)5.3.2电路原理图 (19)第6章软件系统设计 (20)6.1 软件流程设计 (20)6.2性能分析 (22)结论 (23)致谢 (24)参考文献 (25)附录 (25)基于单片机的音乐播放器第1章绪论1.1电子音乐概述电子音乐是现代音乐的一种形式,是一种与古典截然不同的音乐形式。
而今,越来越多钟情于电子音乐的音乐家们相信,通过电流产生的声音打破音乐的结构及人们习惯的听觉经验,人与人之间的情感是可以沟通的。
电子音乐是一种科技的见证。
也就是说,借助电子音乐,技术可以见证音乐,音乐可以见证技术。
基于单片机的MP3播放器
基于单片机的MP3播放器现在的MP3播放器种类繁多,但是基于单片机的MP3播放器还是很有实用价值的。
本文将介绍如何基于单片机制作一个简单的MP3播放器。
1. 硬件需求制作MP3播放器需要的硬件如下:•单片机•电路板•音频模块•存储卡其中,单片机是该MP3播放器的核心部件,电路板用于连接各个零部件,音频模块用于播放MP3格式的音乐,存储卡则用于存储MP3文件。
2. 软件需求制作基于单片机的MP3播放器需要用到以下软件:•Keil C51开发环境•WinRAR•MP3转换软件Keil C51开发环境用于编写单片机程序,WinRAR用于压缩和解压MP3文件,MP3转换软件用于将其他格式的音乐文件转换成MP3格式。
3. 制作流程在已经准备好硬件和软件的前提下,制作基于单片机的MP3播放器的流程如下:3.1 程序编写使用Keil C51开发环境编写程序,包括读取存储卡中的MP3文件、将MP3文件解压、播放MP3文件等关键步骤。
代码需要经过多次测试和调试,保证程序能够正确运行。
3.2 硬件连接将单片机、电路板、音频模块及存储卡进行正确连接,并进行电路测试,确保硬件连接无误。
3.3 软件设置在WinRAR中将下载好的MP3文件压缩成RAR格式,然后再将RAR文件解压,在MP3转换软件中将非MP3格式的音乐文件转换为MP3格式。
3.4 软硬件联测将存储卡插入到开发板中,开启电源,调试并测试MP3播放器的各项功能。
4. 成果展示完成制作后,基于单片机的MP3播放器可以播放存储卡中的MP3文件。
播放器可以通过更换存储卡,实现播放不同的MP3文件。
5. 结语基于单片机的MP3播放器的制作并不难,但是需要对硬件和软件有一定的了解和掌握。
通过本文的介绍和演示,读者可以体验一下DIY的乐趣,也可以为以后的制作提供参考。
基于单片机控制的音乐播放器设计
目录一、前言二、设计课题及要求三、控制任务及要求四、单片机的硬件设计五、单片机的软件设计及要求六、软件流程图七、程序设计八、模拟调试的过程和出现的问题分析九、调试程序所用的实验设备十、毕业设计体会十一、参考文献前言单片机自20世纪70年代问世以来,作为微型计算机的一个很重要的分支,应用非常广泛,已对人类社会产生了巨大的影响。
尤其是MCS-51系列的单片机,由于其具有集成度高、功能强、可靠性好、系统结构简单、价格低廉、易于扩展和使用等优点,在我国已得到广泛的应用并收到很好的成果。
虽然世界各大公司也有各种型号的高性能单片机问世,但MCS-51系列单片机仍然是我国在单片机应用领域的首选机型。
在这我以AT89C52单片机为基础设计音乐播放器。
一、设计课题及要求本次设计的是单片机控制的音乐播放器,要使单片机播放出一首音乐。
二、控制任务及要求在调控单片机时控制面板上的扩音器能放出音乐,能通过仿真软件实现程序的完整运行。
三、硬件设计(1)、确定机型可选用AT89C52单片机,晶振频率选择6HZ。
(2)、选择元器件根据系统要求,应具有蜂鸣器及驱动电路构成单片机音乐演奏器,拟选用蜂鸣器、LCD、三极管、电阻若干、电容若干。
(3)、硬件原理本系统通过AT89C52单片机的P1.1口控制几个9012PNP三极管、三极管、LCD、扩音器等控制电磁蜂鸣器的电源通断。
单片机控制的音乐播放器原理图:四、软件设计及要求(1)、声音三要素由于人耳听觉系统非常复杂,迄今为止人类对它的生理结构和听觉特性还不能从生理解剖角度完全解释清楚。
所以,对人耳听觉特性的研究目前仅限于在心理声学和语言声学。
人耳对不同强度、不同频率声音的听觉范围称为声域。
在人耳的声域范围内,声音听觉心理的主观感受主要有响度、音高、音色等特征和掩蔽效应、高频定位等特性。
其中响度、音高、音色可以在主观上用来描述具有振幅、频率和相位三个物理量的任何复杂的声音,故又称为声音“三要素”;而在多种音源场合,人耳掩蔽效应等特性更重要,它是心理声学的基础。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于单片机的音乐播放器摘要单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统。
基于单片机的音乐播放器可应用于MP3、MP4,扩音器等很多方面,并可作为很多系统的辅助功能,作为单片机的重要硬件资源之一,利用定时器可以产生各种固定频率的方波信号,也可以产生包括"Do"、"Re"、"Me"--等音阶在内的各种频率声音。
将各个音阶连接在一起,便可组成一支曲子或是演奏一段旋律。
基于这个思想,采用AT89C52单片机设计了一款特殊的"音乐播放器",本播放器可实现播放、暂停、复位等功能。
关键字:单片机;集成电路:89C52芯片;音乐播放器AbstractSingle Chip Microcomputer is an integrated circuit chip, VLSI technology is the use of having the data processing capabilities of the CPU random access memory RAM, read-only memory ROM, a variety of I / O port and interrupt system, the timer / counter functions (may also include a display driving circuit, the pulse width modulation circuit, an analog multiplexer, A / D converter circuit, etc.) are integrated into a small sound system on a microcomputer composed of silicon.Microcontroller-based music player can be used in many ways mp3, MP4, loudspeakers, etc., and as a secondary function of many systems, as one of the important microcontroller hardware resources, using the timer can generate a variety of fixed frequency square wave signal can be generated include the "Do", "Re", "Me" - like various frequencies including the sound scale. The various scales together, may form a song or play a melody. Based on this idea, using AT89C52 designed a special "Music Player", the player can be realized play, pause, reset and other functions.Keyword:Single Chip Microcomputer;integrated circuit;89C52 chip;Music Player基于单片机的音乐播放器单片微型计算机简称单片机,是典型的嵌入式微控制器,常用英文字母的缩写MCU表示单片机,单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
单片机由运算器、控制器、存储器、输入输出设备构成,相当于一个微型的计算机(最小系统),和计算机相比,单片机缺少了外围设备等。
概括的讲:一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机是了解计算机原理与结构的最佳选择。
第一章设计目的和要求1.1 设计目的目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
在音乐播放方面,利用单片机储存音乐,控制播放也越来越广泛。
为了更好的掌握单片机的应用,用单片机设计一个音乐播放器。
这样可以有效的将理论知识与实践相结合。
1.2 设计要求设计一个音乐播放器,有三个按键:播放/暂停、下一曲、上一曲;,用来显示所选曲目,该显示器在音乐播放中关闭,一曲演奏结束时,复位键可继续播放。
第二章硬件电路设计2.1 总体设计本系统以89C51单片机为控制核心,以按键开关作为控制元件,以蜂鸣器作为执行器件,再结合晶振电路,共同构成音乐播放器系统。
图2-1 总体设计框图2.2 模块电路设计2.2.1 单片机模块89C52内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。
此外,89C52还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。
在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。
掉电模式下,保存RAM 数据,时钟振荡停止,同时停止芯片内其它功能。
图2-2 单片机模块图2.2.2 晶振电路晶振电路由两个30pF的电容和一个6Mhz的晶体振荡器组成。
节点1与单2.2.3 复位电路复位电路由复位键、22uF的电容C3、200Ω的电阻R3、1000Ω的电阻R4第三章软件设计3.1 音乐播放原理音调的高低用音阶表示,不同的音阶对应不同的频率。
因此,不同频率的方波就可以产生音阶,音阶与频率的关系见表1。
由于频率的倒数是周期,因此可由单片机中的定时控制方波周期,当定时器计数溢出时产生中断。
一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能像电子琴那样能奏出多种音色的声音。
因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和节拍表示一个音符唱多长的时间。
不同音高的乐音是用C、D、E、F、G、A、B来表示,这7个字母就是音乐的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成简谱的1、2、3、4、5、6、7,相当于汉字“多来米发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”,即Tone。
把C、D、E、F、G、A、B这一组音的距离分成12个等份,每一个等份叫一个“半音”。
音调的长短用节拍数表示(例如1/4拍、2/4拍、……),不同节拍数的不同音符的组合形成乐谱。
程序中,音的节拍可由延时子程序实现。
延时子程序设定为四分之一拍,节拍值只能是它的整数倍。
3.2 流程控制主程序实现对单片机进行初始化后,进行歌曲曲目判断。
确定歌曲曲目后子程序对是否播放进行循环判断,得到播放中断的指令后再进行播放。
在播放音乐的过程中,查表子程序循环判断音乐是否结束。
当音乐结束时,程序跳转回曲目识别子程序。
图3-1 流程框图3.3 实物演示第四章总结通过这段时间的努力,在老师与同学们的指导帮助下,本次顺利的完成了。
本实验是按照课程实验要求进行的,以达到理论与实践结合的目的。
本次实验不仅仅让我巩固了课堂上所学习的理论知识,而且在实验过程中加深了对知识的理解。
同时,对于实验仪器有了更进一步的操作与认识。
同时,在这次设计中,我也发现了自己的许多不足。
首先,对开发工具的掌握还不算很全面,走了不少弯路。
其次,最初对系统的设计,考虑不是很全面,所以在实验过程中,碰到不少困难。
再次,我应该继续学习,不断提高自己的能力。
最后,感谢在实验过程中给予我帮助的老师和同学!第五章参考文献[1] 郭文川.单片机原理与接口技术[M] .中国农业出版社.2007.8[2] 阎石.数字电子技术基础(第五版)[M] .北京:高等教育出版社。
2005[3] 李泉溪.单片机原理与实例仿真[M] .北京:北京航空航天大学出版社,2009[4] 沈德金,陈粤初.MCS-51系列单片机接口电路与应用程序实例.北京航空航天大学出版社,1990[5] 何立民.MCS-51系列单片机应用系统设计.北京航空航天大学出版社,1990.1附录:主要程序#include <REG52.H>#include <INTRINS.H>sbit Beep = P2^6 ;unsigned char n=0;unsigned char code music_tab[] ={0x18, 0x30, 0x1C , 0x10,0x20, 0x40, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x10,0x1C, 0x10, 0x18 , 0x40,0x1C, 0x20, 0x20 , 0x20,0x1C, 0x20, 0x18 , 0x20,0x20, 0x80, 0xFF , 0x20,0x30, 0x1C, 0x10 , 0x18,0x20, 0x15, 0x20 , 0x1C,0x20, 0x20, 0x20 , 0x26,0x40, 0x20, 0x20 , 0x2B,0x20, 0x26, 0x20 , 0x20,0x20, 0x30, 0x80 , 0xFF,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x80,0x20, 0x30, 0x1C , 0x10,0x20, 0x10, 0x1C , 0x10,0x20, 0x20, 0x26 , 0x20,0x2B, 0x20, 0x30 , 0x20,0x2B, 0x40, 0x20 , 0x15,0x1F, 0x05, 0x20 , 0x10,0x1C, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x30,0x20, 0x30, 0x1C , 0x10,0x18, 0x40, 0x1C , 0x20,0x20, 0x20, 0x26 , 0x40,0x13, 0x60, 0x18 , 0x20,0x15, 0x40, 0x13 , 0x40,0x18, 0x80, 0x00};void int0() interrupt 1 //采用中断0 控制节拍{ TH0=0xd8;TL0=0xef;n--;}void delay (unsigned char m) //控制频率延时{unsigned i=3*m;while(--i);}void delayms(unsigned char a) //豪秒延时子程序{while(--a);}void main(){ unsigned char p,m; //m为频率常数变量unsigned char i=0;TMOD&=0x0f;TMOD|=0x01;TH0=0xd8;TL0=0xef;IE=0x82;play:while(1){a: p=music_tab[i];if(p==0x00) { i=0, delayms(1000); goto play;}else if(p==0xff) { i=i+1;delayms(100),TR0=0; goto a;}else {m=music_tab[i++], n=music_tab[i++];}TR0=1; //开定时器1while(n!=0) Beep=~Beep,delay(m); //等待节拍完成, 通过P1口输出音频 TR0=0; //关定时器1}}。