整理简易c语言蜂鸣器音乐.docx

上传人:scccc 文档编号:13586989 上传时间:2022-01-19 格式:DOCX 页数:16 大小:61.61KB
返回 下载 相关 举报
整理简易c语言蜂鸣器音乐.docx_第1页
第1页 / 共16页
整理简易c语言蜂鸣器音乐.docx_第2页
第2页 / 共16页
整理简易c语言蜂鸣器音乐.docx_第3页
第3页 / 共16页
整理简易c语言蜂鸣器音乐.docx_第4页
第4页 / 共16页
整理简易c语言蜂鸣器音乐.docx_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《整理简易c语言蜂鸣器音乐.docx》由会员分享,可在线阅读,更多相关《整理简易c语言蜂鸣器音乐.docx(16页珍藏版)》请在三一文库上搜索。

1、精品文档/51单片机播放音乐库文件SOUND PLAY FOR 51MCUCOPYRIGHT (c)2005 BY JJJ-ALL RIGHTS RESERVED -File Name: Author: Created: Modified: Revision:SoundPlay.h Jiaiig Jiaii Jun 2005/5/16NO1.0*/*说明*曲谱存贮格式unsigned char code MusicNaine音高,音长,音高,音长,0,0;末尾:0,0表 示结束(Important)音高由三位数字组成:个位是表示17这七个音符十位是表示音符所在的音区:1-低音,2-中音,3-高

2、音;百位表示这个音符是否要升半音:0-不升,1-升半音.音长最多由三位数字组成:个位表示音符的时值,其对应关系是:| 数值(n):|0|1 |2|3|4|5|6|几分音符:|1 |2 |4 |8 |16 |32 |64音符=2九十位表示音符的演奏效呆(0-2): 0-普通,1-连音,2-顿音百位是符点位:0 无符点,1 有符点调用演奏子程序的格式Play(乐曲名,调号,升降八度,演奏速度);1乐曲名| 调 9(0-11)|升降八度(13):要播放的乐曲指针,结尾以(0,0)结束; :是指乐曲升多少个半音演奏; :上降八度,2:不升不降,3:升八度;|演奏速度(1-12000):值越人速度越快;

3、*/#ifhdef _SOUNDPLAY_H_RE VISION_FIRST_#define _SOUNDPLAY_H_REVISION_FIRST_#include define SYSTEM.OSC frdefine SOUND_SPACE 隔*11059200/12000000 /定义晶振频率 12000000HZ4/5定义普通音符演奏的长度分率,每4分音符间#define uchai unsigned char#define umt unsigned mtsbit BeepIO =P2A4;sbit kev3=P3z 4;sbit kevl=P3z 2;/按 kevl nJ切换把戏sb

4、it key2=P3T;/按kev2可切换歌曲/定义输出管脚uchai count!;unsigned int code FreTab12 = 262,277,294,311,330,349,369,392,415,440,466、494 ; 原 始频率表0,2,4,5,7,9,11;unsigned chai code SignTab717在频率表中的位置unsigned char code LengthTab7= 1,2,4,8,1632,64 ;unsigned char Sound_Temp_TH0,Sound_Temp_TL0;音符定时器初值暂存unsigned char Sound

5、_Temp_TH 1 ,Sound_Temp_TL 1;音长定时器初值暂存*void InitialSound(void)BeepIO = 1;Sound_Temp_THl = (65535(l/1200)*SYSTEM_OSC)/256;/ 计算 TL1 应装入的初值(lOnis的初装值)Sound_Temp_TLl = (65535(1/1200)*SYSTEM_OSC)%256;/ 计算 TH1 应装入的初值TH1 = Sound_Temp_TH 1;TL1 = Sound_Temp_TL 1;TMOD |= 0x11;ET0= 1;ET1=0;TRO= 0;TRI= 0;EA= 1;v

6、oid BeepTiineiO(void) iiitemipt 1音符发生中断BeepIO = !BeepIO;THO= Sound_Temp_THO;TLO= S ound_Temp_TLO;*void Play(unsigned char *Sound.unsigned char Signatuie,unsigned OctachordAinsigned mt Speed)unsigned mt NewFieTab12;新的频率表unsigned char ij;unsigned mt Pouit,LDivLDixO.LDivl .LDiv2,LDiv4,CuiTentFie5Temp_T

7、,SouiidLength;unsigned char Tone,Lengtli,SL.SH,SM.SLen,XGFD;for(i=0;i11)J=J2;NewFreTabi = FreTabj*2;elseNewFreTabi = FreTabfj;if(Octachoid = 1) NewFreTabi=2;else if(Octachord = 3) NewFreTabi =2;SoundLengtli = 0; while(SouiidSouiidLength != 0x00)计算歌曲长度SoundLengtli+=2; Pomt = 0;Tone = Sound Pomt;Lengt

8、h = Sound Pomt+1;/读出第一个音符和它时时值LDivO = 12000/Speed;LDiv4 = LDivO/4;/算出1分音符的长度几个lOnis/算出4分音符的长度LDiv4 = LDiv4-LDiv4*SOUND_SPACE; / 普通音最长间隔标准TRO = 0;TRI= 1;wliile(Point SoundLengtli)SL=Tone% 10;计算出音符SM=Tone/l 0% 10;/计算出上下音SH=Tone/100;计算出是否升半CunentFre = NewFreTabSignTabSL-l+SH;/查出对应音符的频率if(SL!=0)if (SM=1

9、) CunentFre = 2;低音if (SM=3) CunentFre = 2;高音Temp_T = 65536-(50000/CiHntFe)* 10/(12000000/SYSTEM_OSC); 计算计数器初值Sound_Temp_TH0 = Temp_T/256;Sound_Temp_TL0 = Temp_T%256;THO = Soimd_Temp_THO;TLO = Soimd_Temp_TLO + 12; 加12是对中断延时的补偿SLen=LengthTab Length% 10;XG=Lengtlvl0%10;FD=LengtlvlOO;LDiv=LDivO/SLen;if(

10、FD=l)LDi v=LDiv+LDiv/2;if(XG!=l) if(XG=O)if (SLen0;i-)/算出顿音的演奏长度算岀不发音的长度发规定长度的音wlule(TFl=O);TH1 = Sound_Temp_TH 1;TL1 = Sound_Temp_TL 1; TF1=O;if 0; i)/音符间的间隔wlule(TFl=O);TH1 = Sound_Temp_TH 1;TL1 = Sound_Temp_TL 1; TF1=O;Pomt+=2;Tone=Sound Pomt;Length=Sound Point+1 ;BeepIO = 1;*#endif挥着翅膀的女孩unsigne

11、d 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,0x1 & 0x03,0x17,0x03,0x18,0x02,0x10,0x03,0x15.0x03,0x16,0x02,0x15,0x03,0x16,0x03,0x17.0x02,0x17,0x03,0

12、x1 & 0x03,0x19,0x02,0xlA,0x03,0xlB.0x03,Ox IF,0x03,0xlF.0x03,0x17,0x03,0x18,0x03,0x19,0x02,0x16.0x03,0x17.0x03,0x18,0x03,0x17,0x03,0x18.0x03,Ox IF,0x03,0xlE0x02,0x16,0x03,0x17,0x03,0x18.0x03,0x17,0x03,0x1 & 0x03,0x20,0x03,0x20,0x02,0xlE0x03,0xlE,0x03,0xlF.0x66,0x20,0x03,0x21,0x03,0x20,0x03,0x1 F,OxO

13、3,0xlE.0x03,0xlE0x66,0xlE0x03,0xlB.0x03,0x19.0x03,0x19.0x03,0x15,0x03,0xlA.0x66,0xlA.0x03.0x19,0x03,0x15.0x03,0x15,0x03,0x17,0x03,0x16,0x66.0x17.0x04、0x18,0x04,0x18,0x03,0x19,0x03,0xlE0x03,0xlE,0x03,0xlE0x66,0x20,0x03,0x21,0x03,0x20,0x03,0x1 F,OxO3,0xlE.0x03,0xlE0x66,Ox IF,0x03,0xlB.0x03,0x19.0x03,0

14、x19.0x03,0x15,0x03,0xlA.0x66,0xlA.0x03.0x19,0x03,0x19,0x03,Ox IF,0x03,0xlB,0x03,OxlEOxOO.0xlA,0x03,0x1 A, 0x03,0xlA,0x03,0xlB,0x03,0xlB.0x03,0xlA,0x03,0x19.0x03,0x19,0x02,0x17,0x03,0x15,0x17,0x15.0x03、0x16,0x03,0x17,0x03,0x18,0x03,0x17,0x04.0x18, OxOE,0x18,0x03,0x17,0x04,Oxl&OxOE,0x18,0x66.0x17.0x03

15、、0x18,0x03,0x17,0x03,0x18,0x03,0x20,0x03,0x20.0x02,Ox IF, 0x03,Ox IE,0x03,0xlE0x66.0x20,0x03,0x21.0x03,0x20,0x03,Ox IF,0x03,0xlB,0x03,Ox IF,0x66.Ox IF,0x04、OxlB.OxOE,Ox IE,0x03,0x19,0x03,0x19,0x03,0x15,0x03,0x1 A,0x66,0xlA,0x03,0x19,0x03,0x15.0x03,0x15.0x03、0x17,0x03,0x16,0x66,0x17,0x04,0x18,0x04.0x

16、18.0x03,0x19.0x03,Ox IF,0x03,0xlB,0x03,Ox IF,0x66.0x20,0x03,0x21,0x03,0x20,0x03,Ox IF,0x03,0xlB.0x03,Ox IF,0x66,0xlE0x03,0xlE,0x03,0x19,0x03,0x19,0x03,0x15,0x03,0xlA,0x66,0xlA,0x03,0x19,0x03,0x19,0x03、Ox IF,0x03,0xlE、0x03,OxlEOxOO.0x18,0x02,0x18.0x03,0xlA.0x03,0xl9,0x0D,0x15.0x03,0x15,0x02,0x18.0x66

17、.0x16.0x02,0x17,0x02,0x15.0x00,0x00,0x00;同一首歌unsigned char code Music_Same= OxOF.OxOl, 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,Oxl& 0x03、0x19.0x02,0x15,0x02,0x18,0x66,0x17.0x03,0x19,0x02,

18、0x16,0x03,0x17,0x03,0x16,0x00,0x17.0x01,0x19,0x02,0xlE,0x02,0xlB,0x70,0xlA.0x03,OxlA.OxOl.0x120x02,0x19,0x03,0xlA,0x03,0x1 B,0x02,OxlA.OxOD,0x19.0x03,0x17.0x00,0x18,0x66、0x18,0x03,0x19,0x02 ?0xlA,0x02,0xl9,0x0C,0x1 & OxOD,0x17,0x03,0x16,0x01,0x11,0x02,0x11,0x03,0x10,0x03,OxOEOxOC,0x10,0x02 ?0x15,0x0

19、0.OxlEOxOl,0x1 A,0x01,0x18,0x66,0x19,0x03,OxlA.OxOl,0xlB.0x02?0xlE,0x03,0xlB,0x03,OxlB.OxOC,OxlA.OxOD,0x19,0x03,0x17,0x00,OxlEOxOl,OxlA.OxOl.Oxl& 0x66.0x19,0x03,OxlAQxOl,0x10,0x02,0x10,0x03,0x10,0x03,OxlAQxOC,0x1 & OxOD,0x17,0x03,0x16,0x00.0x0F,0x01,0x15.0x02,0x16,0x02,0x17,0x70,0x18.0x03,0x17,0x02、

20、0x15.0x03,0x15,0x03,0x16,0x66,0x16,0x03,0x16.0x02,0x16,0x03,0x15,0x03,0x10,0x02,0x10,0x01,0x11,0x01,0x11,0x66,0x10,0x03,OxOEOxOC,0xlA,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_Tvo = 0x17,0x03, 0x16,0x03, 0x1

21、7.0x01. 0x16,0x03, 0x17,0x03,0x16,0x03,0x15,0x01、0x10.0x03,0x15,0x03,0x16,0x02,0x10,0x03,0xl6,0x0D、0x17,0x03,0x16.0x03,0x15,0x03,0x16,0x03,OxlO.OxOE,0x15,0x04,OxOEOxOl,0x17,0x03,0x15,0x01,0x17.0x01,0x16.0x03、0x17.0x03,0x16,0x03,0x17,0x03,0x10,0x03、0x15,0x03,0x16,0x02,0xl6,0x0D,0x16,0x01,0x16,0x03,0x

22、15,0x03、0x10.0x03,0x15,0x03,0x17,0x03,0x17.0x03,0x16.0x03、0x17.0x01,0x16,0x03,0x16,0x02,0x16,0x03,0x15,0x01、0x10.0x03,0x15,0x03,0x10,0x03,0xl6,0x0D、0x17,0x03,0x16.0x03,0x15,0x03,0x19,0x03,OxlO.OxOE,0x15,0x04,OxOEOxOl,0x17,0x03,0x17.0x01,0x19,0x01,0x19,0x03,0xlA.0x03,0x19,0x03,0x17,0x03,0x16,0x03,0x1

23、6,0x03,0x16,0x02,0xl6,0x0D,0x15,0x00,0x16,0x03,0x15,0x03,0x10,0x03、0xl0,0x0D,0xlB,0x03,0x19,0x03、0x19.0x03,0xlA.0x03,0xlF.0x03,0x16,0x03,0xlB.0x03,0x1 A.0x03,0xl7,0x0D,0x16,0x03,0x19,0x03,0xl6,0x0D、0x17,0x01,0x17.0x03,0x17,0x03,0x16,0x03,0xlA.0x02,0x1 A,0x02,0x10.0x03,0xl7,0x0D,0x17,0x03,0x16,0x01,0

24、x17,0x03、0x19.0x03,0x19,0x03,0x19.0x02,Ox 1 E0x02,Ox 1E .0x03,Ox 1 A, 0x03、OxlA.OxOE,0xlB.0x04.0x17,0x02,0x1 A,0x03,0xlA,0x03,OxlA.OxOE,0xlB.0x04.0x1 A,0x03,0x19.0x03,0x17,0x03,0x16,0x03,0x17.0x0D50x16,0x03,0x17.0x03,0x19,0x01,0x19,0x03,0x19,0x03,0xlA,0x03,Ox IF,0x03,Ox IE,0x03,0xlB,0x03,0xlA,0x03,0

25、xl7,0x0D,0x16.0x03,0x16,0x03,0x16,0x03,0x17,0x01,0x17.0x03、0x17,0x03,0x19,0x03,0x1 A,0x02,0xlA,0x02,0x10.0x03,0xl7,0x0D,0x16,0x03,0x16,0x01,0x17.0x03,0x19.0x03.0x19,0x03,0x17,0x03,0x19,0x03,Ox IF,0x02,0xlB,0x03,0x1 A,0x03,OxlA.OxOE,Ox IB,0x04,0x17.0x02,0x1 A,0x03,0xlA,0x03,OxlA.OxOE,Ox IB,0x04,0x17,

26、0x16,0x1 A,0x03,0xlA,0x03,OxlA.OxOE,Ox IB,0x04,0xlA,0x03,0x19,0x03,0x17.0x03,0x16,0x03,0x0E0x02,0x10.0x03, 0x15,0x00, 0x00.0x00 ;void main()uchar x;count 1=V/流水灯无把戏EA=1;开总中断EX0=l;/开外部中断0ITO=1;/外部中断0下降沿触发方式EX1=1;开外部中断1IT1=1;/外部中断1下降沿触发方式TMOD=0x01;/定时器0工作在方式1TRO=1;TH0=0;TL0=0;ETO=1;InitialSoundQ;wlule

27、(l)if(countl!=0)switch(countl)case 1:Play(Music_Gnl,02,350);break;case 2:Play(Music_Same.0.2,350);break;case 3:Play(Music_TwoQ2,350);break; void mt0() mtenupt 0EA=0;/关总中断if(kevl=0)count 1=1;EA=1;/开总中断void intlQ iiitemipt 2EA=0;/关总中断if(kev2=0)count 1=2;EA=1;/开总中断void timerOQ mteimpt 1 用于产生各种音调EA=0;关总中断if(kev3=O)count 1=3;EA=1;/开总中断精品文档

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1