单片机播放音乐程序

合集下载

基于89c52单片机音乐播放器设计程序

基于89c52单片机音乐播放器设计程序
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,
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; //开定时器1
while(n!=0) Beep=~Beep,delay(m); //等待节拍完成, 通过P1口输出音频(可多声道哦!)
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,
0x20, 0x20, 0x1C , 0x10,
0x18, 0x10, 0x20 , 0x20,
0x26, 0x20, 0x2B , 0x20,
0x30, 0x20, 0x2B , 0x40,
0x20, 0x30, 0x1C , 0x10,
0x18, 0x20, 0x15 , 0x20,

单片机_音乐播放的c代码

单片机_音乐播放的c代码

单片机音乐播放的c代码#include "reg52.h"unsigned char Count;sbit _Speak =P2^3 ; //讯响器控制脚unsigned char code SONG[] ={ //祝你平安0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20, 0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20, 0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20, 0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20, 0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10, 0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20, 0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20, 0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20, 0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10, 0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80, 0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20, 0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20, 0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10, 0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00,//路边的野华不要采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 Time0_Init(){TMOD = 0x01;IE = 0x82;TH0 = 0xD8;TL0 = 0xEF; //12MZ晶振,10ms}void Time0_Int() interrupt 1{TH0 = 0xD8;TL0 = 0xEF;Count++; //长度加1}/*-------------------------------------------------功能:1MS延时子程序-------------------------------------------------*/void Delay_xMs(unsigned int x){unsigned int i,j;for( i =0;i < x;i++ ){for( j =0;j<3;j++ );}}/*-------------------------------------------------功能:歌曲播放子程序i为播放哪一段曲目-------------------------------------------------*/void Play_Song(unsigned char i){unsigned char Temp1,Temp2;unsigned int Addr;Count = 0; //中断计数器清0Addr = i * 217;while(1){Temp1 = SONG[Addr++];if ( Temp1 == 0xFF ) //休止符{TR0 = 0;Delay_xMs(100);}else if ( Temp1 == 0x00 ) //歌曲结束符{return;}else{Temp2 = SONG[Addr++];TR0 = 1;while(1){_Speak = ~_Speak;Delay_xMs(Temp1);if ( Temp2 == Count ){Count = 0;break;}}}}}/*-------------------------------------------------功能:主程序-------------------------------------------------*/void main(){Time0_Init(); //定时器0中断初始化while(1){Play_Song(0); //播放}}6回答者:小崔凡凡- 二级2009-10-16 21:47我来评论>>提问者对于答案的评价:谢谢!相关内容• 单片机播放音乐里的音乐代码是怎么得到的?有什么软件能将歌曲直接转换成16进制代码 4 2008-11-14• 给个单片机C语言编的音乐程序,能够播放音乐 6 2009-7-22• 求用c语言编写的播放背景音乐的代码 5 2009-6-12• 单片机音乐代码问题 2009-9-28• 单片机音乐代码 5 2009-5-18更多相关问题>>查看同主题问题:单片机音乐音乐播放播放代码等待您来回答∙nokia 3100c音乐播放器如何跟新∙为什么用酷我音乐盒听歌后那歌会在C:\ProgramData\mcache里面呢∙深圳龙华天龙大道珍藏版狂嗨现场dj明仔vs女mc小黎茂名细飞11分钟半时候的那音乐谁知道叫什么名字!∙夏普9020c合上盖子怎么听音乐?∙C:Documents and SettingsAdministrator「开始」菜单酷我音乐盒2010.lnk∙nokia 2600c手机可以用什么音乐播放器?∙『windows』在网页制作中,下列不是背景音乐格式的是那一个?A.tem B mp3 C wav D∙3110c播放音乐时会卡,之后会自动到下一首,怎么办?其他回答共3 条我的博客上有三首连放的,你只要加两首就行了。

用单片机播放音乐的程序实现

用单片机播放音乐的程序实现

用单片机播放音乐的程序实现殷松瑜 江苏商贸职业学院 226011音、高音和超高音,四个八度共28个音符。

MUSIC_TAB 自定义乐曲数据表,演奏乐曲时根据不同音符的数值,从B_ZQ_TAB 中找到定时时间初始值,送入定时器即可控制发音的音调。

例如0xF8和0x89送到定时器,定时器产生中断输出的方波,人们就听到低音DO 的声音。

单片机发出不同频率的方波,人听起来就是不同音调的音乐。

把这个音调数据表放在程序中,需要播音的时候,就从表中取出一个数据送到定时器,当定时器溢出中断的时候,再对输出引脚取反,那么,在扬声器中,即可听到下表中频率的声音。

这个表中每三个数字,说明了一个音符,它们分别代表;第一个数字是音符的数值1234567之一,代表哆来咪发嗦拉西;第二个数字是0123之一,代表低音、1/4节拍与节拍码对照1/8节拍与节拍码对照3 编码以李叔同大师的《送别》的前二小节来说明转换的方法。

这部分的歌词是:“长亭外,古道边,芳草碧连天”;这部分的乐谱是:| 5 35 1 - | 6 1 5 - |512321|2---|。

根据乐谱可以写出《送别》前二小节的数据表。

本程序用这个数据表播放《送别》的前四小节。

(如图2)4 51单片机演奏乐曲的程序SPK BIT P1.7 ;指定扬声器接口ORG 0000H LJMP START ORG 000BH LJMP T0_INT ORG 001BH LJMP T1_INT;------------------------------------------------------------B_ZQ_TAB: ;定时半周期初始值数据表DW 63625, 63833, 64019, 64104, 64260, 64400, 64524 ;低音区:1 2 3 4 5 67DW 64580, 64685,64778, 64820, 64898, 64968, 65030 ;中音区:1 2 3 4 5 6 7DW 65058, 65110, 65157, 65178, 65218, 65252, 65283 ;高音区:1 2 3 4 5 6 7D W 65297 自定义 分别是音名、拍为单位)嗦,中音, 4个1/8拍咪,中音, 2个1/8拍嗦,中音, 2个1/8拍哆,高音, 8个1/8拍啦,中音, 4个1/8拍哆,高音, 4个1/8拍 嗦,中音, 8个1/8拍嗦,中音, 4个1/8拍哆,中音, 2个1/8拍来,中音, 2个1/8拍咪,中音, 4个1/8拍来,中音, 2个1/8拍哆,中音, 2个1/8拍来,中音, 16个1/8结束标记#11H ;T1, T0皆以200ms,为1/8拍MOV DPTR, #MUSIC_TAB;-------------------下面是从自定义乐曲数据表中读取三个字节M_LOOP:CLR A MOVC A, @A+DPTR MOV R2, A INC DPTR CLR A MOVC A, @A+DPTR MOV B, A INC DPTR CLR A MOVC A, @A+DPTR JZ START;-------------------下面是根据前两个字节,在半周期初值表中找网络出版时间:2014-01-10 22:38网络出版地址:/kcms/detail/11.3571.TN.20140110.2238.1074.htmlMOV R3, A INC DPTR MOV 44H, DPL MOV 45H, DPH MOV A, #7MUL AB ADD A, R2JZ JI_SHI DEC A ADD A, ACC MOV R2, A MOV DPTR, #B_ZQ_TAB MOVC A, @A+DPTR MOV TH0, A MOV 41H, A MOV A, R2INC A MOVC A,@A+DPTR MOV TL0, A MOV 40H, A SETB TR0JI_SHI:MOV 42H, #100MOV 43H, #0MOV A, R3;用第三个字节控制时长CJNE A, 43H, $CLR TR0SETB SPK MOV DPL, 44H MOV DPH, 45H SJMP M_LOOP;------------------------------------------------------------T0_INT:MOV TL0, 40H MOV TH0, 41H CPL SPK RETI;------------------------------------------------------------T1_INT:MOV TL1, #24 ;(65536-1000) MOD 256MOV TH1, #252 ;(65536-1000) / 256定时1ms@12MHzDJNZ 42H, T1_END MOV 42H, #200 ;此数值越大,节奏越慢INC 43H ;43H 单元每隔200ms,自动加一次一T1_END:RETI;============================================================END 图1图2。

单片机蜂鸣器音乐

单片机蜂鸣器音乐

单片机蜂鸣器音乐单片机在我们的生活中无处不在,它被广泛地应用在各种电子产品中,为我们的生活带来了便利。

今天,我要向大家介绍的是一种基于单片机的蜂鸣器音乐播放器。

一、硬件部分1、单片机:我们选用的是AT89C51单片机,它具有低功耗、高性能的特点,非常适合用于音乐播放器。

2、蜂鸣器:蜂鸣器是用来发出声音的,我们将其连接在单片机的输出口上。

3、存储芯片:为了能够播放存储在芯片中的音乐,我们需要将音乐以某种格式存储在芯片中。

常用的存储芯片有EEPROM和Flash芯片。

4、按键:为了能够选择播放不同的音乐,我们需要添加一个按键。

二、软件部分1、音乐编码:我们需要将音乐转换成二进制编码,这样才能被单片机读取并播放。

常用的音乐编码格式有MIDI、WAV等。

2、音乐播放:当按下按键时,单片机读取存储芯片中的音乐数据,并通过蜂鸣器播放。

3、音乐选择:通过按键可以选择不同的音乐进行播放。

4、音量控制:我们可以通过编程来控制蜂鸣器的音量大小。

三、调试与测试1、硬件调试:检查连接是否正确,确保没有短路或断路的情况。

2、软件调试:将程序下载到单片机中进行调试,确保能够正常播放音乐。

3、综合测试:将所有硬件和软件都连接起来进行测试,确保能够正常工作。

四、总结与展望通过本次实验,我们成功地制作了一个基于单片机的蜂鸣器音乐播放器。

它具有简单、实用的特点,可以用来播放存储在芯片中的音乐。

未来,我们可以进一步扩展其功能,例如添加更多的按键来选择不同的音乐、添加显示屏来显示歌曲名称等。

我们也可以将其应用到其他领域,例如智能家居、智能安防等。

单片机蜂鸣器唱歌程序在许多应用中,单片机蜂鸣器经常被用来发出声音或音乐。

下面是一个使用单片机蜂鸣器唱歌的程序示例。

我们需要确定单片机和蜂鸣器的连接方式。

通常,单片机具有一个内置的蜂鸣器输出引脚,可以将蜂鸣器连接到这个引脚上。

在以下的示例中,我们将假设单片机具有一个内置蜂鸣器输出引脚,并将其连接到P1.0端口上。

单片机的音乐播放器设计(C程序及注释)[详解音调、节拍的确定]

单片机的音乐播放器设计(C程序及注释)[详解音调、节拍的确定]

基于单片机的音乐盒设计【摘要】本设计是一个基于AT89C51系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能多功能音乐盒。

该音乐盒主要由按键电路、复位电路、时钟电路以及蜂鸣器组成。

使用两个按键控制音乐盒,一个用来切换歌曲,另一个用来切换8路LED的变化花样,本音乐盒共有两首歌曲,花样灯花样共计3种。

播放歌曲时,蜂鸣器发出某个音调,与之对应的LED亮起。

本设计利用KEIL 编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试,节约了设计时间。

目录1.设计方案 (2)2 系统总体方案介绍 (2)2.1系统组成框图 (2)2.2音乐盒的功能结构图 (2)3硬件设计 (3)3.1总体设计框图 (3)3.2各部分硬件设计及其原理............................. 错误!未定义书签。

3.2.2 LED显示电路设计与原理 (3)3.2.3 时钟振荡电路................................... 错误!未定义书签。

3.3硬件电路图及功能 (3)4软件设计 (4)4.1音调、节拍以及编码的确定方法 (4)4.1.1 音调的确定 (5)4.1.2 节拍的确定 (6)4.1.3 编码 (7)4.2软件程序设计 (7)4.2.1 程序流程图及相应代码块 (7)5调试................................................... 错误!未定义书签。

5.1检查硬件连接....................................... 错误!未定义书签。

5.2检查软件系统....................................... 错误!未定义书签。

5.3测试结果 (12)5.3.1.总体运行图 (12)5.3.2.花样灯3种花样图 (13)附录程序源代码及注释 (13)1.设计方案设计一个基于AT89C51系列单片机的音乐盒,利用按键切换演奏出不同的乐曲。

单片机音乐播放课程设计

单片机音乐播放课程设计

单片机音乐播放课程设计一、课程目标知识目标:1. 学生能理解单片机的原理和基本结构,掌握音乐播放器的设计流程。

2. 学生能掌握音乐播放器编程的基本语法和逻辑,如音符的时长、音调控制等。

3. 学生能了解并运用数字信号处理基本概念,如采样、量化等,解释音乐播放过程。

技能目标:1. 学生能运用单片机开发环境进行音乐播放器的程序编写、调试与下载。

2. 学生能通过实验和项目实践,掌握音乐播放器硬件与软件的协同设计方法。

3. 学生能够独立或合作完成音乐播放器的制作,展示作品并进行简单的故障排查。

情感态度价值观目标:1. 学生培养对电子技术和编程的兴趣,激发创新意识和探索精神。

2. 学生通过实践,培养问题解决能力和团队协作能力,增强自信心。

3. 学生通过创作音乐播放器,体会技术对生活的影响,培养社会责任感。

课程性质分析:本课程为实践性强的单片机应用课程,结合了电子技术、编程和音乐知识,旨在培养学生的动手能力、创新思维和综合应用能力。

学生特点分析:假设学生为高中生,具有一定的物理电子知识基础,对编程有一定了解,对音乐有基本的感知能力。

教学要求:课程需注重理论与实践相结合,鼓励学生主动探索和动手实践,强调过程评价和成果评价相结合,确保学生达到预定的学习目标。

二、教学内容1. 单片机基础知识:介绍单片机的组成、工作原理,重点讲解AT89C51单片机的内部结构、引脚功能及其编程特性。

相关教材章节:第一章单片机概述。

2. 音乐播放器原理:讲解音乐播放器的基本原理,包括音符的生成、音调控制、节拍控制等。

相关教材章节:第三章数字信号处理基础。

3. 编程语言与开发环境:学习单片机编程语言(如C语言),熟悉Keil、Proteus等开发工具的使用。

相关教材章节:第二章单片机编程语言与开发环境。

4. 硬件电路设计:学习音乐播放器硬件电路的设计,包括单片机、音频放大器、扬声器等元件的选型和连接。

相关教材章节:第四章单片机外围电路设计。

单片机音乐播放器程序设计

单片机音乐播放器程序设计

实训三音乐播放器随着科技的发展,音乐播放功能随处都会用到,如,在开发儿童智力的玩具中,等等。

目前单片机以其体积小、价格低、编程灵活等特点在这一领域独领风骚。

一、系统功能要求:1、具有自动循环播放所有乐曲功能。

2、具有单独选择某首乐曲循环播放功能。

3、具有顺序查找乐曲循环播放功能。

4、具有停止播放功能。

二、系统整体方案提示:利用AT89S52产生乐曲音符,再把乐普翻译成计算机音乐语言,由单片机进行信息处理,在经过信号放大,由喇叭放出乐曲声。

由于音符和节拍是由计算机产生的,所以发音音符和节拍准确。

1、循环播放:按下K1键即可实现。

2、顺序查找乐曲循环播放:按下K2键即可实现。

3、停止播放:按下K3键即可实现。

4、单独选择某首乐曲循环播放:按下K4~K7键即可实现。

系统整体方案框图如下:利用AT89C51产生乐曲音符,再把乐普翻译成绩算计音乐语言,由单片机进行信息处理,在经过信号放大,由喇叭放出乐曲声。

由于音符和节拍是由计算机产生的,所以发音音符和节拍准确。

整体框图如图图一所示。

三、硬件系统原理图:硬件系统原理图如下页图:1)单片机:选择AT89S52,由于AT89S52是一个低电压,高性能CMOS8位单片机,内含4k bytes的可反复擦鞋的制度程序存储器(PEROM)和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS—51指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机AT89S52提供了高性价比的解决方案。

其内部有足够本系统对存储器的要求,不用外扩。

2)按键控制电路:如图由P1口作为输入,构成矩阵式按键接口方式。

3)输出控制:此部分的放大电路简单容易实现。

主要采用了一个小功率PNP型硅管9012,利用“分压偏置式工作点稳定直流通路”,达到了对静态工作点的稳定。

分压电阻分别选择1K和5.5K。

嗡宁器一端接+5V电压,一端接晶体管的发射极。

单片机播放音乐的编程方法网络整理版

单片机播放音乐的编程方法网络整理版

我将阐述播放音乐的软件编程方法。

原理:1’要让单片机控制扬声器发出音调只要计算出某一音频的频率,进而计算出周期,然后将这一周期除以二,即为半周期的时间。

利用定时器计数这半个周期。

每当计数到这个时间就将输出I/O口取反,重复这个步骤就可以得到这个音调的脉冲。

2’利用80C51扥内部定时器使用其工作在计数器模式MODE1下,改变计数值TH0,及TL0易产生不同频率的方法。

例如长生频率为532HZ的脉冲,其周期为T=1/523=1912us。

因此只要计数器计数956/1us=956。

在每次计数956次后将I/O口取反,就可得到中音DO(523HZ)。

计数脉冲值与频率的关系公式如下:N=Fi÷2÷Fr N:计算值Fi:内部计数时一次计数为1us,故其频率为1MHZ.3’其计数值的求法如下;T=65536-N=65536-Fi÷2÷Fr 其计数值的求法如下例如:设K=65536,F=1000000=Fi=1MHZ,求低音DO(261HZ),中音DO(523HZ),高音DO(1046HZ)的计算值。

T=65536-N=65536-Fi÷2÷Fr=65536-1000000÷2÷Fr=65536-500000/Fr。

低音DO的 T=65536-500000/262=63627中音DO的 T=65536-500000/523=64580高音DO的 T=65536-500000/1047=650594’ C调各音符频率与计数值T的对照表如下所示.在音乐中所谓音调其实就是我们所说的音高,在音乐中我们常把C 调上方的A作为标准音调,其频率等于440HZ。

当两个声音信号的频率相差一倍是也即f1=2f2,则称相差一个倍频程,在音乐中低音1和中音1,低和中2正好相差一个倍频程在音乐上称他们相差一个八度音,一个八音度有12个伴音,即为1-#1,#1-2,2-#2,#2-3,3-4,4-#4,#4-5,5-#5,#5-6,6-#6,#6-7,7-i.如果我们知道了这十二个基本音调的频率,我们就可以根据倍频程的关系得到其他调。

用单片机制作简单音乐播放器代码

用单片机制作简单音乐播放器代码

if(k==6) return 0xdf; if(k==7) return 0xbf; if(k>=8) return 0x7f; }
uint temp;
uchar jp;//jp 是简谱 //用于产生各种音调 j=0; while(!RI) {
temp=happynewyear[j]; jp=temp/16; //取数的高 4 位 P1=light(jp); if(jp!=0) {
timeh=cuzhi[jp*2]; timel=cuzhi[jp*2+1]; } else {
void main () {
TMOD=0x21; TH1=0xfd; TL1=0xfd; TR1=1; REN=1; SM0=0; SM1=1; while(1) {
if(RI==1) {
RI=0; a=SBUF; if (a==1) {
main1(); EA=0; TR0=0;
} if(a==2) {
ET0=1; song2();
} void song2() {
uint temp;
uchar jp;//jp 是简谱 //用于产生各种音调 j=0; while(!RI) {
temp=wnyhln[k]; jp=temp/16; //取数的高 4 位 P1=light(jp); //LED 灯伴随音调的变化而闪烁 if(jp!=0) {
} void song3() {
uint temp;
uchar jp;//jp 是简谱 //用于产生各种音调 j=0; while(!RI) {
temp=ysysljj[h]; jp=temp/16; //取数的高 4 位 P1=light(jp); if(jp!=0) {

单片机音乐播放器应用 实现简单的音乐播放功能

单片机音乐播放器应用 实现简单的音乐播放功能

单片机音乐播放器应用实现简单的音乐播放功能单片机音乐播放器应用音乐是人们生活中不可或缺的一部分,而在现代科技的不断发展下,单片机音乐播放器应用已经成为许多人追求的目标。

本文将介绍如何实现一个简单的单片机音乐播放器功能,让您能够轻松享受音乐的魅力。

一、硬件准备在开始之前,我们需要准备一些硬件设备,以确保音乐播放器能够正常工作。

首先,我们需要一块单片机开发板,例如STC89C52,这是一款常用的单片机开发板;其次,我们需要一个音频解码模块,例如DFPlayer Mini,他可以轻松解码并播放存储卡上的音乐文件;最后,我们还需要一个音箱或者耳机,用于输出音乐。

二、软件编程1. 搭建开发环境首先,我们需要安装MIDE-51集成开发环境,它是STC89C52单片机所使用的开发工具。

安装完成后,可以通过打开MIDE-51来创建一个新的工程。

2. 编写代码首先,我们需要在代码中包含一些必要的库文件,以便使用一些功能函数。

例如,我们可以通过以下代码片段引入DFPlayer Mini音频库文件:```c#include <DFPlayer_Mini_Mp3.h>```接下来,我们可以通过定义一些常量或变量来控制音乐的播放,例如:```cconst int playButton = 2; // 播放按钮连接到单片机的2号引脚const int nextButton = 3; // 下一首按钮连接到单片机的3号引脚const int previousButton = 4; // 上一首按钮连接到单片机的4号引脚```然后,我们可以在主循环中不断检测按钮的状态,并根据按钮的状态来控制音乐的播放:```cvoid loop() {if (digitalRead(playButton) == HIGH) { // 如果播放按钮被按下DFPlayer_Mini_Mp3.play(); // 播放音乐}if (digitalRead(nextButton) == HIGH) { // 如果下一首按钮被按下 DFPlayer_Mini_Mp3.next(); // 播放下一首音乐}if (digitalRead(previousButton) == HIGH) { // 如果上一首按钮被按下DFPlayer_Mini_Mp3.previous(); // 播放上一首音乐}}```通过上述代码,我们可以实现简单的音乐播放功能。

单片机音乐播放___c语言程序

单片机音乐播放___c语言程序

主程序:程序中附有详尽说明#include <REG52.H>#include "SoundPlay.h"void Delay1ms(unsigned int 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,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,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,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,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 };//****************************************************************************** *****main(){InitialSound();while(1){Play(Music_Girl,0,3,360);Delay1ms(500);Play(Music_Same,0,3,360);Delay1ms(500);Play(Music_Two,0,3,360);Delay1ms(500);}}以下为h文件:/**************************************************************************SOUND PLAY FOR 51MCUCOPYRIGHT (c) 2005 BY JJJ.-- ALL RIGHTS RESERVED --File Name: SoundPlay.hAuthor: Jiang Jian JunCreated: 2005/5/16Modified: NORevision: 1.0******************************************************************************* //*说明表示结束(Important)音高由三位数字组成:个位是表示1~7 这七个音符十位是表示音符所在的音区:1-低音,2-中音,3-高音;百位表示这个音符是否要升半音: 0-不升,1-升半音。

单片机播放音乐汇编程序

单片机播放音乐汇编程序

单片机播放音乐汇编程序;标题’八月桂花香’发声程序ORG 0000HLJMP STARTORG 000BHINC 20H ;中断服务,中断计数器加1MOV TH0,#0D8HMOV TL0,#0EFH ;12M晶振,形成10毫秒中断RETISTART:MOV SP,#50HMOV TH0,#0D8HMOV TL0,#0EFHMOV TMOD,#01HMOV IE,#82HMUSIC0:NOPMOV DPTR,#DAT ;表头地址送DPTRMOV 20H,#00H ;中断计数器清0MUSIC1:NOPCLR A ;A清零MOVC A,@A+DPTR ;查表取代码JZ END0 ;是00H,则结束CJNE A,#0FFH,MUSIC5 ;如果是休止符,往下执行LJMP MUSIC3MUSIC5:NOPMOV R6,A ;R6=18H音符的频率INC DPTR DPTR加一MOV A,#0MOVC A,@A+DPTR ;取节拍代码送R7MOV R7,A ;R7=30H音符发音的时间SETB TR0 ;启动计数MUSIC2:NOPCPL P2.5 ;P2.5是音乐输出引脚MOV A,R6MOV R3,A ;R3=R6=18HLCALL DELMOV A,R7CJNE A,20H,MUSIC2 ;中断计数器(20H)=R7否?;不等,则继续循环MOV 20H,#00H ;等于,则取下一代码INC DPTRLJMP MUSIC1MUSIC3:NOP ;休止100毫秒CLR TR0MOV R2,#0DH ;R2=13MUSIC4:NOPMOV R3,#0FFH ;R3=255LCALL DELDJNZ R2,MUSIC4INC DPTRLJMP MUSIC1END0:NOPMOV R2,#0FFH ;歌曲结束,延时1秒后继续MUSIC6:MOV R3,#00HLCALL DELDJNZ R2,MUSIC6LJMP MUSIC0DEL:NOPDEL3:MOV R4,#02HDEL4:NOPDJNZ R4,DEL4NOPDJNZ R3,DEL3RETNOPDAT:DB 18H, 30H, 1CH, 10H DB 20H, 40H, 1CH, 10H DB 18H, 10H, 20H, 10H DB 1CH, 10H, 18H, 40H DB 1CH, 20H, 20H, 20H DB 1CH, 20H, 18H, 20H DB 20H, 80H, 0FFH, 20H DB 30H, 1CH, 10H , 18H DB 20H, 15H, 20H , 1CH DB 20H, 20H, 20H , 26H DB 40H, 20H , 20H , 2BH DB 20H, 26H, 20H , 20H DB 20H, 30H , 80H , 0FFH DB 20H, 20H, 1CH , 10H DB 18H, 10H, 20H , 20H DB 26H, 20H , 2BH , 20H DB 30H, 20H , 2BH , 40H DB 20H, 20H , 1CH , 10HDB 26H, 20H , 2BH, 20H DB 30H, 20H, 2BH , 40H DB 20H, 30H, 1CH , 10H DB 18H, 20H , 15H , 20H DB 1CH, 20H , 20H , 20H DB 26H, 40H, 20H , 20H DB 2BH, 20H, 26H , 20H DB 20H, 20H, 30H , 80H DB 20H, 30H, 1CH , 10H DB 20H, 10H, 1CH , 10H DB 20H, 20H, 26H , 20H DB 2BH, 20H, 30H , 20H DB 2BH, 40H, 20H , 15H DB 1FH, 05H, 20H , 10H DB 1CH, 10H, 20H , 20H DB 26H, 20H, 2BH , 20H DB 30H, 20H, 2BH , 40H DB 20H, 30H, 1CH , 10H DB 18H, 20H , 15H , 20H DB 1CH, 20H , 20H , 20H DB 26H, 40H, 20H , 20H DB 2BH, 20H, 26H , 20H DB 20H, 20H, 30H, 30HDB 18H, 40H, 1CH, 20HDB 20H, 20H, 26H, 40HDB 13H, 60H, 18H , 20HDB 15H, 40H, 13H , 40HDB 18H, 80H, 00H提问人的追问 2010-01-08 08:58原理是什么啊在线等啊我回答人的补充 2010-01-08 15:08一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音。

用单片机制作简单音乐播放器代码

用单片机制作简单音乐播放器代码
0xdf; if(k==7) return 0xbf; if(k>=8) return 0x7f; }
} void song3() {
uint temp;
uchar jp;//jp 是简谱 //用于产生各种音调 j=0; while(!RI) {
temp=ysysljj[h]; jp=temp/16; //取数的高 4 位 P1=light(jp); if(jp!=0) {
timeh=cuzhi[jp*2]; timel=cuzhi[jp*2+1]; } else { TR0=0; fm=1;//关蜂鸣器 } delay2(temp%16); //取数的低 4 位 TR0=0; //唱完一个音停 30MS fm=1; P1=0xff; delay(30); TR0=1; h++; if(h==44) h=0; }
write_data(table5[num]); delay(20); } EA=1;//开总中断 EX0=1;//开外部中断 IT0=1;//外部中断 0 下降沿触发方式 EX1=1;//开外部中断 1 IT1=1;//外部中断 1 下降沿触发方式 TH0=0; TL0=0; ET0=1; song3();
ET0=1; song2();
} void song2() {
uint temp;
uchar jp;//jp 是简谱 //用于产生各种音调 j=0; while(!RI) {
temp=wnyhln[k]; jp=temp/16; //取数的高 4 位 P1=light(jp); //LED 灯伴随音调的变化而闪烁 if(jp!=0) {
};
uchar code cuzhi[]={
0xFF,0xFF,//占位 0xFC,0x8E,//中央 C 调 1-7

51单片机音乐播放器程序

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位的赋初值方法}。

单片机音乐播放c语言程序

单片机音乐播放c语言程序
0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
};
4,2,1, 4,2,1, 3,2,2, 1,2,2, 2,2,2, 1,2,4
};
//生日歌
// 音阶频率表 高八位
code uchar FREQH[]={
0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
/* 函数声明 */
/*******************************************************/
uchar keyscan(void); //键盘扫描
void delay1(uint i); //演示程序
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
} ;
// 音阶频率表 低八位
code uchar FREQL[]={
0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
延时程序
------------------------------------------------*/
cord_l=P3&0xf0; //读入行线值
return(cord_h+cord_l);//键盘最后组合码值

单片机音乐播放C语言程序

单片机音乐播放C语言程序

单片机音乐播放C语言程序#include ;#define uchar unsigned char#define uint unsinged intsbit speaker = P1^7;uchar t0h,t0l,time;//--------------------------------------//单片机晶振采用11.0592MHz// 频率-半周期数据表高八位本软件共保存了四个八度的28个频率数据uchar code FREQH[] = {0x01, //0的时候没有音符 0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8, //低音12345670xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC,0xFC,//1,2,3,4,5,6,7,i0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, //高音2345670xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF}; //超高音 1234567//-----------------------------------------// 频率-半周期数据表低八位uchar code FREQL[] = {0x01, //0的时候没有音符 0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6, //低音12345670x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D, //高音2345670x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16}; //超高音 1234567//--------------------------------------//一个音符有三个数字。

[整理]51单片机利用中断播放音乐程序

[整理]51单片机利用中断播放音乐程序

[整理]51单片机利用中断播放音乐程序中断播放音乐程序示例单片机机器周期的算法:比如一个12M的单片机,它的指令周期是1/12M,它的一个机器周期是12*1/12M,1/1M=1微秒在单片机中,它的中断源的定时记一个数是以机器周期为基准的,即对于一个12M的单片机来说,它的记数脉冲是1微秒,也就是说,记下两个数之间间隔的时间是1微秒。

单片机播放音乐其实也就是要干两件事情,能用单片机确定单调和节拍。

所谓音调,也就是音乐的频率,而节拍呢,就是间隔多少时间响一次,正好可以利用两个中断来完成这个工作。

怎么让一个单片机发出一个定频率的声音呢,比如一个440HZ的声音。

440HZ的声音的周期是T,1/440HZ,2272us 即控制给蜂鸣器输入端一个1136us的高电平,再给一个同时长的低电平,这样不断的交替进行,即可以得到440HZ的声音了。

那么这个过程如何用单片机的中断来实现呢, 关键就是该对中断TH0,TL0如何赋初值。

单片机的晶振是12M的,那么这个中断定时计一个数代表的时间是1us,即如果想要实现440HZ的声音,工作于方式1时,计数器最多可以记下65536的数,那么:TH0=(65536,1136)/256TL0=(65536,1136)%256在乐谱中,可以看到下图这样的数字和符号,其中1,C, 1,G表示曲调,与音频有很大的关系。

3/4表示乐谱中,以四分音符为节拍,每一小节有三拍,以下图为例说明:其中1,2为一拍,3,4,5为一拍,6为一拍,一共三拍。

1,2时长是四分音符的一半,即八分音符,3,4时长是八分音符,一半,即十六分音符,5时长是八分音符,6时长表示四分音符。

一拍的时长大约是400ms--500ms,以400ms为例,一拍是400ms,那么四分音符的时长就是400ms,那么八分音符的时长就是200ms,十六分音符的时长就是100ms,在单片机上,控制一个音符唱多长时间,可以用延时的方法,以十六分时长为最基本的延时单元,那么如果要延时八分时长,那么就运行两次这个延时单元,如果要延时四分音符的时长,那么就运行四次这个延时单元。

单片机音乐播程序设计流程

单片机音乐播程序设计流程

单片机音乐播程序设计流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!1. 确定音乐格式:首先需要确定要播放的音乐文件格式,常见的音乐格式如 MP3、WAV 等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
// 3 _ 3_ 3 1
0xFD,0x23,0x7F, 0xFD,0x23,0x7F, 0xFD,0x23,0xFF, 0xFC,0x44,0xFF,
// 1_ 3_ 5 5
0xFC,0x44,0x7F, 0xFD,0x23,0x7F, 0xFD,0x82,0xFF, 0xFD,0x82,0xFF,
******************************************************************/
#include <at89x52.h>
#define uchar unsigned char
bit flag; //标志音乐输出脚电平的高低
uchar ptr = 0x00; //取音符
EA = 1;
ET0 = 1; //定时器0 溢出中断
}
/*********************************************************************************
* 名称:DelayMs(unsigned int time)
* 功能:延时time * 1ms 时间
* 网站:
* 编写:
* 日期:2008-8-08
* QQ : 121350852 398115088
* 晶振:11.0592MHZ 净论坛交流
* 论坛:
// 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,
// .7_ 2_ 1 -
0xFC,0x0C,0x7F, 0xFC,0xAC,0x7F, 0xFC,0x44,0xFF, 0xFF,0xFF,0xFF,
0x00//结束
};
void Init(void); //初始化函数
void DelayMs(unsigned int time); //毫秒级延时函数
for (j =0; j < time; j++) //每个循环 约 3ms
{
for (i =0; i < 363; i++)
{;}
}
}
// 3_ 2_ 3 1
0xFD,0x23,0x7F, 0xFC,0xAC,0x7F, 0xFD,0x23,0xFF, 0xFC,0x44,0xFF,
// 1_ 3_ 2 .5
0xFC,0x44,0x7F, 0xFD,0x23,0x7F, 0xFC,0xAC,0xFF, 0xFA,0x68,0xFF,
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,
{
TR0 = 0;
P2_3 = 1;
DelayMs(2000);
ptr = 0;
}
}
}
/*********************************************************************************
void main()
{
uchar time;
Init();
TH0 = high;
TL0 = low;
while (1)
{
if (music[ptr] != 0xFF && music[ptr] != 0x00)//判断是否是正常音符
{
TR0 = 0;
P2_3 = 1;
DelayMs(10); //间歇
TR0 = 1;
high = music[ptr]; //取设置频率数值的高8 位
low = music[ptr + 1]; //取设置频率数值的低8 位
time = music[ptr + 2]; //取发声时间
* 名称:Count1(void) interrupt 1
* 功能:设置计时器0 溢出中断,每中断一次改变P2_3 引脚电平
*********************************************************************************/
void Count1(void) interrupt 1
/**********************HJ-3G实验开发板例程************************
* 平台:HJ-3G V6.0 + Keil U3 + STC89C52
* 名称:实验板唱歌实验
* 公司:慧净电子科技有限公司
* 淘宝:
* 名称:Init()
* 功能:设置计数器0 工作方式,16 位计数,溢出中断方式
**********************************************************************************/
void Init()
{
TMOD = 0x01; //定时器0 处于计时方式,16 位
{
TH0 = high;
TL0 = low;
if (flag == 0) //改变P2_3 引脚电平
{
P2_3 = 0;
flag = 1;
}
else
{
P2_3 = 1;
flag = 0;
}
}
/*********************************************************************************
DelayMs(time);
ptr += 3;
}
else if (music[ptr] == 0xFF) //判断是否是休止符
{
time = music[ptr + 2];
DelayMs(time);
ptr += 3;
}
else //结束符,停止2 秒后继续
*********************************************************************************/
void DelayMs(unsigned int time)
{
unsigned int i;
unsigned int j;
相关文档
最新文档