基于51单片机的音乐程序
基于51单片机的音乐播放器的设计

基于51单片机的音乐播放器的设计学院:电子与电气工程学院专业:测控技术与仪器***名:**学号: ***********湖南工业大学Hunan university of Technology基于51单片机的音乐播放器的设计[摘要]本课题完成了基于51单片机的音乐播放器的软件设计。
论文主要介绍了对U盘所存储的MP3、WMA或MIDI格式的文件识别、提取以及音频解码程序实现的方法,通过与硬件调试表明所设计的音乐播放器可以通过按键选择歌曲以及控制音量,同时还可以通过显示屏来显示所播放的歌曲名。
声音的播放可以通过扬声器或耳机进行,基本实现了音乐播放器的功能。
[关键词]单片机;音乐播放器;U盘文件读取;音频解码目录1 引言 (1)1.1 设计意义 (1)1.2 理论分析与方案论证 (1)1.2.1 理论分析 (1)2 系统硬件原理及概述 (2)2.1 STC12C5A60S2处理器介绍 (2)2.2 系统硬件电路综述 (2)2.2.1 硬件系统总体设计方案 (2)2.2.2 USB总线的通用接口芯片CH375电路 (3)2.2.3 LCD12864显示电路 (3)2.2.4 按键控制电路 (3)2.2.5 音频解码芯片VS1003电路 (4)3 系统软件设计 (4)3.1 软件开发平台 (4)3.2 系统的软件设计 (4)3.2.1 软件总体分析................................ 错误!未定义书签。
3.2.2 CH375软件系统设计 (7)3.2.3 CH375模块的U盘数据读取程序设计 (8)3.2.4 VS1003模块的MP3文件播放程序设计 (9)3.3 系统流程图 (11)参考文献 (11)1 引言1.1设计意义基于单片机的音乐播放器可应用于MP3,MP4,扩音器等很多方面,并可作为很多系统的辅助功能,传统的音乐播放器是利用定时器可以产生各种固定频率的方波信号,可以产生包括“Do”、“Re”、“Me”等音阶在内的各种频率声音。
基于51单片机的音乐播放器设计

目录摘要 (1)Abstract (1)引言 (1)1系统主要功能 (2)2设计原理 (2)2.1STC89C51单片机的介绍 (2)2.2音乐发生器设计流程及思路 (2)2.3音频脉冲和音乐节拍的实现 (3)2.4音频功放 (5)3系统设计 (5)3.1硬件电路设计 (5)3.2软件设计 (6)3.3系统仿真 (7)结论 (8)参考文献 (8)基于51单片机的音乐播放器设计学生姓名:张家义学号:20095044005学院:物理电子工程学院专业:电子科学与技术指导教师:仓玉萍职称:讲师摘要:本音乐播放器是利用STC89C51单片机结合内部定时系统及数码管显示,设计一个简易的微电脑音乐盒。
本文分析了基于51单片机的音乐播放器的硬件电路和软件的设计的具体过程,包括数据处理子程序的设计、显示子程序的设计,最后针对仿真过程遇到的现象进行了具体的分析与说明。
关键词:STC89C51;音乐播放;中断51 Microcontroller-based Music Player DesignAbstract: The music player is the use of STC89C51 with combination of single-chip timing system and the digital display, design a simple microcomputer music box. This article analyses the music player based on 51 single chip computer hardware circuit and software specific to the design process, including the design of data processing programs and display , And at last, explaining the simulation process for analysis and description of the specific phenomenon encountered.Key words: STC89C51 ; music player; interrupt引言单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
基于51单片机的音乐播放器设计

题目:音乐播放器课程设计(论文)任务书课程设计(论文)题目:音乐播发器基本内容:利用单片机的定时器产生各种频率的方波,信号经过放大后送到喇叭从而产生各种音调。
自行定义键盘,每按一键,可选择一首歌曲进行演奏,至少能够存储并播放十首歌曲,在LCD上显示演奏歌曲的名称并滚动显示歌词,单片机可连续播放这首歌曲,演奏可通过按键停止。
课程设计(论文)专题部分:题目:音乐播放器基本内容:通过单片机设计可以播放十首歌曲的音乐播放器,同步显示歌曲名称和歌词。
学生接受毕业设计(论文)题目日期第19 周指导教师签字:2009年7月摘要随着电子技术的发展和计算机越来越普遍的使用,单片机作为这两项技术的有机结合也得到了广泛的应用,在某些领域具有不可替代的作用。
音乐播放功能随处都会用到,如,在开发儿童智力的玩具中,等等。
目前,基于单片机实现音乐播放,其体积小、价格低、编程灵活等特点在这一领域独领风骚。
单片机的英文名称为single chip microcomputer,最早出现在20世纪70年代,国际上现在已逐渐被微控制器(Microcontroller Unit 或MCU)一词所取代。
它体积小,集成度高,运算速度快,运行可靠,功耗低,价格廉,因此在数据采集、智能化仪表、通讯设备等方面得到了广泛应用。
而8051单片机在小到中型应用场合很常见,已成为单片机领域的实际标准。
随着硬件的发展,8051单片机系列的软件工具也有了C级编译器和实时多任务操作系统RTOS,为单片机编程使用C语言提供了便利的条件;并针对单片机常用的接口芯片编制通用的驱动函数,可针对常用的功能模块,算法等编制相应的函数;C语言模块化程序结构特点,可以使程序模块大家共享,不断丰富,这样就使得单片机的的程序设计更简单可靠,实时性强,效率高。
作为测控技术与仪器的学生,掌握8051单片机硬件基础及其相关软件操作,将其应用于现代电子产品中是必要而且重要的,这次课程设计我们的题目是用单片机实验箱系统制作音乐播放器。
基于51单片机的音乐播放器[1]
![基于51单片机的音乐播放器[1]](https://img.taocdn.com/s3/m/f35ed64d3b3567ec102d8a20.png)
目录一、概述:_____________________________________________________________ 1二、实验目的:_________________________________________________________ 1三、实验设计:_________________________________________________________ 1四、调试与仿真:_______________________________________________________ 5五、板子外观:________________________________________________________ 15六、设计及调试中的体会:______________________________________________ 16一、概述:现当今,单片机的应用无处不在。
利用单片机控制的万年历也多不胜举。
时钟芯片也相当之多,而利用单片机存储音乐,控制播放最为广泛。
它有功能多﹑价格优﹑外围电路简单的特点,备受音乐爱好者及音乐芯片制造商的青昧。
本实验,用80C51单电机及少数外围实现音乐播放器功能,并伴有彩灯闪烁。
C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。
此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。
因此,使用C语言进行程序设计已成为软件开发的一个主流。
C 语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可靠性,便于改进和扩展,从而研制出规模更大、性能更完备的系统。
因此,用C语言进行8051单片机程序设计是单片机开发与应用的必然趋势。
设计时采用Keil C软件编程,用protues软件仿真,核心器件采用灵活性高且价格低廉的A T89C51芯片。
设计完成后系统可播放自编歌曲,同时发光二极管随着歌曲的不同而闪烁。
用51单片机实现的音乐程序

uint code notefreq[]={ 523, 587, 659, 698, 784, 880, 988,
+ _9 ~! I$ V8 V% L
: h+ H. t6 Z* Q% I! q& D/ `1 W{! c# l7 x0 c5 W' h1 C3 x, G2 W9 M
TH0=FreqSandH;
6 C/ U' p, \. } TL0=FreqSandL;
3 q) ?9 o) N( c! Q& { BEEP_PWR=!BEEP_PWR;2 Z8 V7 g8 G3 V
|! @1 S+ B' M' |) t
uchar i=0,ch,halfflg=0;: y e2 s$ _% N7 b3 C* L& j! h$ i
uchar lasttime;
7 q+ H' Q( F t2 w- f) _ uint freq;
; S5 g: L' f4 {& L% k if((ch==' ')||(ch=='|')||(ch=='\r')||(ch=='\n')) {i++; 7 l0 K9 b+ i3 l1 {6 R
continue;}# W6 W9 Y5 N3 Q
if(!ch) {SoundOff(); return;} //乐曲结束则播放完! a* ]8 R* p! T; x! {! A
#include <reg52.h>
基于51单片机的音乐播放器制作讲解

II
目录Βιβλιοθήκη 目录第 1 章 引言................................................................................................................. 1 1.1 选题背景 ................................................................................................................... 1 1.2 设计原理 ................................................................................................................... 1 1.3 单片机简介 ............................................................................................................... 2 1.4 单片机的发展历史 ................................................................................................... 2 1.5 单片机的应用领域及发展趋势 ............................................................................... 2 第 2 章 方案论证......................................................................................................... 5 2.1 设计要求 ................................................................................................................... 5 2.2 系统描述 ................................................................................................................... 5 2.3 设计方案 ................................................................................................................... 6 2.3.1 集成电路 ................................................................................................................ 6 2.3.2 单片机最小系统 .................................................................................................. 10 2.3.3 结论 ...................................................................................................................... 12 第 3 章 硬件设计....................................................................................................... 13 3.1 硬件结构 ................................................................................................................. 13 3.2 中心控制模块 ......................................................................................................... 13 3.3 电源模块 ................................................................................................................. 16 3.4 控制电路 ................................................................................................................. 17 3.5 复位电路 ................................................................................................................. 17 3.6 电路设计所需要的器件 ......................................................................................... 19 第 4 章 软件设计....................................................................................................... 20 4.1 音乐发声设计原理 ................................................................................................. 20 4.1.1 发声原理 .............................................................................................................. 20 4.1.2 单片机产生不同频率脉冲信号的原理 .............................................................. 20 4.1.3 键控子程序 .......................................................................................................... 23 4.1.4 播放/暂停子程序 ................................................................................................. 24 4.1.5 曲目选择子程序 .................................................................................................. 24 4.2 音乐播放程序设计 ................................................................................................. 25
基于51单片机的音乐播放器制作

的简介:AT89C51:是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
主要功能特性:1)与MCS-51 兼容;2)4K字节可编程FLASH存储器;3)全静态工作:0Hz-24MHz;4)128×8位内部RAM;5)两个16位定时器/计数器;6)5个中断源;7)可编程串行通道;8)低功耗的闲置和掉电模式;9)片内振荡器和时钟电路。
AT89C52:是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。
主要功能特性:1)兼容MCS51指令系统;2)8kB可反复擦写(大于1000次)Flash ROM;3)32个双向I/O口;4)256x8bit内部RAM;5)3个16位可编程定时/计数器中断;6)时钟频率0-24MHz;7)2个串行中断,可编程UART串行通道;8)2个外部中断源,共8个中断源;9)2个读写中断口线,3级加密位;10)低功耗空闲和掉电模式,软件设置睡眠和唤醒功能。
(完整版)基于51单片机的自动音乐播放器设计毕业论文

本科毕业论文(设计)题目: 基于51单片机的自动音乐播放器设计院系:电子与通信工程学院专业:通信工程姓名:张志顺指导教师:陈冬云教师职称:助教填写日期:2014年4月20日摘要为了人们在快节奏的日常生活,优化工厂、事业单位、公司等的计时系统,采用了依靠单片机为基础设计了一种的自动音乐播放器。
本设计利用单片机89C58RD+的计数和定时功能,来完成对时间的定时和显示功能。
并且,通过对定时器初值的设定来产生不同频率的声音,利用定时器中断来对音乐节拍长度的控制。
通过LM386N1音频功率放大器的音频放大功能,将单片机控制输出的信号放大,然后通过扩音器播放乐曲。
通过MAX232型芯片,可以转换PC机上的电压和单片机的电源电压,再通过相应串口接入PC机,这样就能从PC机上将用C语言编写的程序代码下载到单片机上。
最后可以在数码管上显示时间,当到达之前设定的时间之后,扩音系统就会自动播放一段连续而美妙动听的音乐。
此设计规避了传统闹钟的难听并且刺耳声音,而变成的是美妙动听的音乐,能给处于当前快节奏生活的人们的日常生活提供精确的计时,且因为成本较低,值得推广。
关键词:单片机;自动音乐播放;音频转换;时间显示;LM386N1音频功率放大器。
AbstractTo people in the fast pace of daily life, optimization of factories, institutions, companies such as timing system, based on microcomputer was adopted to design a kind of automatic music player. This design using the single chip microcomputer 89 c58rd + count and timing functions, to complete the regular and display function of time. And, through to the setting of the initial value of timer to generate different frequencies of sound, using a timer interrupt to control of the beat of the music length. Through the audio amplifier function LM386N1 audio power amplifier, the single-chip microcomputer control output signal amplification, and then through loudspeakers. Through MAX232 chip, can convert the voltage of power supply voltage of PC and microcontroller, again through the corresponding access PC serial port, so you can from the PC to download program code written in C language to the single chip microcomputer. Last time can be displayed on the digital tube, when, after arriving in setting the time before the public address system will automatically play a continuous and delightful music. This design to avoid the traditional alarm clock ugly and harsh voice, and become the beautiful melody of music, can give in the fast-paced life of the People's Daily life to provide accurate timing, and because of lower cost, is worth promoting.Key words: single chip microcomputer; Automatic music playback; Audio conversion; Time display; LM386N1 audio power amplifier.目录第一章绪论 (1)第二章系统硬件的设计 (2)2.1设计目的 (2)2.2硬件电路结构 (2)2.3 89C51单片机芯片介绍 (3)2.4 89C51单片机的基本组成 (3)2.5 硬件电路设计 (4)第三章音乐播放器的系统软件设计 (8)3.1音频脉冲产生的原理 (8)3.2 节拍产生原理与音乐频率转换 (9)3.3 音阶的实现 (10)3.4 音频转换流程图 (11)3.5 主程序设计流程 (12)第四章系统调试及分析 (12)4.1硬件调试 (13)4.2 软件调试 (14)4.3 仿真结果 (17)4.4 演示效果 (17)结论 (19)致谢 (19)参考文献 (20)附录 (22)第一章绪论本设计系统是基于单片机控制实现完成音乐播放功能的设计,在现实生活中具有其广泛的应用及实际意义。
用51单片机播放音乐(附C程序)

用51单片机IO口播放几首音乐(附C程序)以下为51单片机播放音乐简谱的函数库:/*说明************************************************************************曲谱存贮格式 unsigned char code MusicName{音高,音长,音高,音长...., 0,0}; 末尾:0,0 表示结束(Important)音高由三位数字组成:●个位是表示 1~7 这七个音符;●十位是表示音符所在的音区:1-低音,2-中音,3-高音;●百位表示这个音符是否要升半音: 0-不升,1-升半音。
音长最多由三位数字组成:●个位表示音符的时值,其对应关系是: |数值(n): |0 |1 |2 |3 | 4 | 5 | 6 |几分音符: |1 |2 |4 |8 |16 |32 |64 音符=2^n ;●十位表示音符的演奏效果(0-2): 0-普通,1-连音,2-顿音;●百位是符点位: 0-无符点,1-有符点。
调用演奏子程序的格式:Play(乐曲名,调号,升降八度,演奏速度);|乐曲名 : 要播放的乐曲指针,结尾以(0,0)结束;|调号(0-11) : 是指乐曲升多少个半音演奏;|升降八度(1-3) : 1:降八度, 2:不升不降, 3:升八度;|演奏速度(1-12000): 值越大速度越快;***************************************************************************/#ifndef __SOUNDPLAY_H_REVISION_FIRST__#define __SOUNDPLAY_H_REVISION_FIRST__#include//**************************************************************************#define SYSTEM_OSC 11059200//12000000 //定义晶振频率12000000HZ#define SOUND_SPACE 4/5 //定义普通音符演奏的长度分率,//每4分音符间隔sbit BeepIO = P2^6; //定义输出管脚unsigned int code FreTab[12] = { 262,277,294,311,330,349,369,392,415,440,466,494 }; //原始频率表unsigned char code SignTab[7] = { 0,2,4,5,7,9,11 }; //1~7在频率表中的位置unsigned char code LengthTab[7]= { 1,2,4,8,16,32,64 };unsigned char Sound_Temp_TH0,Sound_Temp_TL0; //音符定时器初值暂存unsigned char Sound_Temp_TH1,Sound_Temp_TL1; //音长定时器初值暂存//**************************************************************************void InitialSound(void){BeepIO = 1;Sound_Temp_TH1 = (65535-(1/1200)*SYSTEM_OSC)/256; // 计算TL1应装入的初值 (10ms 的初装值)Sound_Temp_TL1 = (65535-(1/1200)*SYSTEM_OSC)%256; // 计算TH1应装入的初值TH1 = Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TMOD |= 0x11;ET0 = 1;ET1 = 0;TR0 = 0;TR1 = 0;EA = 1;}void BeepTimer0(void) interrupt 1 //音符发生中断{BeepIO = !BeepIO;TH0 = Sound_Temp_TH0;TL0 = Sound_Temp_TL0;}//************************************************************************** void Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,unsigned int Speed){unsigned int NewFreTab[12]; //新的频率表unsigned char i,j;unsigned int Point,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength; unsigned char Tone,Length,SL,SH,SM,SLen,XG,FD;for(i=0;i<12;i++) // 根据调号及升降八度来生成新的频率表{j = i + Signature;if(j > 11){j = j-12;NewFreTab[i] = FreTab[j]*2;}elseNewFreTab[i] = FreTab[j];if(Octachord == 1)NewFreTab[i]>>=2;else if(Octachord == 3)NewFreTab[i]<<=2;}SoundLength = 0;while(Sound[SoundLength] != 0x00) //计算歌曲长度{SoundLength+=2;}Point = 0;Tone = Sound[Point];Length = Sound[Point+1]; // 读出第一个音符和它时时值LDiv0 = 12000/Speed; // 算出1分音符的长度(几个10ms)LDiv4 = LDiv0/4; // 算出4分音符的长度LDiv4 = LDiv4-LDiv4*SOUND_SPACE; // 普通音最长间隔标准TR0 = 0;TR1 = 1;while(Point < SoundLength){SL=Tone%10; //计算出音符SM=Tone/10%10; //计算出高低音SH=Tone/100; //计算出是否升半CurrentFre = NewFreTab[SignTab[SL-1]+SH]; //查出对应音符的频率if(SL!=0){if (SM==1) CurrentFre >>= 2; //低音if (SM==3) CurrentFre <<= 2; //高音Temp_T = 65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);//计算计数器初值 Sound_Temp_TH0 = Temp_T/256;Sound_Temp_TL0 = Temp_T%256;TH0 = Sound_Temp_TH0;TL0 = Sound_Temp_TL0 + 12; //加12是对中断延时的补偿}SLen=LengthTab[Length%10]; //算出是几分音符XG=Length/10%10; //算出音符类型(0普通1连音2顿音)FD=Length/100;LDiv=LDiv0/SLen; //算出连音音符演奏的长度(多少个10ms)if (FD==1)LDiv=LDiv+LDiv/2;if(XG!=1)if(XG==0) //算出普通音符的演奏长度if (SLen<=4)LDiv1=LDiv-LDiv4;elseLDiv1=LDiv*SOUND_SPACE;elseLDiv1=LDiv/2; //算出顿音的演奏长度elseLDiv1=LDiv;if(SL==0) LDiv1=0;LDiv2=LDiv-LDiv1; //算出不发音的长度if (SL!=0){TR0=1;for(i=LDiv1;i>0;i--) //发规定长度的音{while(TF1==0);TH1 = Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TF1=0;}}if(LDiv2!=0){TR0=0; BeepIO=1;for(i=LDiv2;i>0;i--) //音符间的间隔{while(TF1==0);TH1 = Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TF1=0;}}Point+=2;Tone=Sound[Point];Length=Sound[Point+1];}BeepIO = 1;}//**************************************************************************#endif附录:以下为曲谱编码文件,自己可以根据规则,对照简谱编写曲谱编码表。
基于51单片机音乐盒程序设计

基于51单片机音乐盒程序设计一、功能设计说明1、电路设计实物图矩阵键盘部分电路图2、运行流程图3、电子琴模式按键对应发音设计按键 发音 按键 发音 K1 低 1 K9 中 2 K2 低 2 K10 中 3 K3 低 3 K11 中 4 K4 低 4 K12 中 5 K5低 5K13中 6程序开始播放小苹果歌曲判断任意按键是否按下继续播放小苹果歌曲否是进入电子琴模式判断K16按键是否按下播放完成是否按键发音按键发音K6 低6 K14 中7K7 低7 K15 高1K8 中1 K16 重新播放小苹果二、硬件电路说明1、程序下载电路音乐盒电路图ISP下载接口本设计采用的单片机为A T89S52单片机,需使用ISP下载器进行下载程序,程序下载电路图如图中ISP1接口.2、音乐发音电路IO口P10发出不同频率的脉冲,则BUZZER产生各种不同的声音,本设计采用12MHZ 晶振,系统频率1MHZ,定时器计数一个1us,其对应关系如下表所示:音符频率(HZ)简谱码(T值)音符频率(HZ) 简谱码(T值)低 1 DO 262 63628 # 4 FA# 740 64860 # 1 DO# 277 63731 中 5 SO 784 64898 低 2 RE 294 63853 # 5 SO# 831 64934 # 2 RE# 311 63928 中 6 LA 880 64968 低 3 M 330 64021 # 6 932 64994 低 4 FA 349 64103 中 7 SI 988 65030 # 4 FA# 370 64185 高 1 DO 1046 65058 低 5 SO 392 64260 # 1 DO# 1109 65085 # 5 SO# 415 64331 高 2 RE 1175 65110 低 6 LA 440 64400 # 2 RE# 1245 65134 # 6 466 64463 高 3 M 1318 65157 低 7 SI 494 64524 高 4 FA 1397 65178中1 DO 523 64580 # 4 FA# 1480 65198# 1 DO# 554 64633 高 5 SO 1568 65217中 2 RE 587 64684 # 5 SO# 1661 65235# 2 RE# 622 64732 高 6 LA 1760 65252中 3 M 659 64777 # 6 1865 65268中 4 FA 698 64820 高 7 SI 1967 65282 计算方法:例如产生262HZ频率(发音DO),周期T=1/262=3816 us,由于定时器中断使IO不停取反,故周期T=3816/2=1908 us 定时器初值N=65536-1908=63628TH0=63628/256TL0=65536%256三、程序代码说明1 、脉冲产生采用定时器0溢出中断产生脉冲,定时器初始化如下:TMOD = 0x01; //定时器0工作方式1 ,即十六位计数器计数TR0 = 1; //启动定时器ET0 = 1; //定时器0溢出中断使能EA = 1; //总中断使能定时器0溢出中断产生脉冲,void Timer0() interrupt 1代码如下:TH0 = th0;TL0 = tl0;if(th0==0)BUZZER=1; //判断停顿,有停顿不发音else{BUZZER = ~BUZZER;} //无停顿发音2、音普规则:a、音普由一个字节十六进制数组成b、高4位代表节拍,一拍约400MS,将一拍分成8份c、低4位代表音符,一一对应Note[]列表d、0x20代表歌曲结束符e、uint code Note[]={0,64580,64684,64777,64820,64898,64968,65030,/*中音*/63628,63853,64021,64103,64260,64400,64524,/*低音*/65058,65110,65157,65178,65217,65252,65282/*高音*/};该列表为发音所对应的定时器初装值例如编写如下一段音乐列表:0x83,0x81,0x82,0x8d,0x43,0x42,0x41,0x42,0x8d,0x8d,0x40 0x40表示停顿4*50MS /*你是我的小呀小苹果*/3、音普列表解读while(Xiaopingguo[temp]!=0x20) //不停判断音乐是否结尾,结尾跳出{jiepai=Xiaopingguo[temp]>>4; //获取节拍,即高4位数yinpu=Xiaopingguo[temp]&0x0F; //获取音普,即低4位数Timer_Set(yinpu); //根据列表对应发音Delay(jiepai*50); //节拍temp++;P0 = 0x0f;if(P0!=0x0f)goto out;}void Timer_Set(uchar num)为定时器0赋值子程序,包含的代码如下:th0=Note[num]/256;tl0=Note[num]%256;四、程序代码编写/**********************************************************************************************项目名称:音乐盒单片机型号:AT89S52频率:外部石英晶振12MHZ设计时间:2014-08-06设计者:小左MCU工作室Q Q: 576689422******************************************************************************* **************/#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit BUZZER=P1^0;//蜂鸣器输出uchar th0,tl0; //定时器0赋值变量uchar start_; //返回变量uint code Note[]={0,64580,64684,64777,64820,64898,64968,65030,/*中音*/63628,63853,64021,64103,64260,64400,64524,/*低音*/65058,65110,65157,65178,65217,65252,65282/*高音*/};/*************************************************************************音普规则:1、音普由一个字节十六进制数组成2、高4位代表节拍,一拍约400MS,将一拍分成8份3、低4位代表音符,一一对应Note[]列表4、0x20代表歌曲结束符**************************************************************************/uchar code Xiaopingguo[]={0x83,0x81,0x82,0x6d,0x43,0x42,0x41,0x42,0x8d,0x8d,0x40,/*你是我的小呀小苹果*/0x83,0x81,0x82,0x82,0x45,0x43,0x8e,0x81,0x40,/*怎么爱你都不嫌多*/0x41,0x4e,0x8d,0x4e,0x41,0x82,0x8c,0x46,0x45,0x83,0x83,0x43,0x40,/*红红的小脸温暖我的心窝*/0x42,0x81,0x42,0x43,0x42,0x43,0x42,0x23,0x25,0x85,0x30,0x45,0x10,0x45,0x30,0x45,0x10,0x 45,0x30,0x85,0x85,0x85,0x40,/*点亮我生命的火火火火火火*/0x83,0x81,0x82,0x6d,0x43,0x42,0x41,0x42,0x8d,0x8d,0x40,/*你是我的小呀小苹果*/0x83,0x81,0x82,0x82,0x45,0x43,0x8e,0x81,0x40,/*就像天边最美丽的云朵*/0x41,0x4e,0x8d,0x4e,0x41,0x82,0x8c,0x46,0x45,0x83,0x83,0x43,0x40,/*春天又来到了花开满山坡*/0x42,0x81,0x42,0x43,0x82,0x8c,0x8d,0x4d,0x41,0x8d,0x20/*种下希望就会收获*/};//----延时子程序--------------------------------------------------void Delay(uint xms){uint j;for(;xms>0;xms--)for(j=110;j>0;j--);}//---------------------------------------------------------------//----定时器变量赋值--------------------------------------------- void Timer_Set(uchar num){th0=Note[num]/256;tl0=Note[num]%256;}//---------------------------------------------------------------//----系统初始化------------------------------------------------- void Init(){BUZZER = 1; //关闭蜂鸣器TMOD = 0x01; //定时器0工作方式1TR0 = 1; //启动定时器ET0 = 1; //定时器0溢出中断使能EA = 1; //总中断使能start_ = 0; //返回变量初始化}//---------------------------------------------------------------//----按键扫描--------------------------------------------------- void Key_Scan(){P0 = 0x0f;if(P0!=0x0f){Delay(5);if(P0!=0x0f){P0=0xfe;if(P0==0xee){Timer_Set(8);} //按键1被按下else if(P0==0xde){Timer_Set(12);}//按键5被按下else if(P0==0xbe){Timer_Set(2);} //按键9被按下else if(P0==0x7e){Timer_Set(6);} //按键13被按下else;P0=0xfd;if(P0==0xed){Timer_Set(9);} //按键2被按下else if(P0==0xdd){Timer_Set(13);}//按键6被按下else if(P0==0xbd){Timer_Set(3);} //按键10被按下else if(P0==0x7d){Timer_Set(7);} //按键14被按下else;P0=0xfb;if(P0==0xeb){Timer_Set(10);} //按键3被按下else if(P0==0xdb){Timer_Set(14);}//按键7被按下else if(P0==0xbb){Timer_Set(4);} //按键11被按下else if(P0==0x7b){Timer_Set(15);}//按键15被按下else;P0=0xf7;if(P0==0xe7){Timer_Set(11);} //按键4被按下else if(P0==0xd7){Timer_Set(1);} //按键8被按下else if(P0==0xb7){Timer_Set(5);} //按键12被按下else if(P0==0x77){start_=1;} //按键16被按下else;}}else{th0=0;}}//---------------------------------------------------------------//----主程序----------------------------------------------------- void main(){uchar temp,yinpu,jiepai;Init();while(1){start:temp=0;while(Xiaopingguo[temp]!=0x20){jiepai=Xiaopingguo[temp]>>4; //获取节拍yinpu=Xiaopingguo[temp]&0x0F; //获取音普Timer_Set(yinpu);Delay(jiepai*50);temp++;P0 = 0x0f;if(P0!=0x0f)goto out;}out:th0 = 0;BUZZER = 1;//关闭蜂鸣器while(1){Key_Scan();if(start_==1){start_=0;goto start;}}}}//---------------------------------------------------------------//----定时器0中断服务程序----------------------------------------void Timer0() interrupt 1{TH0 = th0;TL0 = tl0;if(th0==0)BUZZER=1; //判断停顿,有停顿不发音else{BUZZER = ~BUZZER;} //无停顿发音}//----------------------------------------------------------------更多精彩程序请在淘宝店铺中搜索“小左MCU”QQ:576689422。
基于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单片机设计了一个简单的音乐播放器,实现了支持多种格式音频文件的播放、音量调节和文件选择功能,并提供了简单的用户界面。
51单片机唱歌 C51音乐程序

51单片机唱歌 C51音乐程序#i nclude <reg52.h>#i nclude <intrins.h>//本例采用89C52, 晶振为11.0592MHZ//关于如何编制音乐代码, 其实十分简单,各位可以看以下代码.//频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍;//所以拿出谱子, 试探编吧!unsigned char n=0; //n为节拍常数变量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); //采用while(--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;} //如果碰到结束符,延时1秒,回到开始再来一遍else if(p==0xff) { i=i+1;delayms(100),TR0=0; goto a;} //若碰到休止符,延时100ms,继续取下一音符else {m=music_tab[i++], n=music_tab[i++];} //取频率常数和节拍常数TR0=1; //开定时器1while(n!=0) P1=~P1,delay(m); //等待节拍完成, 通过P1口输出音频(可多声道哦!)TR0=0; //关定时器1 }}。
51单片机音乐播放器程序

51单片机音乐播放器程序#include //包含51单片机寄存器定义的头文件sbit sound=P3^6; //将sound位定义为P3.6unsigned int C; //储存定时器的定时常数//以下是C调低音的音频宏定义#define l_dao 262 //将"l_dao"宏定义为低音"1"的频率262Hz #define l_re 286 //将"l_re"宏定义为低音"2"的频率286Hz#define l_mi 311 //将"l_mi"宏定义为低音"3"的频率311Hz#define l_fa 349 //将"l_fa"宏定义为低音"4"的频率349Hz#define l_sao 392 //将"l_sao"宏定义为低音"5"的频率392Hz#define l_la 440 //将"l_a"宏定义为低音"6"的频率440Hz#define l_xi 494 //将"l_xi"宏定义为低音"7"的频率494Hz//以下是C调中音的音频宏定义#define dao 523 //将"dao"宏定义为中音"1"的频率523Hz#define re 587 //将"re"宏定义为中音"2"的频率587Hz#define mi 659 //将"mi"宏定义为中音"3"的频率659Hz#define fa 698 //将"fa"宏定义为中音"4"的频率698Hz#define sao 784 //将"sao"宏定义为中音"5"的频率784Hz#define la 880 //将"la"宏定义为中音"6"的频率880Hz#define xi 987 //将"xi"宏定义为中音"7"的频率523H//以下是C调高音的音频宏定义#define h_dao 1046 //将"h_dao"宏定义为高音"1"的频率1046Hz #define h_re 1174 //将"h_re"宏定义为高音"2"的频率1174Hz#define h_mi 1318 //将"h_mi"宏定义为高音"3"的频率1318Hz #define h_fa 1396 //将"h_fa"宏定义为高音"4"的频率1396Hz #define h_sao 1567 //将"h_sao"宏定义为高音"5"的频率1567Hz #define h_la 1760 //将"h_la"宏定义为高音"6"的频率1760Hz#define h_xi 1975 //将"h_xi"宏定义为高音"7"的频率1975Hz /*******************************************函数功能:1个延时单位,延时300ms******************************************/void delay(){unsigned char i,j;for(i=0;i<300;i++)for(j=0;j<300;j++);}/*******************************************函数功能:主函数******************************************/void main(void){unsigned char i,j;//以下是《知足》的一段简谱unsignedint code f[]={ dao,l_xi,dao ,sao,sao,dao,l_xi,dao,mi,dao,l_xi,dao,l_sao,mi,re,l_la,l_xi,dao,re,dao,l_xi,dao,sao,sao,la,xi,la,mi,la,xi,h_dao,sao,mi,mi,fa,mi,l_la,re,dao,dao,l_xi,dao,sao,sao,dao,l_xi,dao,mi,dao,l_xi,dao,l_sao,mi,re,l_la,l_xi,dao,re,dao,l_xi,dao,sao,sao,la,xi,h_dao,sao,la,xi,h_dao,sao,mi,mi,fa,mi,l_sao,re, dao,l_sao,h_dao,xi, la,fa,re, re,l_sao,xi,la,sao,re,dao,dao,re,mi,fa,fa,la,sao,mi,re,mi,fa,fa,sao,dao,h_dao,xi, la,fa,xi,h_dao,h_re, sao,h_re,xi,h_dao,la,xi,h_dao,h_re,sao,0xff}; //以0xff作为音符的结束标志//以下是简谱中每个音符的节拍//"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位unsigned char code JP[ ]={2,1,1,2,2,2,1,1,4,2,1,1,2,2,1,1,1,1,4,2,1,1,2,1,1,2,1,1,4,2,1,1,2,1,1,1,1,1,1,4,2,1,1,2,2,2,1,1,4,2,1,1,2,2,1,1,1,1,4,2,1,1,2,2,2,1,1,4,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,2,1,1,2,1,1,2,1,1,1,1,1,1,2,2,1,1,2,2,1,1,3,1/2,1/2,3,1/2,1/2,3,1,4,};EA=1; //开总中断ET0=1; //定时器T0中断允许TMOD=0x00; // 使用定时器T0的模式1(13位计数器)while(1) //无限循环{i=0; //从第1个音符f[0]开始播放while(f[i]!=0xff) //只要没有读到结束标志就继续播放{C=460830/f[i];TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法TR0=1; //启动定时器T0for(j=0;j<="">delay(); //延时1个节拍单位TR0=0; //关闭定时器T0i++; //播放下一个音符}}}/*********************************************************** 函数功能:定时器T0的中断服务子程序,使P3.7引脚输出音频的方波************************************************************/ void Time0(void ) interrupt 1 using 1{sound=!sound; //将P3.7引脚输出电平取反,形成方波TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法}。
基于51单片机的音乐播放设计

基于51单片机的音乐播放设计摘要为方便人们的日常生活,优化学校、机关等单位的计时系统,采用以单片机为基础设计了一种的自动音乐播放器。
本设计利用单片机AT89S52的定时和计数功能,来完成时间的显示和定时功能。
并且,通过对定时器初值的设定来产生不同频率的声音,利用定时器中断来完成对音乐节拍长度的控制。
通过音频功率放大器,将单片机输出的信号放大,再通过喇叭播放乐曲。
通过MAX232型芯片,可以转换PC机上的电压和单片机的电源电压,再通过串口接入PC机,这样就能从PC机上将用C语言编写的程序下载到单片机上。
最后可在数码管上显示时间,当定时时间到后,喇叭自动播放一段连续的音乐。
此设计摆脱了传统闹钟的刺耳声音,取而代之的是美妙的音乐,能为人们的日常生活提供准确的计时,且成本低廉,值得推广。
关键词:音乐播放;音频转换;时间显示;ULN2003Music playback design based on 51 single chip microcomputerAbstractFor the convenience of People's Daily lives, to optimize the timing system schools, agencies and other units, on the basis of the single chip microcomputer was adopted to design a kind of automatic music player.This design using the single chip microcomputer AT89S52 timing and counting functions, to complete the time display and timing functions.And, by the setting of the initial value of timer to generate different frequencies of sound, using a timer interrupt to complete control of the beat of the music length.Through the audio power amplifier, MCU output signal amplification, then play the music over the loudspeaker.Through MAX232 chip, can convert the voltage of power supply voltage of PC and microcontroller, through a serial port connected to the PC, so you can from the PC will be written in C language program downloaded to the microcontroller.Finally on the digital tube display time, when the time to regularly, speakers play a continuous music automatically.This design to get rid of the traditional alarm clock sharp voice, instead, the wonderful music, can offer the accurate timing for People's Daily lives, and low cost, is worth promoting.Key words:Music playback;Audio conversion;Time display;ULN2003目录1 总体设计 (1)2 硬件设计 (2)2.1 AT89S52型单片机介绍 (2)2.2 ULN2003及外围电路的设计 (2)2.3 串行通信和MAX232芯片 (3)2.4 AT89S52的定时/计数器概述 (3)2.5 LED显示 (5)3 软件设计 (6)3.1 音乐编程原理及其流程图 (6)3.1.1 产生声音信号 (6)3.1.2 产生节拍信号 (6)3.1.3 音频转换 (7)3.2 时间显示程序设计 (8)4 仿真及调试过程 (9)4.1 硬件调试过程 (9)4.2 软件仿真过程 (9)5 结束语 (11)参考文献 (12)1 总体设计在基于单片机的自动音乐播放器中,采用AT89C52RC型单片机为硬件基础,通过C语言对芯片进行编程。
基于-51单片机的音乐程序

基于51单片机的按键切换播放音乐原理图:引脚说明:共5个按键,分别接51单片机的P0~P4引脚,前4个按键控制播放设置好的四首音乐,第5个按键用来关闭音乐。
按键采用中断方式,任意时刻按下任意按键那么立即进入所按按键的功能;蜂鸣器接单片机的P3.6口。
仿真说明:使用proteus仿真,晶振:12MHZ。
程序代码如下:/*12Mhz晶振工作*/#include <reg52.h>#define uint unsigned int#define uchar unsigned charsbit voice=P3^6;uchar code sound1[]={0xff,0x40,0x80,0x30,0x40,0x2b,0x40,0x26,0x80,0x24,0x10,0x26,0x40,0x30,0x40,0x2b,0x80,0x30,0x40,0x39,0x40,0x30,0xc0,0x40,0x80,0x30,0x40,0x2b,0x40, 0x26,0x40,0x26,0x20,0x24,0x20,0x20,0x40,0x30,0x40,0x24,0x80,0x26,0x10, 0x20,0x40,0x2b,0x20,0x26,0x20,0x26,0x20,0x2b,0x20,0x2b,0xc0,0x26,0x80, 0x20,0x40,0x19,0x40,0x19,0x80,0x1c,0x10,0x1c,0x80,0x20,0x40,0x20,0x20, 0x1c,0x20,0x19,0x40,0x1c,0x20,0x20,0x20,0x26,0xc0,0x24,0x80,0x24,0x10, 0x20,0x40,0x1c,0x40,0x20,0x40,0x24,0x20,0x26,0x20,0x2b,0x80,0x33,0x40, 0x33,0x20,0x39,0x20,0x40,0x40,0x39,0x40,0x30,0xc0,0x18,0x80,0x1c,0x80, 0x24,0x80,0x20,0x10,0x1c,0x80,0x19,0x40,0x19,0x20,0x19,0x20,0x19,0x40, 0x1c,0x20,0x20,0x20,0x26,0xc0,0x18,0x80,0x1c,0x80,0x24,0x80,0x20,0x10, 0x1c,0x80,0x1c,0x40,0x1c,0x20,0x1c,0x20,0x1c,0x40,0x24,0x20,0x26,0x20, 0xff,0x20,0x00};//同一首歌*/uchar code sound2[]={0xff,0x18,0x40,0x1c,0x20,0x18,0x20,0x13,0x40,0x13,0x20,0x15,0x20,0x13,0x20, 0x15,0x20,0x13,0x20,0x15,0x20,0x18,0x20,0x19,0x20,0x1c,0x20,0x20,0x20, 0x1c,0x40,0x19,0x20,0x18,0x20,0x15,0x40,0x10,0x80,0x13,0x10,0x10,0x40,0x15,0x10,0x13,0x10,0x18,0x10,0x1c,0x10,0x26,0x10, 0x13,0x10,0x18,0x10,0x1c,0x10,0x26,0x10,0x13,0x10,0x18,0x10,0x1c,0x10, 0x26,0x10,0x13,0x10,0x18,0x10,0x1c,0x10,0x26,0x10,0x15,0x10,0x19,0x10, 0x20,0x10,0x2b,0x10,0x15,0x10,0x19,0x10,0x20,0x10,0x2b,0x10,0x15,0x10, 0x19,0x10,0x20,0x10,0x2b,0x10,0x15,0x10,0x19,0x10,0x20,0x10,0x2b,0x10, 0x18,0x10,0x1c,0x10,0x24,0x10,0x30,0x10,0x18,0x10,0x1c,0x10,0x24,0x10, 0x30,0x10,0x19,0x10,0x20,0x10,0x2b,0x10,0x19,0x10,0x19,0x10,0x20,0x10, 0x2b,0x10,0x19,0x10,0x18,0xc0,0xff,0x40,0x40,0x10,0x39,0x20,0x30,0x20, 0x2b,0x20,0x30,0x20,0x2b,0x20,0x26,0x20,0x26,0x20,0x26,0x20,0x26,0x20,0x26,0x20,0x26,0x20,0x2b,0x20,0x30,0x20,0x2b,0x40,0x30,0x10,0x30,0x20, 0x39,0x20,0x30,0x40,0x2b,0x10,0x2b,0x20,0x26,0x20,0x26,0x80,0x40,0x10, 0x39,0x20,0x30,0x20,0x2b,0x20,0x30,0x20,0x2b,0x20,0x30,0x20,0x30,0x20, 0x20,0x20,0x20,0x20,0x26,0x20,0x2b,0x20,0x26,0x20,0x2b,0x20,0x30,0x20, 0x30,0x20,0x26,0x20,0x26,0x20,0x26,0x20,0x2b,0x20,0x30,0x20,0x2b,0x40, 0x2b,0x10,0x2b,0x20,0x2b,0x20,0x2b,0x40,0x30,0x10,0x30,0x20,0x39,0x20, 0x2b,0x80,0x40,0x10,0x39,0x20,0x30,0x20,0x2b,0x20,0x30,0x20,0x2b,0x20, 0x26,0x20,0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x20,0x2b,0x20,0x30,0x20, 0x2b,0x20,0x26,0x20,0x26,0x20,0x1c,0x20,0x1c,0x20,0x26,0x20,0x2b,0x20, 0x30,0x20,0x2b,0x40,0x30,0x10,0x30,0x20,0x39,0x20,0x30,0x40,0x2b,0x10, 0x2b,0x20,0x26,0x20,0x20,0x80,0x40,0x10,0x39,0x20,0x30,0x20,0x2b,0x20, 0x30,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x1c,0x20,0x20,0x20, 0x26,0x20,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x26,0x20,0x26,0x20, 0x26,0x20,0x2b,0x20,0x30,0x20,0x2b,0x40,0x2b,0x10,0x2b,0x20,0x2b,0x20, 0x2b,0x40,0x30,0x10,0x30,0x20,0x39,0x20,0x30,0x80,0x30,0x10,0x18,0x20, 0x19,0x20,0x18,0x20,0x1c,0x20,0x18,0x40,0x1c,0x10,0x1c,0x20,0x20,0x20, 0x1c,0x20,0x20,0x20,0x26,0x20,0x2b,0x20,0x26,0x20,0x20,0x20,0x1c,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,0x20,0x20,0x1c,0x40,0x1c,0x10, 0x1c,0x20,0x1c,0x20,0x1c,0x40,0x20,0x10,0x20,0x20,0x1c,0x20,0x20,0x20, 0x26,0x20,0x26,0x40,0xff,0x20,0x30,0x20,0x2b,0x20,0x26,0x20,0x20,0x20, 0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x30,0x20,0x2b,0x20,0x26,0x20, 0x1c,0x20,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x30,0x20,0x30,0x20, 0x30,0x20,0x18,0x40,0x18,0x10,0x18,0x20,0x18,0x20,0x18,0x40,0x1c,0x10,0x19,0x20,0x18,0x20,0x19,0x20,0x1c,0x20,0x20,0x20,0x1c,0x20,0x20,0x20, 0x26,0x20,0x2b,0x20,0x26,0x20,0x20,0x20,0x1c,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x1c,0x20,0x20,0x20,0x1c,0x40,0x1c,0x10,0x1c,0x20,0x1c,0x20, 0x1c,0x40,0x20,0x10,0x20,0x20,0x1c,0x20,0x20,0x20,0x26,0x20,0x26,0x40, 0xff,0x20,0x30,0x20,0x2b,0x20,0x26,0x20,0x20,0x20,0x26,0x20,0x2b,0x20, 0x30,0x20,0x30,0x20,0x30,0x20,0x2b,0x20,0x26,0x20,0x1c,0x20,0x26,0x20, 0x2b,0x20,0x30,0x20,0x18,0x80,0xff,0x40,0xff,0x40,0xff,0x20,0x18,0x20,0x1c,0x20,0x18,0x20,0x1c,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1c,0x20, 0x20,0x20,0x26,0x20,0x2b,0x20,0x26,0x20,0x2b,0x20,0x2b,0x20,0x30,0x20, 0x39,0x20,0x30,0x20,0x30,0x20,0x2b,0x20,0x30,0xc0,0x30,0x80,0x30,0x20, 0x18,0x20,0x1c,0x20,0x18,0x20,0x15,0x20,0x18,0x20,0x18,0x20,0x18,0x20, 0x15,0x20,0x18,0x20,0x18,0x20,0x18,0x20,0x15,0x20,0x18,0x20,0x1c,0x20, 0x18,0x20,0x13,0x20,0x15,0x20,0x15,0x20,0x18,0x20,0x1c,0x20,0x18,0x20, 0x15,0x40,0x30,0xc0,0xff,0x40,0x00}; //爱情转移*/uchar code sound3[]={0xff,0x40,0x10,0x39,0x10,0x30,0x10,0x2b,0x10,0x26,0x20,0x20,0x10,0x20,0x10, 0x20,0x30,0x18,0x10,0x19,0x20,0x1c,0x20,0x20,0x20,0x20,0x40,0x1c,0x20, 0x30,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,0x24,0x10,0x26,0x10, 0x26,0x10,0x2b,0x20,0x30,0x10,0x39,0x20,0x30,0x10,0x30,0x10,0x30,0x20, 0x20,0x20,0x24,0x10,0x26,0x10,0x2b,0x10,0x30,0x10,0x33,0x10,0x40,0x10, 0x39,0x20,0x39,0xc0,0xff,0x20,0x26,0x10,0x20,0x10,0x1c,0x10,0x20,0x10, 0x1c,0x10,0x20,0x10,0x1c,0x10,0x18,0x30,0x19,0x10,0x1c,0x10,0x1c,0x10, 0x20,0x10,0x1c,0x20,0x20,0x20,0x1c,0x20,0x1c,0x10,0x18,0x10,0x19,0x20,0x1c,0x10,0x20,0x10,0x1c,0x10,0x18,0x30,0x15,0x10,0x18,0x10,0x15,0x10, 0x18,0x10,0x18,0x10,0x15,0x30,0x13,0x20,0x13,0x10,0x15,0x10,0x18,0x10, 0x15,0x20,0x13,0x10,0x13,0x60,0x15,0x20,0x13,0x20,0x15,0x10,0x18,0x10, 0x15,0x10,0x18,0x10,0x15,0x20,0x18,0x10,0x15,0x10,0x15,0x60,0x15,0x20, 0x13,0x20,0x15,0x10,0x18,0x10,0x18,0x10,0x18,0x10,0x18,0x20,0x19,0x10, 0x1c,0x10,0x1c,0x60,0xff,0x20,0x13,0x20,0x15,0x10,0x18,0x10,0x15,0x10, 0x18,0x10,0x15,0x20,0x18,0x10,0x15,0x10,0x15,0x20,0x18,0x20,0x18,0x10, 0x10,0x30,0x10,0xc0,0x18,0x20,0x15,0x20,0x13,0x10,0x15,0x10,0x13,0x10, 0x15,0x10,0x13,0x10,0x15,0x10,0x13,0x10,0x15,0x10,0x15,0x10,0x10,0x30, 0x10,0x20,0x13,0x10,0x10,0x10,0x0e,0x10,0x0e,0x10,0x0e,0x10,0x0e,0x10, 0x10,0x20,0x13,0x10,0x15,0x10,0x13,0x60,0x15,0x20,0x13,0x20,0x15,0x20, 0x18,0x10,0x1c,0x10,0x1c,0x40,0x18,0x20,0x19,0x10,0x1c,0x10,0x1c,0x40, 0xff,0x20,0x0e,0x20,0x10,0x20,0x13,0x20,0x15,0x40,0x18,0x20,0x15,0x20, 0xff,0x20,0x26,0x20,0x20,0x20,0x26,0x20,0x15,0x20,0x13,0x40,0x15,0x20, 0x18,0x20,0x1c,0xc0,0x30,0x40,0x2b,0x30,0x26,0x10,0x39,0x40,0xff,0x20, 0x30,0x10,0x39,0x10,0x33,0x10,0x30,0x10,0x2b,0x20,0x2b,0x20,0x30,0x10, 0x2b,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x1c,0x10,0x20,0x10,0x2b,0x10, 0x26,0x10,0x26,0x80,0x18,0x10,0x19,0x10,0x1c,0x10,0x1c,0x10,0x19,0x20, 0x26,0x20,0xff,0x20,0x26,0x20,0x20,0x20,0x26,0x20,0x15,0x20,0x13,0x40, 0x15,0x20,0x18,0x20,0x1c,0xc0,0xff,0x20,0x26,0x20,0x20,0x20,0x26,0x20, 0x15,0x20,0x13,0x40,0x15,0x20,0x18,0x20,0x1c,0x40,0x1c,0xc0,0x00};//最后一次的温柔*/uchar code sound4[]={0xff,0x40,0x30,0x30,0x80,0x30,0x30,0x30,0x80,0x26,0x40,0x2b,0x80,0x30,0x30, 0x2b,0x80,0x26,0x30,0x30,0x80,0x30,0x30,0x26,0x80,0x20,0x30,0x1c,0xc0, 0x1c,0x80,0x1c,0x30,0x20,0x80,0x26,0x30,0x26,0x80,0x30,0x30,0x2b,0x80, 0x30,0x30,0x2b,0x80,0x26,0x30,0x30,0x80,0x39,0x30,0x39,0x80,0x40,0x30, 0x30,0xc0,0x30,0x80,0x1c,0x30,0x20,0x80,0x26,0x30,0x26,0x80,0x30,0x30, 0x2b,0x80,0x30,0x30,0x2b,0x80,0x1c,0x30,0x20,0x80,0x26,0x30,0x26,0x80, 0x20,0x30,0x1c,0xc0,0x1c,0x80,0x18,0x30,0x20,0x80,0x26,0x30,0x26,0x80, 0x30,0x30,0x2b,0x80,0x30,0x30,0x2b,0x80,0x26,0x30,0x30,0x80,0x39,0x30, 0x39,0x80,0x40,0x30,0x30,0xc0,0x30,0xc0,0x00};//友谊地久天长*//*uchar code sound[]={0xff,0x20,0x60,0x26,0x20,0x20,0x40,0x20,0x20,0x1c,0x20,0x18,0x40,0x18,0x20, 0x1c,0x20,0x20,0x80,0x20,0x60,0x1c,0x20,0x20,0x20,0x1c,0x10,0x20,0x10, 0x26,0x20,0x2b,0x20,0x20,0x30,0x1c,0x10,0x20,0x20,0x26,0x20,0x2b,0x80, 0xff,0x20,0x20,0x20,0xff,0x20,0x20,0x20,0x1c,0x40,0x20,0x40,0x18,0x30, 0x1c,0x10,0x20,0x20,0x26,0x20,0x2b,0x80,0xff,0x20,0x20,0x20,0xff,0x20, 0x20,0x20,0x26,0x40,0x2b,0x20,0x30,0x20,0x30,0xc0,0xff,0x40,0x00};//中华民谣*/uchar zdjs=0,jp,p,a;uint dpjs;void del(uchar yj){uchar yj2=2;while(yj!=0){while(yj2!=0) {yj2--;}yj2=2;yj--;}}void delay0() {uchar u=20; while(u--);}void play() {uchar yj;dpjs=0;while(a){zdjs=0;dpjs++;if(p==1){yj=sound1[dpjs];dpjs++;jp=sound1[dpjs];}if(p==2){yj=sound2[dpjs]; dpjs++;jp=sound2[dpjs];}if(p==3){yj=sound3[dpjs];dpjs++;jp=sound3[dpjs];}if(p==4){yj=sound4[dpjs]; dpjs++;jp=sound4[dpjs];}while(zdjs!=jp){if(yj!=0xff){if(yj!=0){voice=!voice; del(yj);}else{dpjs=0;break;}}else{voice=0;del(jp);}}}}void init(){TMOD=0x01;IE=0x82;TH0=0xd8;TL0=0xef;TR0=1;EX0=1;IT0=1;EA=1;}void main(void){init();a=1;p=1;while(1){play();}}void init_0(void) interrupt 0 {uchar q;q=P1;if(q!=0xff){delay0();q=P1;if(q!=0xff){zdjs=0;dpjs=0;jp=0;switch(q){case 0xfe: a=1;p=1;break;case 0xfd: a=1;p=2;break;case 0xfb: a=1;p=3;break;case 0xf7: a=1;p=4;break;case 0xef: a=0;break;}}}}void time0(void) interrupt 1{TH0=0xd8;TL0=0xef;zdjs++;}声明:欢送学习与制作;请注明出处!。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于51单片机的按键切换播放音乐原理图:引脚说明:共5个按键,分别接51单片机的P0~P4引脚,前4个按键控制播放设置好的四首音乐,第5个按键用来关闭音乐。
按键采用中断方式,任意时刻按下任意按键则立即进入所按按键的功能;蜂鸣器接单片机的P3.6口。
仿真说明:使用proteus仿真,晶振:12MHZ。
程序代码如下:/*12Mhz晶振工作*/#include <reg52.h>#define uint unsigned int#define uchar unsigned charsbit voice=P3^6;uchar code sound1[]={0xff,0x40,0x80,0x30,0x40,0x2b,0x40,0x26,0x80,0x24,0x10,0x26,0x40,0x30,0x40,0x2b,0x80,0x30,0x40,0x39,0x40,0x30,0xc0,0x40,0x80,0x30,0x40,0x2b,0x40,0x26,0x40,0x26,0x20,0x24,0x20,0x20,0x40,0x30,0x40,0x24,0x80,0x26,0x10,0x20,0x40,0x19,0x40,0x19,0x80,0x1c,0x10,0x1c,0x80,0x20,0x40,0x20,0x20, 0x1c,0x20,0x19,0x40,0x1c,0x20,0x20,0x20,0x26,0xc0,0x24,0x80,0x24,0x10, 0x20,0x40,0x1c,0x40,0x20,0x40,0x24,0x20,0x26,0x20,0x2b,0x80,0x33,0x40, 0x33,0x20,0x39,0x20,0x40,0x40,0x39,0x40,0x30,0xc0,0x18,0x80,0x1c,0x80, 0x24,0x80,0x20,0x10,0x1c,0x80,0x19,0x40,0x19,0x20,0x19,0x20,0x19,0x40, 0x1c,0x20,0x20,0x20,0x26,0xc0,0x18,0x80,0x1c,0x80,0x24,0x80,0x20,0x10, 0x1c,0x80,0x1c,0x40,0x1c,0x20,0x1c,0x20,0x1c,0x40,0x24,0x20,0x26,0x20, 0xff,0x20,0x00};//同一首歌*/uchar code sound2[]={0xff,0x18,0x40,0x1c,0x20,0x18,0x20,0x13,0x40,0x13,0x20,0x15,0x20,0x13,0x20, 0x15,0x20,0x13,0x20,0x15,0x20,0x18,0x20,0x19,0x20,0x1c,0x20,0x20,0x20, 0x1c,0x40,0x19,0x20,0x18,0x20,0x15,0x40,0x10,0x80,0x13,0x10,0x10,0x40,0x15,0x10,0x13,0x10,0x18,0x10,0x1c,0x10,0x26,0x10, 0x13,0x10,0x18,0x10,0x1c,0x10,0x26,0x10,0x13,0x10,0x18,0x10,0x1c,0x10, 0x26,0x10,0x13,0x10,0x18,0x10,0x1c,0x10,0x26,0x10,0x15,0x10,0x19,0x10, 0x20,0x10,0x2b,0x10,0x15,0x10,0x19,0x10,0x20,0x10,0x2b,0x10,0x15,0x10, 0x19,0x10,0x20,0x10,0x2b,0x10,0x15,0x10,0x19,0x10,0x20,0x10,0x2b,0x10, 0x18,0x10,0x1c,0x10,0x24,0x10,0x30,0x10,0x18,0x10,0x1c,0x10,0x24,0x10, 0x30,0x10,0x19,0x10,0x20,0x10,0x2b,0x10,0x19,0x10,0x19,0x10,0x20,0x10, 0x2b,0x10,0x19,0x10,0x18,0xc0,0xff,0x40,0x40,0x10,0x39,0x20,0x30,0x20, 0x2b,0x20,0x30,0x20,0x2b,0x20,0x26,0x20,0x26,0x20,0x26,0x20,0x26,0x20, 0x26,0x20,0x2b,0x20,0x30,0x20,0x2b,0x20,0x26,0x20,0x26,0x20,0x26,0x20, 0x26,0x20,0x26,0x20,0x2b,0x20,0x30,0x20,0x2b,0x40,0x30,0x10,0x30,0x20, 0x39,0x20,0x30,0x40,0x2b,0x10,0x2b,0x20,0x26,0x20,0x26,0x80,0x40,0x10, 0x39,0x20,0x30,0x20,0x2b,0x20,0x30,0x20,0x2b,0x20,0x30,0x20,0x30,0x20, 0x20,0x20,0x20,0x20,0x26,0x20,0x2b,0x20,0x26,0x20,0x2b,0x20,0x30,0x20, 0x30,0x20,0x26,0x20,0x26,0x20,0x26,0x20,0x2b,0x20,0x30,0x20,0x2b,0x40, 0x2b,0x10,0x2b,0x20,0x2b,0x20,0x2b,0x40,0x30,0x10,0x30,0x20,0x39,0x20,0x26,0x20,0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x20,0x2b,0x20,0x30,0x20, 0x2b,0x20,0x26,0x20,0x26,0x20,0x1c,0x20,0x1c,0x20,0x26,0x20,0x2b,0x20, 0x30,0x20,0x2b,0x40,0x30,0x10,0x30,0x20,0x39,0x20,0x30,0x40,0x2b,0x10, 0x2b,0x20,0x26,0x20,0x20,0x80,0x40,0x10,0x39,0x20,0x30,0x20,0x2b,0x20, 0x30,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x1c,0x20,0x20,0x20, 0x26,0x20,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x26,0x20,0x26,0x20, 0x26,0x20,0x2b,0x20,0x30,0x20,0x2b,0x40,0x2b,0x10,0x2b,0x20,0x2b,0x20, 0x2b,0x40,0x30,0x10,0x30,0x20,0x39,0x20,0x30,0x80,0x30,0x10,0x18,0x20, 0x19,0x20,0x18,0x20,0x1c,0x20,0x18,0x40,0x1c,0x10,0x1c,0x20,0x20,0x20, 0x1c,0x20,0x20,0x20,0x26,0x20,0x2b,0x20,0x26,0x20,0x20,0x20,0x1c,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,0x20,0x20,0x1c,0x40,0x1c,0x10, 0x1c,0x20,0x1c,0x20,0x1c,0x40,0x20,0x10,0x20,0x20,0x1c,0x20,0x20,0x20, 0x26,0x20,0x26,0x40,0xff,0x20,0x30,0x20,0x2b,0x20,0x26,0x20,0x20,0x20, 0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x30,0x20,0x2b,0x20,0x26,0x20, 0x1c,0x20,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x30,0x20,0x30,0x20, 0x30,0x20,0x18,0x40,0x18,0x10,0x18,0x20,0x18,0x20,0x18,0x40,0x1c,0x10, 0x1c,0x20,0x18,0x20,0x1c,0x80,0x20,0x10,0x20,0x20,0x30,0x20,0x18,0x20, 0x19,0x20,0x18,0x20,0x19,0x20,0x1c,0x20,0x20,0x20,0x1c,0x20,0x20,0x20, 0x26,0x20,0x2b,0x20,0x26,0x20,0x20,0x20,0x1c,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x1c,0x20,0x20,0x20,0x1c,0x40,0x1c,0x10,0x1c,0x20,0x1c,0x20, 0x1c,0x40,0x20,0x10,0x20,0x20,0x1c,0x20,0x20,0x20,0x26,0x20,0x26,0x40, 0xff,0x20,0x30,0x20,0x2b,0x20,0x26,0x20,0x20,0x20,0x26,0x20,0x2b,0x20, 0x30,0x20,0x30,0x20,0x30,0x20,0x2b,0x20,0x26,0x20,0x1c,0x20,0x26,0x20, 0x2b,0x20,0x30,0x20,0x18,0x80,0xff,0x40,0xff,0x40,0xff,0x20,0x18,0x20, 0x1c,0x20,0x18,0x20,0x1c,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1c,0x20, 0x20,0x20,0x26,0x20,0x2b,0x20,0x26,0x20,0x2b,0x20,0x2b,0x20,0x30,0x20, 0x39,0x20,0x30,0x20,0x30,0x20,0x2b,0x20,0x30,0xc0,0x30,0x80,0x30,0x20, 0x18,0x20,0x1c,0x20,0x18,0x20,0x15,0x20,0x18,0x20,0x18,0x20,0x18,0x20,0x18,0x20,0x13,0x20,0x15,0x20,0x15,0x20,0x18,0x20,0x1c,0x20,0x18,0x20, 0x15,0x40,0x30,0xc0,0xff,0x40,0x00}; //爱情转移*/uchar code sound3[]={0xff,0x40,0x10,0x39,0x10,0x30,0x10,0x2b,0x10,0x26,0x20,0x20,0x10,0x20,0x10, 0x20,0x30,0x18,0x10,0x19,0x20,0x1c,0x20,0x20,0x20,0x20,0x40,0x1c,0x20, 0x30,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,0x24,0x10,0x26,0x10, 0x26,0x10,0x2b,0x20,0x30,0x10,0x39,0x20,0x30,0x10,0x30,0x10,0x30,0x20, 0x20,0x20,0x24,0x10,0x26,0x10,0x2b,0x10,0x30,0x10,0x33,0x10,0x40,0x10, 0x39,0x20,0x39,0xc0,0xff,0x20,0x26,0x10,0x20,0x10,0x1c,0x10,0x20,0x10, 0x1c,0x10,0x20,0x10,0x1c,0x10,0x18,0x30,0x19,0x10,0x1c,0x10,0x1c,0x10, 0x20,0x10,0x1c,0x20,0x20,0x20,0x1c,0x20,0x1c,0x10,0x18,0x10,0x19,0x20, 0x1c,0x10,0x20,0x10,0x1c,0x60,0x26,0x20,0x20,0x20,0x1c,0x10,0x20,0x10, 0x1c,0x10,0x20,0x10,0x1c,0x10,0x18,0x30,0x15,0x10,0x18,0x10,0x15,0x10, 0x18,0x10,0x18,0x10,0x15,0x30,0x13,0x20,0x13,0x10,0x15,0x10,0x18,0x10, 0x15,0x20,0x13,0x10,0x13,0x60,0x15,0x20,0x13,0x20,0x15,0x10,0x18,0x10, 0x15,0x10,0x18,0x10,0x15,0x20,0x18,0x10,0x15,0x10,0x15,0x60,0x15,0x20, 0x13,0x20,0x15,0x10,0x18,0x10,0x18,0x10,0x18,0x10,0x18,0x20,0x19,0x10, 0x1c,0x10,0x1c,0x60,0xff,0x20,0x13,0x20,0x15,0x10,0x18,0x10,0x15,0x10, 0x18,0x10,0x15,0x20,0x18,0x10,0x15,0x10,0x15,0x20,0x18,0x20,0x18,0x10, 0x10,0x30,0x10,0xc0,0x18,0x20,0x15,0x20,0x13,0x10,0x15,0x10,0x13,0x10, 0x15,0x10,0x13,0x10,0x15,0x10,0x13,0x10,0x15,0x10,0x15,0x10,0x10,0x30, 0x10,0x20,0x13,0x10,0x10,0x10,0x0e,0x10,0x0e,0x10,0x0e,0x10,0x0e,0x10, 0x10,0x20,0x13,0x10,0x15,0x10,0x13,0x60,0x15,0x20,0x13,0x20,0x15,0x20, 0x18,0x10,0x1c,0x10,0x1c,0x40,0x18,0x20,0x19,0x10,0x1c,0x10,0x1c,0x40, 0xff,0x20,0x0e,0x20,0x10,0x20,0x13,0x20,0x15,0x40,0x18,0x20,0x15,0x20, 0xff,0x20,0x26,0x20,0x20,0x20,0x26,0x20,0x15,0x20,0x13,0x40,0x15,0x20, 0x18,0x20,0x1c,0xc0,0x30,0x40,0x2b,0x30,0x26,0x10,0x39,0x40,0xff,0x20, 0x30,0x10,0x39,0x10,0x33,0x10,0x30,0x10,0x2b,0x20,0x2b,0x20,0x30,0x10,0x2b,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x1c,0x10,0x20,0x10,0x2b,0x10, 0x26,0x10,0x26,0x80,0x18,0x10,0x19,0x10,0x1c,0x10,0x1c,0x10,0x19,0x20, 0x26,0x20,0xff,0x20,0x26,0x20,0x20,0x20,0x26,0x20,0x15,0x20,0x13,0x40, 0x15,0x20,0x18,0x20,0x1c,0xc0,0xff,0x20,0x26,0x20,0x20,0x20,0x26,0x20, 0x15,0x20,0x13,0x40,0x15,0x20,0x18,0x20,0x1c,0x40,0x1c,0xc0,0x00};//最后一次的温柔*/uchar code sound4[]={0xff,0x40,0x30,0x30,0x80,0x30,0x30,0x30,0x80,0x26,0x40,0x2b,0x80,0x30,0x30, 0x2b,0x80,0x26,0x30,0x30,0x80,0x30,0x30,0x26,0x80,0x20,0x30,0x1c,0xc0, 0x1c,0x80,0x1c,0x30,0x20,0x80,0x26,0x30,0x26,0x80,0x30,0x30,0x2b,0x80, 0x30,0x30,0x2b,0x80,0x26,0x30,0x30,0x80,0x39,0x30,0x39,0x80,0x40,0x30, 0x30,0xc0,0x30,0x80,0x1c,0x30,0x20,0x80,0x26,0x30,0x26,0x80,0x30,0x30, 0x2b,0x80,0x30,0x30,0x2b,0x80,0x1c,0x30,0x20,0x80,0x26,0x30,0x26,0x80, 0x20,0x30,0x1c,0xc0,0x1c,0x80,0x18,0x30,0x20,0x80,0x26,0x30,0x26,0x80, 0x30,0x30,0x2b,0x80,0x30,0x30,0x2b,0x80,0x26,0x30,0x30,0x80,0x39,0x30, 0x39,0x80,0x40,0x30,0x30,0xc0,0x30,0xc0,0x00};//友谊地久天长*//*uchar code sound[]={0xff,0x20,0x60,0x26,0x20,0x20,0x40,0x20,0x20,0x1c,0x20,0x18,0x40,0x18,0x20, 0x1c,0x20,0x20,0x80,0x20,0x60,0x1c,0x20,0x20,0x20,0x1c,0x10,0x20,0x10, 0x26,0x20,0x2b,0x20,0x20,0x30,0x1c,0x10,0x20,0x20,0x26,0x20,0x2b,0x80, 0xff,0x20,0x20,0x20,0xff,0x20,0x20,0x20,0x1c,0x40,0x20,0x40,0x18,0x30, 0x1c,0x10,0x20,0x20,0x26,0x20,0x2b,0x80,0xff,0x20,0x20,0x20,0xff,0x20, 0x20,0x20,0x26,0x40,0x2b,0x20,0x30,0x20,0x30,0xc0,0xff,0x40,0x00};//中华民谣*/uchar zdjs=0,jp,p,a;uint dpjs;void del(uchar yj){uchar yj2=2;while(yj!=0){while(yj2!=0){yj2--;}yj2=2;yj--;}}void delay0(){uchar u=20;while(u--);}void play(){uchar yj;dpjs=0;while(a){zdjs=0;dpjs++;if(p==1){yj=sound1[dpjs]; dpjs++;jp=sound1[dpjs];}if(p==2){yj=sound2[dpjs]; dpjs++;jp=sound2[dpjs];}if(p==3){yj=sound3[dpjs];dpjs++;jp=sound3[dpjs];}if(p==4){yj=sound4[dpjs]; dpjs++;jp=sound4[dpjs];}while(zdjs!=jp){if(yj!=0xff){if(yj!=0){voice=!voice;del(yj);}elsedpjs=0; break; }}else{voice=0; del(jp); }}}}void init(){TMOD=0x01;IE=0x82;TH0=0xd8;TL0=0xef;TR0=1;EX0=1;IT0=1;EA=1;}void main(void) {init();a=1;p=1;{play();}}void init_0(void) interrupt 0{uchar q;q=P1;if(q!=0xff){delay0();q=P1;if(q!=0xff){zdjs=0;dpjs=0;jp=0;switch(q){case 0xfe: a=1;p=1;break;case 0xfd: a=1;p=2;break;case 0xfb: a=1;p=3;break;case 0xf7: a=1;p=4;break;case 0xef: a=0;break;}}}}void time0(void) interrupt 1{TH0=0xd8;TL0=0xef;zdjs++;}声明:欢迎学习与制作;请注明出处!。