单片机C52的音乐播放C语言程序
毕业设计(论文)-基于单片机控制的音乐播放器[管理资料]
![毕业设计(论文)-基于单片机控制的音乐播放器[管理资料]](https://img.taocdn.com/s3/m/c2ce389c58fafab068dc02c7.png)
单片机音乐播放器设计报告学生:XXX 指导教师:XXX内容摘要:单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
根据要求设计一款音乐播放器,能实现音乐播放的简单功能,同时为了美化,添加了韵律闪烁彩灯,设计时采用Keil软件编程,用protues软件仿真,核心器件采用灵活性高且价格低廉的AT89C51芯片。
设计完成后系统可播放自编歌曲,同时发光二极管随着歌曲韵律闪烁。
关键词:单片机 AT89C51 音乐播放英文标题Abstract: SCM has small, strong function, low cost, application, advantages and intelligent control and automatic control of the core is the microcontroller. According to the requirements of a music player, design of music broadcast can realize simple function, and to beautify, added rhythm flashing lights, design is used when Keil C software programming, with protues software simulation, the core device adopts high flexibility and the price is cheap AT89C51 chip. The design is completed system can play Wrote songs, and leds with songs rhythm flicker.Keywords:SCM Temperature AT89C51 Music broadcast前言:微机原理和接口技术是一门实践性强的学科,不但要求有较高的理论水平,而且还要求有实际的动手能力,其中很多的原量、规则、现象等仅仅靠学习教科书是无法完全掌握的,必须通过实践才能比较直观和深刻的理解。
52单片机 时钟 音乐 秒表 程序

#include<reg52.h>#define uint unsigned int#define uchar unsigned char#define bit(x)(1<<x)unsigned int a[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x80}; unsigned char c=-1; //调时间用的unsigned char b[12]={0};unsigned char d[6]={0,0,5,1,9,1}; //调闹钟用的unsigned char f=0;unsigned char e[4]={0};uchar u=0; //音乐用uchar Count; //同上#include<intrins.h>#define wr_second 0x80#define wr_minute 0x82#define wr_hour 0x84#define rd_second 0x81#define rd_minute 0x83#define rd_hour 0x85//#define wr_day 0x86#define rd_day 0x87#define wr_month 0x88#define rd_month 0x89#define wr_year 0x8c#define rd_year 0x8d//#define write_protect 0x8esbit CLK=P1^0; //实时时钟时钟线引脚sbit DIO=P1^1; //实时时钟数据线引脚sbit RST =P1^2; //实时时钟复位线引脚sbit ACC0 = ACC^0;sbit ACC7 = ACC^7;//sbit return0=P3^3;sbit left=P3^4 ;sbit stop=P3^5;sbit up=P1^6;sbit yinyue=P1^7;sbit fiction=P3^2;sbit Speak =P1^4; // 风频器nb//uchar s,m,h,day,mon,year;uchar q=0; // 中断用uchar clock=0;void delay(unsigned ms){unsigned i,j;for(i=0;i<ms;i++)for(j=0;j<150;j++);}void show(int x,int y){P2=~bit(x);P0=a[y];delay(1);}//时间//////////////////////////////////////////////////////////////////////////////////////////////// //////// //写void DS1302_wr(uchar addr,uchar dat) //addr: DS1302地址, dat 要写的数据{unsigned char i,temp;RST = 0;CLK = 0;RST = 1;//ACC=addr;// 地址,命令for(i=8;i>0;i--){ CLK = 0;temp=addr;DIO=(bit)(temp&0x01) ;addr=addr>>1;CLK=1;}for(i=8;i>0;i--){CLK = 0;temp=dat;DIO=(bit)(temp&0x01);dat >>= 1;CLK=1;}RST=0;}// 读unsigned char DS1302_rd(unsigned char addr){unsigned char i,temp,dat1,dat2;RST = 0;CLK = 0;RST = 1;// 地址,命令for(i=8;i>0;i--){CLK = 0;temp=addr;DIO=(bit)(temp&0x01);addr>>=1;CLK=1;}for(i=8;i>0;i--){ACC7=DIO;CLK=1;ACC>>=1;CLK=0;}RST=0;dat1=ACC;dat2=dat1/16;dat1=dat1%16;dat1=dat1+dat2*10;return(dat1);}void intial(void) // ds1302初始化{DS1302_wr(write_protect,0x00);//DS1302_wr(wr_second,0x56);//DS1302_wr(wr_minute,0x34);//DS1302_wr(wr_hour,0x12);//DS1302_wr(wr_day, 0x07);// DS1302_wr(wr_month,0x12);//DS1302_wr(wr_year,0x11);// DS1302_wr(write_protect,0x80);}//////////////////////////////////////////////////////////////////////////////////////////////////////void show_b() //时间日期数码管显示数{//uchar i;b[0]=s%10;b[1]=s/10;b[2]=m%10;b[3]=m/10;b[4]=h%10;b[5]=h/10;//b[6]=day%10;b[7]=day/10;b[8]=mon%10;b[9]=mon/10;b[10]=year%10;b[11]=year/10;}void show_time() //显示时间函数{show_b();show(0,b[0]);show(1,b[1]);show(2,10);show(3,b[2]);show(4,b[3]);show(5,10);show(6,b[4]);show(7,b[5]);}void show_day() //显示日期函数{show_b();show(0,b[6]);show(1,b[7]);show(2,b[8]);show(3,b[9]);show(4,b[10]);show(5,b[11]);show(6,0);show(7,2);}/////////////////////////////////////////////////////////////////////////////////////void ddd(void) //从ds1302读出时、分、秒及日期{s=DS1302_rd(rd_second);m=DS1302_rd(rd_minute);h=DS1302_rd(rd_hour);day=DS1302_rd(rd_day);mon=DS1302_rd(rd_month);year=DS1302_rd(rd_year);}//////////////////////////////////////////////////////////////////////////////////////void int_init(void) //开中断{EA=1; //全局中断开EX0=1; //外部中断0开EX1=1; //外部中断1开IT0=1; //边沿触发,为0则为低电平触发IT1=1; //边沿触发,为0则为低电平触发ET1=1; // 计数器1开}void init_time() //中断初始化{TMOD=0x10;TR1=1; // TCON}//////////*void int0_Key() interrupt 0 using 1{u++; //q功能键转化}*/void fictions(){if(fiction==0){while(fiction==0);q++;}}void int1_Key() interrupt 2 using 2{clock=0; //关闹钟}/////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// void clock_out() //闹钟程序{while(clock){Speak=1;delay(1);Speak=0;delay(1);}}void move() // 调小数点{if(left==0){while(left==0);c++;if(c==7) c=-1;}}void move_time() //调时间{move();if(up==0){uchar a;while(up==0);switch(c){//case -1: break;case 0: a=s%10+s/10*16;a=a+0x01;if(a>=96)a=a-0x60;DS1302_wr(wr_second,a);break;case 1: a=s%10+s/10*16;a=a+0x10;if(a>=96)a=a-0x60;DS1302_wr(wr_second,a);break;//case 2: break;case 3: a=m%10+m/10*16;a=a+0x01;if(a>=96)a=a-0x60;DS1302_wr(wr_minute,a);break;case 4: a=m%10+m/10*16;a=a+0x10;if(a>=96)a=a-0x60;DS1302_wr(wr_minute,a);break;//case 5: break;case 6: a=h%10+h/10*16;a=a+0x01;if(a>=36)a=0x00;DS1302_wr(wr_hour,a);break;/*case 7: a=h%10+h/10*16;a=a+0x10;if((a&0xf0)>=32)a=0x00+b[4];DS1302_wr(wr_hour,a);break; */ default : break;}}show_time();}void move_day() //调日期{move();if(up==0){uchar a;while(up==0);switch(c){//case -1: break;case 0: a=day%10+day/10*16;a=a+0x01;if(a>49)a=0x01;DS1302_wr(wr_day,a);break;case 1: /* a=day%10+day/10*16;a=a+0x10;if(a>=65)a=a-0x30;DS1302_wr(wr_day,a);break;*/c=c+1;case 2: a=mon%10+mon/10*16;a=a+0x01;if(a>18)a=0x01;DS1302_wr(wr_month,a);break;case 3: /* a=mon%10+mon/10*16;a=a+0x10;if(a>=34)a=a-0x10;DS1302_wr(wr_month,a);break;*/c=c+1;case 4: a=year%10+year/10*16;a=a+0x01;if(a>153)a=0x00;DS1302_wr(wr_year,a);break;case 5: a=year%10+year/10*16;a=a+0x10;if(a>153)a=a-0x90;DS1302_wr(wr_year,a);break;/*case 7: a=h%10+h/10*16;a=a+0x10;if((a&0xf0)>=32)a=0x00+b[4];DS1302_wr(wr_hour,a);break;*/ default : break;}}////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void show_naozhong(){show(0,d[0]);show(1,d[1]);show(2,10);show(3,d[2]);show(4,d[3]);show(5,10);show(6,d[4]);show(7,d[5]);}void move_naozhong(){move();if(up==0){while(up==0);switch(c){//case -1: break;case 0: d[0]++;if(d[0]==10) d[0]=0;break;case 1: d[1]++;if(d[1]>=6) d[1]=0;break;//case 2: break;case 3: d[2]++;if(d[2]==10) d[2]=0;break;case 4: d[3]++;if(d[3]>=6) d[3]=0;break;//case 5: break;case 6: d[4]++;if(d[4]==10){d[4]=0;d[5]++;}break;default : break;}}}uchar counter=0;void init_inttime() interrupt 3{TH1=0xfc;TL1=0x0B;counter++;if (counter==10){counter=0;e[0]++;if(e[0]==10){e[0]=0;e[1]++;if(e[1]==10){e[1]=0;e[2]++;if(e[2]==10){e[2]=0;e[3]++;if(e[3]==6)e[3]=0;}}}}}/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////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,};void Time0_Init(){TMOD = 0x01;IE = 0x82;TH0 = 0xDC;TL0 = 0x00;}void Time0_Int() interrupt 1{TH0 = 0xDC;TL0 = 0x00;Count++; //长度加1}void Delay_xMs(uint x){uint i,j;for(i=0; i<x; i++){for(j=0; j<3; j++);}}void Play_Song(uchar i){uchar Temp1,Temp2;uint Addr;Count = 0; //中断计数器清0Addr = i ;while(u){Temp1 = SONG[Addr++];if (Temp1 == 0xFF) //休止符{TR0 = 0; // 停止计数Delay_xMs(100);}else if (Temp1 == 0x00) //歌曲结束符{u=0;}else{Temp2 = SONG[Addr++];TR0 = 1;while(1){Speak = ~Speak;Delay_xMs(Temp1);if(Temp2 == Count){Count = 0;break;}}}}}void change(){if(yinyue==0){while(yinyue==0);u++;}}//////////////////////////////////////////////////////////////////////////////////////////////// void main(){intial();int_init();while(1){ddd(); //显示时间if(q%3==0){show_time();move_time();}if(q%3==1) //显示日期{show_day();move_day();}if(q%3==2) //闹钟调试{show_naozhong();move_naozhong();}if(u%2==1) //音乐功能{Time0_Init(); //定时器0中断初始化Play_Song(0); //为祝你平安}show(c,11); //小数点显示fictions(); //功能键扫描change();if(h==(d[5]*10+d[4])&&m==(d[3]*10+d[2])&&s==(d[1]*10+d[0])) clock=1;clock_out();}}。
单片机_音乐播放的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 条我的博客上有三首连放的,你只要加两首就行了。
单片机音乐播放器课程设计

单片机音乐播放器课程设计一、课程目标知识目标:1. 理解单片机的基础知识,掌握其内部结构与工作原理;2. 学会使用C语言编写单片机程序,实现音乐播放器的功能;3. 了解音乐播放器的基本组成部分,如音符产生、音调控制等;4. 掌握音乐理论知识,能将简单的乐谱转换为单片机程序。
技能目标:1. 能够运用所学知识,设计并实现一个具有基础音乐播放功能的单片机系统;2. 熟练使用编程软件进行单片机程序编写、调试与优化;3. 学会使用相关工具和仪器,进行电路搭建、测试与故障排查。
情感态度价值观目标:1. 培养学生对单片机及电子制作的兴趣,激发创新精神;2. 培养学生的团队协作能力,学会与他人共同解决问题;3. 增强学生的自信心,敢于面对挑战,勇于克服困难;4. 培养学生的责任心,关注环境保护,养成良好的操作习惯。
课程性质:本课程为实践性较强的课程,以项目为导向,结合单片机原理与应用,培养学生的动手能力和创新能力。
学生特点:本课程针对高中年级学生,学生具备一定的物理、数学基础,对电子制作有一定兴趣,但编程能力参差不齐。
教学要求:教师需结合学生特点,采用循序渐进的教学方法,注重理论与实践相结合,关注个体差异,提高学生的实践操作能力。
在教学过程中,注重引导学生思考,激发学生的学习兴趣,培养其创新精神。
通过课程学习,使学生能够独立完成一个简单的单片机音乐播放器设计。
二、教学内容1. 单片机基础知识:介绍单片机的内部结构、工作原理、性能特点,引导学生了解并掌握单片机的基本概念。
教材章节:第一章 单片机概述2. C语言编程基础:讲解C语言的基本语法、数据类型、运算符、控制结构等,为学生编写单片机程序奠定基础。
教材章节:第二章 C语言基础3. 单片机程序设计与调试:学习如何使用编程软件进行程序编写、调试与优化,掌握单片机程序的开发流程。
教材章节:第三章 单片机程序设计与调试4. 音频信号处理:介绍音频信号的基本知识,如音符、音调、节拍等,学习如何将乐谱转换为单片机程序。
单片机C语言小程序

单片机C语言小程序#include <at89x51.h>#include <absacc.h>#define V AR XBYTE[0x00] /*V AR为外部位址0000*/#define read 0 /*93c46读取的识别码READ=0*/#define write 2 /*93c46写入的识别码WRITE=2*/#define ewen 4 /*93C46写致能的识别码EWEN=4*/#define ewds 6 /*93C46写除能的识别码EWDS=6*/#define cs INT0 /*93C46 CS接脚=8051 RD P3.2*/#define clk INT1 /*93C46 CLK接脚=8051 WR P3.3*/#define di T0 /*93C46 DI接脚=8051 T1 P3.4*/#define d0 T1 /*93C46 DO接脚=8051 T0 P3.5*/#define LOW 0x49 /*存放测试温度的下限值*/#define HIGH 0x51 /*存放测试温度的上限值*/bit FLAG0=0; /*宣告TIMER0响应旗号*///外接工业专用温度传感器时,目前设置测量温度为0-99度:static const char tab[13]={0x3a,0x53,0x6f,0x8a,0xa3, /*0度,10度,20度,30度,40度*/0xB8,0xC8,0xD5,0xDE,0xE5, /*50度,60度,70度,80度,90度*/0xEA,0xEE}; /*100度,110度*///使用板上AD590温度传感器时,目前设置测量温度为0-99度://static const char tab[13]={0x88,0x8d,0x92,0x97,0x9c, /*0度,10度,20度,30度,40度,*/// 0xa1,0xa6,0xab,0xb0,0xb5, /*50度,60度,70度,80度,90度*/// 0xba,0xc0}; /*100度,110度*/char data1[2];char C,S,k=0;char MEP[7]; /*显示器值存放阵列*///MEP[0]=数码管最低位显示值,温度指示小数点后位//MEP[1]=数码管次低位显示值,温度指示个位数//MEP[2]=数码管高位显示值,温度指示十位数//MEP[3]=数码管最低位显示值,功能显示目前定为1,2,3,4,5//MEP[4]=//MEP[5]=暂放置温度显示值,高4位为温度指示十位数值,低4位为温度指示个位数值//MEP[6]=在温度显示与电压调整副程式中,将测量值C暂存MEP[6]中unsigned char combuf[10];unsigned char ADR46,CH,CL,m,C1,C2; /*ADR46,93C46位址,CH高位元组,CL低*/ int sec,sec1;char ptr=0,ptr1=0x10,psr=0; /*ptr显示器值存放阵MEP[]指标,ptr1显示器扫描指标*/ char count=100,sb=0;void delay (unsigned int value) /*延时副程式*/{while (value!=0) value--; /*10us延时*/}void COMP(); /*宣告比较现在温度与设定温度副程式*/void SET();void disp(); /*宣告设定温度副程式*/void to9346(char c); /*宣告TO93C46副程式*/void SDT46(char c); /*宣告串入副程式*/RDT46(); /*宣告串出副程式*/void clear(void); /*宣告清除按键存放/显示器阵列MEP[]副副程式*/void xch(void); /*宣告按键存放/显示器阵列MEP[]右键滚入副程式*/void sjust(void); /*温度显示慢跳调整副程式*/void temper(); /*宣告温度显示与电压调整副程式*/void UP(); /*宣告温度上升键防抖动副程式*/void UPA(); /*宣告温度设置上升副程式*/void DOWN(); /*宣告温度下降键防抖动副程式*/void DOWNA(); /*宣告温度设置下降副程式*/void FONTION(); /*宣告模式键判断模式副程式*/void buf(); /*宣告从93C46取设定值副程式*/void SA VE(); /*宣告设置存储副程式*///********************************************************main() /*主程式*/{TMOD=0x11; /*TIMER0,TIMER1工作在MODE1*/TH0=(65535-50000)/256; /*设定TIMER0初值,50ms*/TL0=(65536-50000)%256;TH1=(65535-4000)/256; /*设定TIMER1初值,4ms*/TL1=(65536-4000)%256;IE=0x8a; /*TIMER0,TIMER1中断致能*/TR1=1; /*启动TIMER1*/P2_7=1; /*测试用,温度下限指示*/P2_6=1; /*测试用,温度在正常上下限间指示*/P2_5=1; /*测试用,温度上限指示*/buf(); /*从93C46取设定值副程式*/while(1) /*无条件循环*/{P3_1=0;MEP[3]=0xff; /*将模式位置零*/V AR=0x00; /*产生写入信号WR=0,令ADC0804开始转换*/while (P2_0==1); /*侦测ADC0804的接脚INTR=0否?是则转换完成*/S=V AR; /*读取ADC0804资料,存入C*/sjust(); /*温度显示慢跳调整副程式*/temper(); /*呼叫温度显示调整副程式*/MEP[5]=(MEP[2] < <4)|MEP[1];if(P2_4==0) SET(); /*如果模式键P2.4按下,则呼叫SET副程式,否则跳过副程式*/if(MEP[5] <combuf[5]) { P2_7=0; /*如果测试温度小于设定温度下限,等式成立时,则将低温指示打开P2_7=0*/P2_6=P2_5=1; /*关闭指示灯*/}if(MEP[5]> combuf[6]) { P2_5=0; /*如果测试温度大于设定温度上限,等式成立时,则将高温指示打开P2_5=0*/P2_7=P2_6=1; /*关闭指示灯*/}if(combuf[5] <MEP[5])if(MEP[5] <combuf[6]) { P2_6=0; /*如果测试温度介于设定温度上下限之间,则将正常指示打开P2_6=0*/ P2_7=P2_5=1;}} /*跳至while(1),无条件循环*/单片机的C语言轻松入门随着单片机开发技术的不断发展,目前已有越来越多的人从普遍使用汇编语言到逐渐使用高级语言开发,其中主要是以C语言为主,市场上几种常见的单片机均有其C语言开发环境.这里以最为流行的80C51单片机为例来学习单片机的C语言编程技术.本书共分六章,每章一个专题,以一些待完成的任务为中心,围绕该任务介绍C语言的一些知识,每一个任务都是可以独立完成的,每完成一个任务,都能掌握一定的知识,等到所有的任务都完成后,即可以完成C语言的入门工作.第1章C语言概述及其开发环境的建立学习一种编程语言,最重要的是建立一个练习环境,边学边练才能学好.Keil软件是目前最流行开发80C51系列单片机的软件,Keil提供了包括C编译器,宏汇编,连接器,库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境( Vision)将这些部份组合在一起.在学会使用汇编语言后,学习C语言编程是一件比较容易的事,我们将通过一系列的实例介绍C语言编程的方法.图1-1所示电路图使用89S52单片机作为主芯片,这种单片机性属于80C51系列,其内部有8K的FLASH ROM,可以反复擦写,并有ISP功能,支持在线下载,非常适于做实验.89S52的P1引脚上接8个发光二极管,P3.2~P3.4引脚上接4个按钮开关,我们的任务是让接在P1引脚上的发光二极管按要求发光.1.1 简单的C程序介绍例1-1: 让接在P1.0引脚上的LED发光./*************************************************平凡单片机工作室Copyright 2003 pingfan's mcustudioAll rights Reserved作者:周坚dddl.c单灯点亮程序*************************************************/图1-1 接有LED的单片机基本电路P1.0EA/VPPVCCXTAL2XTAL1GNDRST+5V+5V+R1E110K10UCY27P27P1KPZ1D8D189×××#include "reg51.h"sbit P1_0=P1^0;void main(){ P1_1=0;}这个程序的作用是让接在P1.0引脚上的LED点亮.下面来分析一下这个C语言程序包含了哪些信息.1)"文件包含"处理.程序的第一行是一个"文件包含"处理.所谓"文件包含"是指一个文件将另外一个文件的内容全部包含进来,所以这里的程序虽然只有4行,但C编译器在处理的时候却要处理几十或几百行.这里程序中包含REG51.h 文件的目的是为了要使用P1这个符号,即通知C编译器,程序中所写的P1是指80C51单片机的P1端口而不是其它变量.这是如何做到的呢打开reg51.h可以看到这样的一些内容:/*-------------------------------------------------------------------------REG51.HHeader file for generic 80C51 and 80C31 microcontroller.Copyright (c) 1988-2001 Keil Elektronik GmbH and Keil Software, Inc.All rights reserved.--------------------------------------------------------------------------*//* BYTE Register */sfr P0 = 0x80;sfr P1 = 0x90;sfr P2 = 0xA0;sfr P3 = 0xB0;sfr PSW = 0xD0;sfr ACC = 0xE0;sfr B = 0xF0;sfr SP = 0x81;sfr DPL = 0x82;sfr DPH = 0x83;sfr PCON = 0x87;sfr TCON = 0x88;sfr TMOD = 0x89; sfr TL0 = 0x8A; sfr TL1 = 0x8B; sfr TH0 = 0x8C; sfr TH1 = 0x8D; sfr IE = 0xA8;sfr IP = 0xB8;sfr SCON = 0x98; sfr SBUF = 0x99; /* BIT Register */ /* PSW */sbit CY = 0xD7; sbit AC = 0xD6; sbit F0 = 0xD5; sbit RS1 = 0xD4; sbit RS0 = 0xD3; sbit OV = 0xD2; sbit P = 0xD0;/* TCON */sbit TF1 = 0x8F; sbit TR1 = 0x8E; sbit TF0 = 0x8D; sbit TR0 = 0x8C; sbit IE1 = 0x8B; sbit IT1 = 0x8A; sbit IE0 = 0x89; sbit IT0 = 0x88;/* IE */sbit EA = 0xAF; sbit ES = 0xAC; sbit ET1 = 0xAB; sbit EX1 = 0xAA; sbit ET0 = 0xA9; sbit EX0 = 0xA8; /* IP */sbit PS = 0xBC; sbit PT1 = 0xBB; sbit PX1 = 0xBA; sbit PT0 = 0xB9; sbit PX0 = 0xB8; /* P3 */sbit RD = 0xB7; sbit WR = 0xB6; sbit T1 = 0xB5;sbit T0 = 0xB4;sbit INT1 = 0xB3;sbit INT0 = 0xB2;sbit TXD = 0xB1;sbit RXD = 0xB0;/* SCON */sbit SM0 = 0x9F;sbit SM1 = 0x9E;sbit SM2 = 0x9D;sbit REN = 0x9C;sbit TB8 = 0x9B;sbit RB8 = 0x9A;sbit TI = 0x99;sbit RI = 0x98;熟悉80C51内部结构的读者不难看出,这里都是一些符号的定义,即规定符号名与地址的对应关系.注意其中有sfr P1 = 0x90;这样的一行(上文中用黑体表示),即定义P1与地址0x90对应,P1口的地址就是0x90 (0x90是C语言中十六进制数的写法,相当于汇编语言中写90H).从这里还可以看到一个频繁出现的词:sfrsfr并标准C语言的关键字,而是Keil为能直接访问80C51中的SFR而提供了一个新的关键词,其用法是:sfrt 变量名=地址值.2)符号P1_0来表示P1.0引脚.在C语言里,如果直接写P1.0,C编译器并不能识别,而且P1.0也不是一个合法的C语言变量名,所以得给它另起一个名字,这里起的名为P1_0,可是P1_0是不是就是P1.0 呢你这么认为,C编译器可不这么认为,所以必须给它们建立联系,这里使用了Keil C 的关键字sbit来定义,sbit的用法有三种:第一种方法:sbit 位变量名=地址值第二种方法:sbit 位变量名=SFR名称^变量位地址值第三种方法:sbit 位变量名=SFR地址值^变量位地址值如定义PSW中的OV可以用以下三种方法:sbit OV=0xd2 (1)说明:0xd2是OV的位地址值sbit OV=PSW^2 (2)说明:其中PSW必须先用sfr定义好sbit OV=0xD0^2 (3)说明:0xD0就是PSW的地址值因此这里用sfr P1_0=P1^0;就是定义用符号P1_0来表示P1.0引脚,如果你愿意也可以起P10一类的名字,只要下面程序中也随之更改就行了.3)main称为"主函数".每一个C语言程序有且只有一个主函数,函数后面一定有一对大括号"{}",在大括号里面书写其它程序.从上面的分析我们了解了部分C语言的特性,下面再看一个稍复杂一点的例子.例1-2 让接在P1.0引脚上的LED闪烁发光/*************************************************平凡单片机工作室Copyright 2003 pingfan's mcustudioAll rights Reserved作者:周坚ddss.c单灯闪烁程序*************************************************/#include "reg51.h"#define uchar unsigned char#define uint unsigned intsbit P10=P1^0;/*延时程序由Delay参数确定延迟时间*/void mDelay(unsigned int Delay){ unsigned int i;for(;Delay>0;Delay--){ for(i=0;iNew Project…"菜单,出现对话框,要求给将要建立的工程起一个名字,这里起名为exam2,不需要输入扩展名.点击"保存"按钮,出现第二个对话框,如图1-2所示,这个对话框要求选择目标CPU(即你所用芯片的型号),Keil支持的CPU很多,这里选择Atmel公司的89S52芯片.点击AT M E L前面的"+"号,展开该层,点击其中的89S52, 然后再点击"确定"按钮,回到主窗口,此时,在工程窗口的文件页中,出现了"Target 1",前面有"+"号,点击"+"号展开,可以看到下一层的"Source Group1",这时的工程还是一个空的工程,里面什么文件也没有,需要手动把刚才编写好的源程序加入,点击"Source Group1"使其反白显示,然后,点击鼠标右键,出现一个下拉菜单,如图1-3所示,选中其中的"Add file to Group"Source Group1",出现一个对话框,要求寻找源文件.双击exam2.c文件,将文件加入项目,注意,在文件加入项目后,该对话框并不消失,等待继续加入其它文件,但初学时常会误认为操作没有成功而再次双击同一文件,这时会出现如图1-4所示的对话框,提示你所选文件已在列表中,此时应点击"确定",返回前一对话框,然后点击"Close"即可返回主接口,返回后,点击"Source Group 1"前的加号,exam3.c文件已在其中.双击文件名,即打开该源程序.1.3 工程的详细设置工程建立好以后,还要对工程进行进一步的设置,以满足要求.首先点击左边Project窗口的Target 1,然后使用菜单"Project->Option for target 'target1'"即出现对工程设置的对话框,这个对话框共有8个页面,大部份设置项取默认值就行了. Target页图1-2 选择单片机型号图1-3 加入文件如图1-5所示,Xtal后面的数值是晶振频率值,默认值是所选目标CPU的最高可用频率值,该值与最终产生的目标代码无关,仅用于软件模拟调试时显示程序执行时间.正确设置该数值可使显示时间与实际所用时间一致,一般将其设置成与你的硬件所用晶振频率相同,如果没必要了解程序执行的时间,也可以不设.Memory Model用于设置RAM使用情况,有三个选择项:Small: 所有变量都在单片机的内部RAM中;Compact:可以使用一页(256字节)外部扩展RAM;Larget: 可以使用全部外部的扩展RAM.Code Model用于设置ROM空间的使用,同样也有三个选择项:Small:只用低于2K的程序空间;Compact:单个函数的代码量不能超过2K,整个程序可以使用64K程序空间;Larget:可用全部64K空间;这些选择项必须根据所用硬件来决定,由于本例是单片应用,所以均不重新选择,按默认值设置.Operating:选择是否使用操作系统,可以选择Keil提供了两种操作系统:Rtx tiny和Rtx full,也可以不用操作系统(None),这里使用默认项None,即不用操作系统.图1-5 设置目标图1-4 重复加入源程序得到的提示OutPut页如图1-6所示,这里面也有多个选择项,其中Creat Hex file用于生成可执行代码文件,该文件可以用编程器写入单片机芯片,其格式为intelHEX格式,文件的扩展名为.HEX,默认情况下该项未被选中,如果要写片做硬件实验,就必须选中该项.工程设置对话框中的其它各页面与C51编译选项,A51的汇编选项,BL51连接器的连接选项等用法有关,这里均取默认值,不作任何修改.以下仅对一些有关页面中常用的选项作一个简单介绍.Listing页该页用于调整生成的列表文件选项.在汇编或编译完成后将产生(*.lst)的列表文件,在连接完成后也将产生(*.m51)的列表文件,该页用于对列表文件的内容和形式进行细致的调节,其中比较常用的选项是"C Compile Listing"下的"Assamble Code"项,选中该项可以在列表文件中生成C语言源程序所对应的汇编代码,建议会使用汇编语言的C初学者选中该项,在编译完成后多观察相应的List文件,查看C源代码与对应汇编代码,对于提高C语言编程能力大有好处.C51页该页用于对Keil的C51编译器的编译过程进行控制,其中比较常用的是"Code Optimization"组,如图1.7所示,该组中Level是优化等级,C51在对源程序进行编译时,可以对代码多至9级优化,默认使用第8级,一般不必修改,如果在编译中出现一些问题,可以降低优化级别试一试.Emphasis是选择编译优先方式,第一项是代码量优化(最终生成的代码量小);第二项是速度优先(最终生成的代码速度快);第三项是缺省.默认采用速度优先,可根据需要更改.图1-6 设置输出文件Debug页该页用于设置调试器,Keil提供了仿真器和一些硬件调试方法,如果没有相应的硬件调试器,应选择Use Simulator,其余设置一般不必更改,有关该页的详细情况将在程序调试部分再详细介绍.至此,设置完成,下面介绍如何编译,连接程序以获得目标代码,以及如何进行程序的调试工作.1.4 编译,连接下面我们通过一个例子来介绍C程序编译,连接的过程.这个例子使P1口所接LED以流水灯状态显示.将下面的源程序输入,命名为exam3.c,并建立名为exam3的工程文件,将exam3.c文件加入该工程中,设置工程,在Target页将Xtal后的值由24.0改为12.0,以便后面调试时观察延时时间是否正确,本项目中还要用到我们所提供的实验仿真板,为此需在Debug页对Dialog DLL对话框作一个设置,在进行项目设置时点击Debug,打开Debug页,可以看到Dialog DLL对话框后的Parmeter:输入框中已有默认值-pAT52,在其后键入空格后再输入-dledkey,如图1-8所示.例1-3 使P1口所接LED以流水灯状态显示/**************************************************; 平凡单片机工作室; ; Copyright 2003 pingfan's McuStudio; All rights Reserved图1-7C51编译器选项;作者:周坚;lsd.c;流水灯程序**************************************************/#include "reg51.h"#include "intrins.h"#define uchar unsigned char#define uint unsigned int/*延时程序由Delay参数确定延迟时间*/void mDelay(unsigned int Delay){ unsigned int i;for(;Delay>0;Delay--){ for(i=0;iBuild target,对当前工程进行连接,如果当前文件已修改,将先对该文件进行编译,然后再连接以产生目标代码;如果选择Rebuild All target files将会对当前工程中的所有文件重新进行编译然后再连接,确保最终生产的目标代码是最新的,而Translate ….项则仅对当前文件进行编译,不进行连接.以上操作也可以通过工具栏按钮直接进行.图1-9是有关编译,设置的工具栏按钮,从左到右分别是:编译,编译连接,全部重建,停止编译和对工程进行设置.编译过程中的信息将出现在输出窗口中的Build页中,如果源程序中有语法错误,会有错误报告出现,双击该行,可以定位到出错的位置,对源程序修改之后再次编译,最终要得到如图1-10所示的结果,提示获得了名为exam3.hex的文件,该文件即可被编程器读入并写到芯片中,同时还可看到,该程序的代码量(code=63),内部RAM的使用量(data=9),外部RAM的使用量(xdata=0)等一些信息.除此之外,编译,连接还产生了一些其它相关的文件,可被用于Keil的仿真与调试,到了这一步后即进行调试.1.5 程序的调试在对工程成功地进行汇编,连接以后,按Ctrl+F5或者使用菜单Debug->Start/Stop Debug Session即可进入调试状态,Keil内建了一个仿真CPU用来模拟执行程序,该仿真CPU功能强大,可以在没有硬件和仿真机的情况下进行程序的调试.进入调试状态后,Debug菜单项中原来不能用的命令现在已可以使用了,多出一个用于运行和调试的工具条,如图1-11所示,Debug菜单上的大部份命令可以在此找到对应的快捷按钮,从左到右依次是复位,运行,暂停,单步,过程单步,执行完当前子程序,运行到当前行,下一状态,打开跟踪,观察跟踪,反汇编窗口,观察窗口,代码作用范围分析,1#串行窗口,内存窗口,性能分析,工具按钮等命令.点击菜单Peripherals,即会多出一项"键盘LED仿真板(K)",选中该项,即会出现如图1-9 有关编译,连接,项目设置的工具条图1-11 调试工具条图1-10 编译,连接后得到目标代码图1-12所示界面.使用菜单STEP或相应的命令按钮或使用快捷键F11可以单步执行程序,使用菜单STEP OVER或功能键F10可以以过程单步形式执行命令,所谓过程单步,是指把C语言中的一个函数作为一条语句来全速执行.按下F11键,可以看到源程序窗口的左边出现了一个黄色调试箭头,指向源程序的第一行.每按一次F11,即执行该箭头所指程序行,然后箭头指向下一行,当箭头指向"mDelay(1000);"行时,再次按下F11,会发现,箭头指向了延时子程序mDelay的第一行.不断按F11键,即可逐步执行延时子程序.如果mDelay程序有错误,可以通过单步执行来查找错误,但是如果mDelay程序已正确,每次进行程序调试都要反复执行这些程序行,会使得调试效率很低,为此可以在调试时使用F10来替代F11,在main函数中执行到mDelay(1000)时将该行作为一条语句快速执行完毕.Keil软件还提供了一些窗口,用以观察一些系统中重要的寄存器或变量的值,这也是很重要的调试方法.以下通过一个对延时程序的延迟时间的调整来对这些调试方法作一个简单的介绍.这个程序中用到了延时程序mDelay,如果使用汇编语言编程,每段程序的延迟时间可以非常精确地计算出来,而使用C语言编程,就没有办法事先计算了.为此,可以使用观察程序执行时间的方法了来解.进入调试状态后,窗口左侧是寄存器和一些重要的系统变量的窗口,其中有一项是sec,即统计从开始执行到目前为止用去的时间.按F10,以过程单步的形式执行程序,在执行到mDelay(1000)这一行之前停下,查看sec的值(把鼠标停在sec 后的数值上即可看到完整的数值),记下该数值,然后按下F10,执行完mDelay(1000)后再次观察sec值,如图1-13所示,这里前后两次观察到的值分别是:0.00040400和1.01442600, 其差值为1.014022s,如果将该值改为124可获得更接近于1s的数值,而当该值取123时所获得的延时值将小于1s,因此,最佳的取值应该是124.图1-12 51单片机实验仿真板1.6 C语言的一些特点通过上述的几个例子,可以得出一些结论:1,C程序是由函数构成的,一个C源程序至少包括一个函数,一个C源程序有且只有一个名为main()的函数,也可能包含其它函数,因此,函数是C程序的基本单位.主程序通过直接书写语句和调用其它函数来实现有关功能,这些其它函数可以是由C语言本身提供给我们的(如例3中的_crol_(…)函数),这样的函数称之为库函数,也可以是用户自己编写的(如例2,3中用的mDelay(…)函数),这样的函数称之为用户自定义函数.那么库函数和用户自定义函数有什么区别呢简单地说,任何使用Keil C语言的人,都可以直接调用C的库函数而不需要为这个函数写任何代码,只需要包含具有该函数说明的相应的头文件即可;而自定义函数则是完全个性化的,是用户根据自己需要而编写的.Keil C提供了100多个库函数供我们直接使用.2,一个函数由两部份组成:(1)函数的首部,即函数的第一行.包括函数名,函数类型,函数属性,函数参数(形参)名,参数类型.例如:void mDelay (unsigned int DelayTime)一个函数名后面必须跟一对圆括号,即便没有任何参数也是如此.(2)函数体,即函数首部下面的大括号"{}"内的部份.如果一个函数内有多个大括号,则最外层的一对"{}"为函数体的范围.函数体一般包括:声明部份:在这部份中定义所用到的变量,例1.2中unsigned char j.执行部份:由若干个语句组成.在某此情况下也可以没有声明部份,甚至即没有声明部份,也没有执行部份,如:void mDelay(){}这是一个空函数,什么也不干,但它是合法的.在编写程序时,可以利用空函数,比如主程序需要调用一个延时函数,可具体延时多少,怎么个延时法,暂时还不清楚,我们可以主程序的框架结构弄清,先编译通过,把架子搭起来再说,至于里面的细节,可以在以后慢慢地填,这时利用空函数,先写这么一个函数,这样在主程序中就可以调用它了.3,一个C语言程序,总是从main函数开始执行的,而不管物理位置上这个main()放在什么地方.例1.2中就是放在了最后,事实上这往往是最常用的一种方式.图1-13 观察sec确定延时时间4,主程序中的mDelay如果写成mdelay就会编译出错,即C语言区分大小写,这一点往往让初学者非常困惑,尤其是学过一门其它语言的人,有人喜欢,有人不喜欢,但不管怎样,你得遵守这一规定.5,C语言书写的格式自由,可以在一行写多个语句,也可以把一个语句写在多行.没有行号(但可以有标号),书写的缩进没有要求.但是建议读者自己按一定的规范来写,可以给自己带来方便.6,每个语句和资料定义的最后必须有一个分号,分号是C语句的必要组成部份.7,可以用/*…..*/的形式为C程序的任何一部份作注释,在"/*"开始后,一直到"*/"为止的中间的任何内容都被认为是注释,所以在书写特别是修改源程序时特别要注意,有时无意之中删掉一个"*/",结果,从这里开始一直要遇到下一个"*/"中的全部内容都被认为是注释了.原本好好的一个程序,编译已过通过了,稍作修改,一下出现了几十甚至上百个错误,初学C的人往往对此深感头痛,这时就要检查一下,是不是有这样的情况,如果有的话,赶紧把这个"*/"补上.特别地,Keil C也支持C++风格的注释,就是用"//"引导的后面的语句是注释,例:P1_0=!P1_0; //取反P1.0这种风格的注释,只对本行有效,所以不会出现上面的问题,而且书写比较方便,所以在只需要一行注释的时候,我们往往采用这种格式.但要注意,只有Keil C支持这种格式,早期的Franklin C以及PC机上用的TC都不支持这种格式的注释,用上这种注释,编译时通不过,会报告编译错误.第2章分支程序设计第一部分课程学习了如何建立Keil C的编程环境,并了解了一些C语言的基础知识,这一部分将通过一个键控流水灯程序的分析来学习分支程序设计.2.1 程序功能与实现硬件电路描述如下:89S52单片机的P1口接有8个LED,当某一端口输出为"0"时,相应的LED点亮,P3.2,P3.3,P3.4,P3.5分别接有四个按钮K1~K4,按下按钮时,相应引脚被接地.现要求编写可键控的流水灯程序,当K1按下时,开始流动,K2按下时停止流动,全部灯灭,K3使灯由上往下流动,K4使灯由下往上流动.下面首先给出程序,然后再进行分析.例2-1:键控流水灯的程序#include "reg51.h"#include "intrins.h"#define uchar unsigned charvoid mDelay(unsigned int DelayTime){ unsigned int j=0;for(;DelayTime>0;DelayTime--){ for(j=0;j2的结果为真,而3<2的结果为假.C语言一共提供了6种关系运算符:"<"(小于),""(大于),">=(大于等于)","=="(等于)和"!="(不等于).用关系运算符将两个表达式连接起来的式子,称为关系表达式.例:a>b,a+b>b+c,(a=3)>=(b=5)等都是合法的关系表达式.关系表达式的值只有两种可能,即"真"和"假".在C语言中,没有专门的逻辑型变量,如果运算的结果是"真",用数值"1"表示,而运算的结果是"假"则用数值"0"表示.如式子:x1=3>2的结果是x1等于1,原因是3>2的结果是"真",即其结果为1,该结果被"="号赋给了x1,这里须注意,"="不是等于之意(C语言中等于用"=="表示),而是赋值号,即将该号后面的值赋给该号前面的变量,所以最终结果是x1等于1.式子:x2=30;DelayTime--)单片机的C语言轻松入门25{ for(j=0;j<125;j++){;}}}在main函数中用mDelay(1000)的形式调用该函数时,延时时间约为1s.如果将该函数中的unsigned int j改为unsigned char j,其他任何地方都不作更改,重新编译,连接后,可以发现延迟时间变为约0.38s.int和char是C语言中的两种不同的数据类型,可见程序中仅改变数据类型就会得到不同的结果.那么int和char型的数据究竟有什么区别呢3.3.1 整型数据1.整型数据在内存中的存放形式如果定义了一个int型变量i:int i=10; /*定义i为整型变量,并将10赋给该变量*/在Keil C中规定使用二个字节表示int型数据,因此,变量i在内存中的实际占用情况如下:0000,0000,0000,1010也就是整型数据总是用2个字节存放,不足部分用0补齐.事实上,数据是以补码的形式存在的.一个正数的补码和其原码的形式是相同的.如果数值是负的,补码的形式就不一样了.求负数的补码的方法是:将该数的绝对值的二进制形式取反加1.例如,-10,第一步取-10的绝对值10,其二进制编码是1010,由于是整型数占。
单片机课程设计-基于STC89C52RC单片机的音乐播放器设计

单⽚机课程设计-基于STC89C52RC单⽚机的⾳乐播放器设计基于STC89C52RC单⽚机的⾳乐播放器设计⼀、设计要实现的功能(1)利⽤I/O⼝产⽣⼀定频率的⽅波,驱动蜂鸣器,发出不同的⾳调,从⽽演奏歌曲(总共九⾸)。
(2)采⽤共阳七段数码管显⽰当前播放歌曲的序号。
(3)可以通过按键实现暂停、继续、上⼀⾸、下⼀⾸以及复位等基本操作。
⼆、设计所需基础知识储备1.要产⽣⾳频脉冲,只要计算某⼀⾳频的周期,然后将此周期处以2,即为半周期的时间。
利⽤定时器记时这个个半周期时间,每当记时到后就输出脉冲的I/O反相,然后重复记时此半周期的时间再对I/O 反相,就可在I/O脚上得到此频率的脉冲。
2.利⽤8051的内部定时器使其⼯作在计数器模式MODE1下,改变计数值TH0及TL0以产⽣不同频率的⽅法,例如频率为523HZ,其周期T=1/523=1912us,因此只要令计数器记时956us/1us=956,在每次计数956次时将I/O反相,就可得到中⾳DO(523HZ)。
计数脉冲值与频率的关系公式如下:N=Fi/2/Fr,其中N是计数值,Fi是8051内部频率,⼀般⽤的是1MHZ(因为8051内部记时⼀次时间为1us),Fr为要产⽣的频率。
3.计数初值的求法如下:T=65536-N=65536-Fi/2/Fr例如:求低⾳DO(261HZ)中⾳DO(523HZ)⾼⾳DO(1046HZ)的计数值。
T=65536-N=65536- Fi/2/Fr=65536-1000000/2/Fr=65536-50000/Fr低⾳DO的T=65536-50000/262=63267中⾳DO的T=65536-50000/523=64580⾼⾳DO的T=65536-50000/1047=65059三、硬件设计本次设计⽤到的主要器件有STC89C52,七段共阳数码管,⽆源蜂鸣器(详细列表在后⾯列出)。
硬件原理图也在后⾯列出。
四、功能说明(1)硬件电路中P1.0⼝为⾳频输出端⼝。
单片机蜂鸣器音乐

单片机蜂鸣器音乐单片机在我们的生活中无处不在,它被广泛地应用在各种电子产品中,为我们的生活带来了便利。
今天,我要向大家介绍的是一种基于单片机的蜂鸣器音乐播放器。
一、硬件部分1、单片机:我们选用的是AT89C51单片机,它具有低功耗、高性能的特点,非常适合用于音乐播放器。
2、蜂鸣器:蜂鸣器是用来发出声音的,我们将其连接在单片机的输出口上。
3、存储芯片:为了能够播放存储在芯片中的音乐,我们需要将音乐以某种格式存储在芯片中。
常用的存储芯片有EEPROM和Flash芯片。
4、按键:为了能够选择播放不同的音乐,我们需要添加一个按键。
二、软件部分1、音乐编码:我们需要将音乐转换成二进制编码,这样才能被单片机读取并播放。
常用的音乐编码格式有MIDI、WAV等。
2、音乐播放:当按下按键时,单片机读取存储芯片中的音乐数据,并通过蜂鸣器播放。
3、音乐选择:通过按键可以选择不同的音乐进行播放。
4、音量控制:我们可以通过编程来控制蜂鸣器的音量大小。
三、调试与测试1、硬件调试:检查连接是否正确,确保没有短路或断路的情况。
2、软件调试:将程序下载到单片机中进行调试,确保能够正常播放音乐。
3、综合测试:将所有硬件和软件都连接起来进行测试,确保能够正常工作。
四、总结与展望通过本次实验,我们成功地制作了一个基于单片机的蜂鸣器音乐播放器。
它具有简单、实用的特点,可以用来播放存储在芯片中的音乐。
未来,我们可以进一步扩展其功能,例如添加更多的按键来选择不同的音乐、添加显示屏来显示歌曲名称等。
我们也可以将其应用到其他领域,例如智能家居、智能安防等。
单片机蜂鸣器唱歌程序在许多应用中,单片机蜂鸣器经常被用来发出声音或音乐。
下面是一个使用单片机蜂鸣器唱歌的程序示例。
我们需要确定单片机和蜂鸣器的连接方式。
通常,单片机具有一个内置的蜂鸣器输出引脚,可以将蜂鸣器连接到这个引脚上。
在以下的示例中,我们将假设单片机具有一个内置蜂鸣器输出引脚,并将其连接到P1.0端口上。
基于AT89C52单片机的音乐播放器(含电路图)

山东英才学院毕业设计(论文)题目:基于51单片机的儿童早教故事机的设计学生姓名孙东帅学院机械工程及其自动化学院专业电气工程及其自动化学号************指导教师高嵩年月日毕业设计(论文)原创性声明本人郑重声明:所提交的毕业设计(论文),是本人在导师指导下,独立进行研究工作所取得的成果。
除文中已注明引用的内容外,本毕业设计(论文)不包含任何其他个人或集体已经发表或撰写过的作品成果。
对本研究做出过重要贡献的个人和集体,均已在文中以明确方式标明并表示了谢意。
论文作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保障、使用学位论文的规定,同意学校保留并向有关学位论文管理部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权省级优秀学士学位论文评选机构将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
本学位论文属于1、保密□,在_____年解密后适用本授权书。
2、不保密□。
(请在以上相应方框内打“√”)论文作者签名:日期:年月日导师签名:日期:年月日目录摘要 (I)Abstract ...................................................................................................................................................... I I 1 绪论. (1)1.1我国儿童早教机发展现状及发展趋势 (1)1.2国外现状 (2)1.3 儿童早教故事机的发展趋势 (2)1.4课题研究的目的和意义 (2)2 方案比较 (3)2.1 主控单元的选择 (3)2.2 液晶显示模块的选择 (3)2.3 语音模块的选择 (4)3 系统硬件设计 (6)3.1 总体方案设计 (6)3.2 主控单元模块 (6)3.3 液晶显示屏 (7)3.4 80C52单片机的的封装和引脚 (8)3.5 红外遥控器 (9)3.6 独立键盘 (9)3.7 电源 (9)3.8 语音模块 (10)4 软件设计 (12)4.1 音乐播放主控流程图 (12)4.2 音乐播放子程序流程图 (14)4.3 LCD1602显示子程序流程图 (15)4.4 语音模块工作流程图 (15)5 实物操作 (17)5.1.开机未播放音乐下的状态 (17)5.2工作状态下的单片机状态 (17)5.3 按键功能测试 (18)5.4 红外遥控器功能测试 (19)结论 (20)参考文献 (21)致谢 (22)附录A (23)附录B (36)基于51单片机的儿童早教故事机的设计摘要:当今社会,父母对孩子的早期教育相当重视,如何更完善、更系统的把知识教授给孩子,儿童早教故事机就是一个很好的选择。
单片机C语言编程实例

单片机C语言编程实例前言INTEL公司的MCS-51单片机是目前在我国应用得最广泛的单片机之一.随着单片机应用技术的不断发展,许多公司纷纷以51单片机为内核,开发出与其兼容的多种芯片,从而扩充和扩展了其品种和应用领域.C语言已成为当前举世公认的高效简洁而又贴近硬件的编程语言之—。
将C语言向单片机上的移植,始于20世纪80年代的中后期。
经过十几年的努力,C语言终于成为专业化单片机上的实用高级语言。
用C语言编写的8051单片机的软件,可以大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完善的系统。
因此,不管是对于新进入这一领域的开发者来说,还是对于有多年单片机开发经验的人来说,学习单片机的C语言编程技术都是十分必要的..C语言是具有结构化.模块化编译的通用计算机语言,是国际上应用最广。
最多的计算语言之一。
C51是在通用C语言的基础上开发出的专门用于51系列单片机编程的C语言。
与汇编语言相比,C51在功能上.结构上以及可读性。
可移植性。
可维护性等方面都有非常明显的优势.目前最先进、功能最强大、国内用户最多的C51编译器是Keil Soft ware公司推出的KeilC51.第一章单片机C语言入门1。
1建立您的第一个C项目使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码,这样单片机才能执行编写好的程序。
KEIL uVISION2是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持PLM、汇编和C语言的程序设计,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能.因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。
以上简单介绍了KEIL51软件,要使用KEIL51软件,必需先要安装它。
KEIL51是一个商业的软件,对于我们这些普通爱好者可以到KEIL中国代理周立功公司的网站上下载一份能编译2K的DEMO版软件,基本可以满足一般的个人学习和小型应用的开发。
单片机蜂鸣器播放音乐代码生日快乐两只蝴蝶祝你平安

单片机蜂鸣器播放音乐代码生日快乐两只蝴蝶祝你平安/*生日快乐歌曲*/#include<reg51.h>#defineuintunsignedint#defineucharunsignedcharsbitbeep=P1^5;ucharcodeSONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,212,212,106,126,159,169,190,119,119,126,159,142,159,0};ucharcodeSONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0};//延时voidDelayMS(uintx){uchart;while(x--)for(t=0;t<120;t++);}voidPlayMusic(){uinti=0,j,k;while(SONG_LONG[i]!=0||SONG_TONE[i]!=0){//播放各个音符,SONG_LONG为拍子长度for(j=0;j<SONG_LONG[i]*20;j++){beep=~beep;//SONG_TONE延时表决定了每个音符的频率for(k=0;k<SONG_TONE[i]/3;k++);}DelayMS(10);i++;}}voidmain(){beep=0;while(1){PlayMusic();//播放生日快乐DelayMS(500);//播放完后暂停一段时间}}两只蝴蝶:#include<reg51.h>//这是单片机音乐代码生成器生成的代码#defineucharunsignedcharsbitbeepIO=P1^5;//输出为P1.5可以修改成其它IO口ucharcodeT[49][2]={{0,0},{0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{ 0xFB,0x03},{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B},{0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB},{0xFD,0x08},{0xFD,0x33},{0xFD,0x5B},{ 0xFD,0x81},{0xFD,0xA5},{0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05},{0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE,0x84},{0xFE,0x99},{0xFE,0xAD},{ 0xFE,0xC0},{0xFE,0x02},{0xFE,0xE3},{0xFE,0xF3},{0xFF,0x02},{0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36},{0xFF,0x42},{0xFF,0x4C},{0xFF,0x56},{ 0xFF,0x60},{0xFF,0x69},{0xFF,0x71},{0xFF,0x79},{0xFF,0x81}};ucharcodemusic[][2]={{0,4},{23,4},{21,4},{23,16},{23,4},{21,4},{23,4},{21,4},{19,16},{16,4},{19,4},{21,8},{21,4} ,{23,4},{21,4},{19,4},{16,4},{19,4},{14,24},{23,4},{21,4},{23,16},{23,4},{21,4},{23,4},{21,4},{19,24},{16,4},{19,4},{21,8},{21,4} ,{23,4},{21,4},{19,4},{16,4},{19,4},{21,24},{23,4},{21,4},{23,16},{23,4},{21,4},{23,4},{21,4},{19,16},{16,4},{19,4},{21,8},{21,4} ,{23,4},{21,4},{19,4},{16,4},{19,4},{14,24},{23,4},{26,4},{26,16},{26,4},{28,4},{26,4},{23,24},{21,4},{23,4},{21,8},{21,4},{23,4} ,{21,4},{19,4},{16,4},{16,2},{19,2},{19,24},{0,20},{26,4},{26,4},{28,4},{31,4},{30,4},{30,4},{28,4},{23,4},{21,4},{21,4},{23,16},{0,4},{ 23,4},{23,4},{26,4},{28,8},{28,12},{16,4},{23,4},{21,4},{21,24},{23,4},{26,4},{26,4},{23,4},{26,8},{0,4},{31,8},{30,4},{28,4},{30,4},{23,8},{ 0,4},{28,4},{28,4},{30,4},{28,4},{26,4},{23,4},{21,8},{23,4},{21,4},{23,4},{26,16}, {0xFF,0xFF}};voiddelay(ucharp){uchari,j;for(;p>0;p--)for(i=181;i>0;i--)for(j=181;j>0;j--);}voidpause(){uchari,j;for(i=150;i>0;i--)for(j=150;j>0;j--);}voidT0_int()interrupt1{beepIO=!beepIO;TH0=T[m][0];TL0=T[m][1];}voidmain(){uchari=0;while(1){m=music[i][0];n=music[i][1];if(m==0x00){TR0=0;delay(n);i++;}elseif(m==0xFF){TR0=0;delay(30);i=0;}elseif(m==music[i+1][0]){TR0=1;delay(n);TR0=0;pause();i++;}else{TR0=1;delay(n);i++;}}}祝你平安:#include"reg52.h"unsignedcharCount;sbit_Speak=P1^5;unsignedcharcodeSONG[]={//祝你平安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};voidTime0_Init(){TMOD=0x01;IE=0x82;TH0=0xD8;TL0=0xEF;//12MZ晶振,10ms}voidTime0_Int()interrupt1{TH0=0xD8;TL0=0xEF;Count++;//长度加1}功能:1MS延时子程序-------------------------------------------------*/ voidDelay_xMs(unsignedintx){unsignedinti,j;for(i=0;i<x;i++){for(j=0;j<3;j++);}}voidPlay_Song(unsignedchari){unsignedcharTemp1,Temp2;unsignedintAddr;Count=0;//中断计数器清0Addr=i*217;while(1){Temp1=SONG[Addr++];if(Temp1==0xFF)//休止符{TR0=0;Delay_xMs(100);}elseif(Temp1==0x00)//歌曲结束符{return;}else{Temp2=SONG[Addr++];TR0=1;while(1){_Speak=~_Speak;Delay_xMs(Temp1);if(Temp2==Count){Count=0;break;}}}}}功能:主程序-------------------------------------------------*/ voidmain(){Time0_Init();//定时器0中断初始化while(1){Play_Song(0);//播放}}。
mcu 单片机c语言经典程序-实例

/*下面八行用于控制LED的两次全亮全灭*/
P0 = 0x00;
Delay(25);
P0 = 0xff;
Delay(25);
P0 = 0x00;
Delay(25);
P0 = 0xff;
Delay(25);
Delay(200); //延时两秒
}
}
实验3-流水灯A
/********************************************************************
Delay(20); //Delay(del)中的数为延时的时间参数,延时时间为10ms * del.
Show_LED = 0;
Delay(20);
}
}
试验2-闪烁灯2
/********************************************************************
temp = temp | 0x01;
P0 = temp;//把值赋给P0口
Delay(15);//延时0.15秒
}
}
}
实验5-数码管显示
/********************************************************************
*文件名:数码管显示.c
{
temp = 0x7f;
for(i=0; i<7; i++)
{
temp = temp >> 1;//值右移一位
temp = temp | 0x80;
P0 = temp;//把值赋给P0口
Delay(15);//延时0.15秒
单片机音乐播放器应用 实现简单的音乐播放功能

单片机音乐播放器应用实现简单的音乐播放功能单片机音乐播放器应用音乐是人们生活中不可或缺的一部分,而在现代科技的不断发展下,单片机音乐播放器应用已经成为许多人追求的目标。
本文将介绍如何实现一个简单的单片机音乐播放器功能,让您能够轻松享受音乐的魅力。
一、硬件准备在开始之前,我们需要准备一些硬件设备,以确保音乐播放器能够正常工作。
首先,我们需要一块单片机开发板,例如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(); // 播放上一首音乐}}```通过上述代码,我们可以实现简单的音乐播放功能。
单片机蜂鸣器音乐代码

单片机蜂鸣器音乐代码在单片机的应用中,蜂鸣器是一个常用的音频输出设备。
它可以通过产生不同频率的声音来实现音乐播放、提醒和警报等功能。
本文将介绍如何使用单片机控制蜂鸣器播放音乐,并提供一个简单的音乐代码示例。
首先,让我们了解一下单片机蜂鸣器的工作原理。
蜂鸣器实际上是一个压电陶瓷元件,当电压作用于其上时,它会振动产生声音。
为了产生不同的音调,我们需要控制蜂鸣器的频率和占空比。
单片机通过IO口与蜂鸣器连接,并使用定时器来产生所需的频率。
具体的代码实现将依赖于使用的单片机型号和开发环境。
在这里,我们将以C语言为例,并基于51单片机进行说明。
以下是一个简单的单片机蜂鸣器音乐代码示例,演奏的是《欢乐颂》的前几个音符:```c#include <reg52.h>// 定义各个音符的频率#define C4 4778#define D4 4257#define E4 3792#define F4 3579#define G4 3189#define A4 2841#define B4 2531#define C5 2388// 延时函数void delay(unsigned int count){while(count--);}// 发声函数void beep(unsigned int frequency, unsigned int duration) {unsigned int i;unsigned long time;time = 11059200 / frequency; time >>= 1;for(i = 0; i < duration; i++) {P1 = 0x08;delay(time);P1 = 0x00;delay(time);}}// 主函数void main(){// 设置定时器TMOD = 0x01;TH0 = (65536 - 50000) / 256; TL0 = (65536 - 50000) % 256; TR0 = 1;// 播放音乐beep(C4, 100);beep(D4, 100);beep(E4, 100);beep(F4, 100);beep(G4, 100);beep(A4, 100);beep(B4, 100);beep(C5, 100);while(1);}```以上代码中,我们首先定义了各个音符的频率,这些频率是通过实验测量得到的,具体数值可能因蜂鸣器型号、电源电压等因素而略有差异。
单片机音乐播放c语言程序

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);//键盘最后组合码值
基于TA98C51单片机的自动音乐播放器 (2)

摘要为方便人们的日常生活,优化学校、机关等单位的计时系统,采用以单片机为基础设计了一种的自动音乐播放器。
本设计利用单片机89C58RD+的定时和计数功能,来完成时间的显示和定时功能。
并且,通过对定时器初值的设定来产生不同频率的声音,利用定时器中断来完成对音乐节拍长度的控制。
通过LM386N1音频功率放大器,将单片机输出的信号放大,再通过喇叭播放乐曲。
通过MAX232型芯片,可以转换PC机上的电压和单片机的电源电压,再通过串口接入PC机,这样就能从PC机上将用C语言编写的程序下载到单片机上。
最后可在数码管上显示时间,当定时时间到后,喇叭自动播放一段连续的音乐。
此设计摆脱了传统闹钟的刺耳声音,取而代之的是美妙的音乐,能为人们的日常生活提供准确的计时,且成本低廉,值得推广。
关键词:单片机;自动音乐播放;音频转换;时间显示;LM386N1音频功率放大器The design of automatic music player based on monolithic integrated circuit AbstractIn order to facilitate people's daily life, optimizes schools’, institutions’ timing system, used has designed one kind of automatic music player which based on monolithic integrated circuit. This design fixed time and counts the function using monolithic integrated circuit 89C58RD+, completes the time the demonstration and fixed time the function. And, Through hypothesis starting value of timer, product the different frequency sound. Severs using the timer completesthe control of music metrelength.Through LM386N1 audio power amplifier, enlarges signal which themonolithic integrated circuit outputs,then broadcast music from loudspeaker. Through MAX232 chip,can transform PC machine on the voltage and the monolithic integrated circuit supply voltage.And then,turns on the computer though String mouth,then it can download procedure which compiles with the C language to monolithic integrated circuit from computer.At last,it can demonstrates the time on the digital tube.When time to after fixed time, the loudspeaker automatically broadcasts section of continual musics. This design get rid of the traditional alarm clock’s grating sound, displaces is the wonderful music,can provides the accurate time for people's daily life.The design cost very inexpensive,it is worth promoting.Key word:Monolithic integrated circuit; Automatic music broadcast; Audio frequency transformation; Time demonstration; LM386N1 audio power amplifier目录论文总页数:页引言................................................................. (1)1 设计任务 (2)2 软件设计2.1 音乐编程原理及流程图 ...............................................2.1.1 声音的产生 ......................................................2.1.2 音频转换原理 ....................................................2.1.3 音频转换流程图 ..............................................2.2 时间显示程序设计..............................................2.2.1 时间显示模块..............................................2.2.2 时钟流程图 ..............................................3 硬件电路的设计 (2)3.1 硬件流程模块(此节作为第1节---后面几节就围绕它来写,并且要写“连贯”)3.2 主要模块电路的设计..........................3.2.1 89C58RD+型单片机介绍.........................................3.2.2 LM386N及外围电路的设计............. ...............3.2.3 串行通信和MAX232芯片........................................... 3.2 4 AT89C52的定时/计数器概述.........................................3.2 5 LED显示原理...............................................4 KEIL仿真软件及Protel 99 SE的应用......................................4.1 KEIL51的应用..........................................................4.2 Protel 99 SE的应用.....................................................4.3 PCB板制作.............................................................5 仿真及调试过程..........................................................5.1 硬件调试过程5.2 软件仿真及调试过程6 结果分析................................................................结论..................................................................... 参考文献....................................................................... 致谢.................................................................. (29)声明.................................................................. (30)附录.................................................................. (16)基于单片机的自动音乐播放器的设计引言单片机,更确切地说应称为作微控制器,是20世纪70年代中期发展起来的一种面向控制的大规模集成电路模块,其特点是功能强、体积小、可靠性高、价格低廉。
音乐播放器实验报告

一、实验项目名称基于单片机的音乐播放器二、实验目的Ⅰ设计方案设计一个基于AT89C51系列单片机的音乐盒,利用按键控制切换演奏出不同的音乐。
蜂鸣器发出某个音调,与之对应的LED灯亮起。
使用两个按键,一个用来切换歌曲,另一个切换LED的变化花样。
Ⅱ研究内容①电路有两种模式:演奏音乐模式和花样灯模式A 演奏音乐模式:演奏完整的一首歌曲,LED随着音乐变化;B 花样灯模式:LED变化出各种花样,蜂鸣器随着发出“滴滴”声;②按下按键1进入演奏音乐模式,再按切换歌曲,共两首歌曲;按下按键2进入花样灯模式,再按切换LED花样,共三种花样。
Ⅲ总体方案图a组成框图:音乐盒的系统结构以AT89C51单片机位控制核心,加上2个按键、时钟复位电路、蜂鸣器、LED模块组成。
单片机负责接收按键的输入,根据输入控制音乐播放曲目和音乐花样灯的显示样式以及蜂鸣器发音。
系统组成框图如下所示:b功能结构图:Key1负责切换播放歌曲,共两首。
分别是祝你生日快乐和寂寞沙洲冷;Key2负责切换LED显示花样,共3种:顺序显示,由两边向中间移动然后向两边移动,循环显示。
三、实验器材Windows7 操作系统Proteus仿真软件keil4软件AT89C51单片机共阴极数码管开关电容晶振电阻发光二极管蜂鸣器四、实验要求(1)以单片机为主控处理器,用蜂鸣器播放歌曲;(2)系统要求有选择上一首、下一曲功能;(3)两个按键,可在播放和显示花样中进行切换;(4)用一个键控制花样类型的显示功能;(5)用LED灯闪烁“伴奏”。
五、实训基本原理(附原理图、源程序清单)1 硬件设计①LED显示电路设计与原理LED显示电路是由8个LED发光二极管组成,连接方式是共阳极,LED接到单片机的P1口,若是低电平,可使LED亮。
发光二极管的亮灭是由内部程序控制的,8个LED发光二极管分别对应不同的音阶,所以LED会随着音阶的变化按规律亮灭。
②硬件电路图及其功能介绍1)电路中用P3.2、P3.3 控制键;2)P1.0~P1.7控制LED;3)P2.3控制蜂鸣器;4)电路为12MHZ晶振频率工作,起振电路中C1、C2均为30PF。
单片机音乐卡农C程序

#include <reg52.h>sbit speaker = P1^1;unsigned char timer0h, timer0l, time;code unsigned char FREQH[] = {0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8, //低音12345670xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, //中音12345670xFC, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, //高音12345670xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF}; //超高音1234567// 频率-半周期数据表低八位code unsigned char FREQL[] = {0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6, //低音12345670x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, //中音12345670x8F, 0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D, //高音1 2345670x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16}; //超高音1234567//1/4拍为单位code unsigned char sszymmh[] = {5,3,2,3,3,1,4,3,1,5,3,2,3,3,1,4,3,1,5,3,1,5,2,1,6,2,1,7,2,1,1,3,1,2,3,1,3,3,1,4,3,1,3,3,2,1,3,1,2,3,1,3,3,2,3,2,1,4,2,1,5,2,1,6,2,1,5,2,1,4,2,1,5,2,1,3,2,1,4,2,1,5,2,1,4,2,2,6,2,1,5,2,1,4,2,2,3,2,1,2,2,1,3,2,1,2,2,1,1,2,1,2,2,1,3,2,1,4,2,1,5,2,1,6,2,1,4,2,2,6,2,1,5,2,1,6,2,1,7,2,1,1,3,1,5,2,1,6,2,1,7,2,1,1,3,1,2,3,1,3,3,1,4,3,1,5,3,1,3,3,2,1,3,1,2,3,1,3,3,2,2,3,1,1,3,1,2,3,1,7,2,1,1,3,1,2,3,1,3,3,1,2,3,1,1,3,1,7,2,1,1,3,2,6,2,1,7,2,1,1,3,2,1,2,1,2,2,1,3,2,1,4,2,1,3,2,1,2,2,1,3,2,1,1,3,1,7,2,1,1,3,1,6,2,2,0,0,0};//--------------------------------------void t0int() interrupt 1 //T0中断程序,控制发音的音调{TR0 = 0; //先关闭T0speaker = !speaker; //输出方波, 发音TH0 = timer0h; //下次的中断时间, 这个时间, 控制音调高低TL0 = timer0l;TR0 = 1; //启动T0}//--------------------------------------void delay(unsigned char t) //延时程序,控制发音的时间长度以1/4拍为单位{unsigned char t1;unsigned long t2;for(t1 = 0; t1 < t; t1++)for(t2 = 0; t2 < 4000; t2++); //延时期间, 可进入T0中断去发音TR0 = 0; //关闭T0, 停止发音}//--------------------------------------void song() //演奏一个音符{TH0 = timer0h; //控制音调TL0 = timer0l;TR0 = 1; //启动T0, 由T0输出方波去发音delay(time); //控制时间长度}//--------------------------------------void main(void){unsigned char k, i;TMOD = 1; //置T0定时工作方式1ET0 = 1; //开T0中断EA = 1; //开CPU中断while(1) {i = 0;time = 1;while(time) {k = sszymmh[i] + 7 * sszymmh[i + 1] - 1; //第i个是音符, 第i+1个是第几个八度timer0h = FREQH[k]; //从数据表中读出频率数值timer0l = FREQL[k]; //实际上, 是定时的时间长度time = sszymmh[i + 2]; //读出时间长度数值i += 3;song(); //发出一个音符} } }。
单片机C语言程序80c52

1.0//#include<reg52.h>sbit dula=P2^6;sbit dula=P2^7;void main(){wela=1;P0=0xea;wela=0;dula=1;P0=0x3f;dula=0;while(1)}1.2//#include<reg52.h>sbit D2=P1^2;unsigned int a;void main(){D2=0;/* for(a=0;a<=10000;a++){};D2=1;for(a=0;a<=10000;a++){};*/ }1.3//#include<reg52.h>void main(){P1=0xfd;}2.1//#include<reg52.h>sbit p1_1=P1^0unsigned int avoid main(){while(1){a=51000;p1_1=0;while(a--);a=51000;while(a--);p1_1=1;a=51000;while(a--);a=51000;while(a--);}}2.2//#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit D1=P1^0;//void delay();void delay(uint);void main(){while(1){D1=0;delay(100);D1=1;delay(100);}}/*void delay(){uint x,y;for(x=100;x>0;x--)for(y=600;y>0;y--);}*/void delay(uint z){uint x;uchar y;for(x=z;x>0;x--)for(y=20;y>0;y--);}2.3//#include<reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charuchar temp,num,num1;sbit beep=P2^3;void delay(uint z);void main(){temp=0xfe;while(1){for(num1=0;num1<3;num1++){for(num=0;num<8;num++){P1=temp;beep=0;delay(100);temp=_crol_(temp,1);P1=0xff;beep=1;delay(100);}}for(num1=0;num1<3;num1++){for(num=0;num<8;num++){P1=temp;beep=0;delay(100);temp=_cror_(temp,1);P1=0xff;beep=1;delay(100);}}while(1);}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}2.// #include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charuchar temp;void delay(uint z);void main(){temp=0xfe;P1=temp;while(1){delay(1000); temp=_corl_(temp,1);P1=temp;}}void delay(uint z){uint x,y;for(x=z;x>0;x--) for(y=110;y>0;y--);}3.1//#include<reg52.h>sbit dula=P2^6;sbit wela=P2^7;void main(){wela=1;//打开位选的开关P0=0xc0;//c为12(1100),0(0000),表示六盏灯都亮wela=0;//关闭位选dula=1;//打开段选的开关P0=0x06;//表示的是数码管亮的数是1dula=0;//关闭段选的开关while(1);}3.2//#include<reg52.h> #define uint unsigned int //宏定义#define uchar unsigned char //宏定义sbit dula=P2^6;sbit wela=P2^7;uchar num;//定义变量uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//code为编码表,定义一个数组有16位数void delay(uint z);//定义一个含形参的延迟函数void main(){wela=1;//11101010P0=0xea;//e为14(1110),a为10(1010);表示第1、3、5灯亮,总共6个灯wela=0;while(1){for(num=0;num<16;num++){dula=1;P0=table[num];//每一盏灯就在0~f之间循环dula=0;delay(1000);//表示延时的时间,可以进行调试}}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}3.3//#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit dula=P2^6;sbit wela=P2^7;sbit d1=P1^0;uchar num;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay(uint z);void main(){EA=1;//开总中断EX0=1;//开外部中断0//IT0=1;TCON=0x01;//表示选择的是下降沿有效wela=1;//11101010P0=0xea;wela=0;while(1){for(num=0;num<16;num++){d1=1;dula=1;P0=table[num];dula=0;delay(1000);}}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void exter0() interrupt 0{d1=0;}3.4//#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit dula=P2^6;sbit wela=P2^7;sbit d1=P1^0;uchar num,num1;tt;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay(uint z);void main(){num=0;tt=0;TMOD=0x11;//设置定时器0为工作方式1TH0=(65536-10000)/256;//TH0表示定时/计数器0的寄存器的高8位,10000表示的是当定时为10毫秒时TL0=(65536-10000)%256;TH1=(65536-20000)/256;TL1=(65536-20000)%256; // EA=1;//开总中断ET0=1;//开定时器0中断ET1=1;TR0=1;//启动定时器0TR1=1;wela=1;//11101010P0=0xea;wela=0;dula=1;P0=0x3f;//控制从0开始计数dula=0;while(1){if(num1==25){num1=0;P1=~P1;}if(tt==100){tt=0;num++;if(num==16)num=0;dula=1;P0=table[num];dula=0;}}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void time0() interrupt 1{TH0=(65536-10000)/256;TL0=(65536-10000)%256;tt++;}void time1() interrupt 3{TH1=(65536-20000)/256;TL1=(65536-20000)%256;num1++;}3.// #include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar codetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x0 7,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71} sbit wela=P2^7;sbit dula=P2^6;sbit d1=P1^0;void delay(uint z);uchar num;void main(){EA=1;EX0=1; TCON=0x01;// 表示选择的是下降沿有效wela=1;P0=0xc0;wela=0;//一开始就把所有的数码管打开while(1){for(num=0;num<16;num++){ d1=1;dula=1;P0=table[num];dula=0;delay(1000)//延时1s}}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void exter 0() interrupt 0{d1=0;}4.0//#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charvoid delay(uint z);//声明,要调用该子函数uchar temp;void main(){temp=0xfe;P1=temp;while(1){delay(1000)//以1000ms即1s钟移动temp=_corl_(temp,1);P1=temp;//延时,左移,赋值}} void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);//大约是1ms 的时间}4.1//#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charuchar temp,aa,num;sbit dula=P2^6;sbit wela=P2^7;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay(uint z);void main(){num=0;aa=0;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;temp=0xfe;P1=temp;dula=1;P0=table[0];dula=0;wela=1;P0=0xc0;wela=0;while(1){delay(1000);temp=_crol_(temp,1);P1=temp;/* if(aa==40){aa=0;num++;if(num==16)num=0;dula=1;P0=table[num];dula=0;} */}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;aa++;if(aa==40){aa=0;num++;if(num==16)num=0;dula=1;P0=table[num];dula=0;}}4.2//#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charuchar temp,aa,numdu,numwe;sbit dula=P2^6;sbit wela=P2^7;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};uchar code tablewe[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//void delay(uint z);void main(){numdu=0;numwe=0;aa=0;TMOD=0x01;//选取工作方式1TH0=(65536-5000)/256;TL0=(65536-5000)%256;EA=1;ET0=1;TR0=1;while(1){// delay(1000);// temp=_crol_(temp,1);// P1=temp;if(aa==1){aa=0;//将aa清零numdu++;if(numdu==7)numdu=1;//将numdu清零dula=1;P0=table[numdu];dula=0;wela=1;P0=tablewe[numwe];wela=0;numwe++;if(numwe==6)numwe=0;//将numwe清零}}}/*void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}*/void timer0() interrupt 1{TH0=(65536-5000)/256;TL0=(65536-5000)%256;aa++;}4,3//#include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar temp,aa,bai,shi,ge;sbit dula=P2^6;sbit wela=P2^7;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void display(uchar bai,uchar shi,uchar ge);void delay(uint z);void init();void main(){init();//初始化子程序while(1){if(aa==20){aa=0;//清零temp++;if(temp==100){temp=0;}bai=temp/100;shi=temp%100/10;ge=temp%10;}display(bai,shi,ge);}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void display(uchar bai,uchar shi,uchar ge) {dula=1;P0=table[bai];dula=0;P0=0xff;//消影wela=1;P0=0xfe;wela=0;delay(1);dula=1;P0=table[shi];dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delay(1);dula=1;P0=table[ge];dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delay(1);}void init()//初始化函数{wela=0;dula=0;temp=0;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1; }void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;aa++;}4.4//#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit dula=P2^6;sbit wela=P2^7;uchar codetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x0 7,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71} uchar numdu,temp,bai,shi,ge;void delay(uint z);void display(uchar bai,uchar shi,uchar ge);void main(){ temp=125;numdu=0;bai=temp/100;shi=temp%100/10;ge=temp%10;while(1){display(bai,shi,ge);}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--)}void display(uchar bai,uchar shi,uchar ge){dula=1;P0=table[bai];dula=0;wela=1;P0=0xfe;wela=0;delay(5);dula=1;P0=table[shi];dula=0;wela=1;P0=0xfd;wela=0;delay(5);dula=1;P0=table[ge];dula=0;wela=1;P0=0xfb;wela=0;delay(5);//以5ms亮一次}4.5//#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit dula=P2^6;sbit wela=P2^7;#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit dula=P2^6;sbit wela=P2^7;uchar codetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x0 7,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71} uchar numdu,temp,bai,shi,ge;void delay(uint z);void display(uchar bai,uchar shi,uchar ge);void main(){ temp=125;numdu=0;bai=temp/100;shi=temp%100/10;ge=temp%10;while(1){display(bai,shi,ge);}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--)}void display(uchar bai,uchar shi,uchar ge){dula=1;P0=table[bai];dula=0;wela=1;P0=0xfe;wela=0;delay(5);dula=1;P0=table[shi];dula=0;wela=1;P0=0xfd;wela=0;delay(5);dula=1;P0=table[ge];dula=0;wela=1;P0=0xfb;wela=0;delay(5);//以5ms亮一次}uchar codetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x0 7,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71} uchar numdu,temp,bai,shi,ge;void delay(uint z);void main(){ temp=125;numdu=0;while(1){bai=temp/100;shi=temp%100/10;ge=temp%10;dula=1;P0=table[bai];dula=0;wela=1;P0=0xfe;wela=0;delay(5);dula=1;P0=table[shi];dula=0;wela=1;P0=0xfd;wela=0;delay(5);dula=1;P0=table[ge];dula=0;wela=1;P0=0xfb;wela=0;delay(5);}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--)}5.0//#include<reg52.h>#define uint unsigned int#define uchar unsigned charvoid delay(uint z);void display(uchar aa,uchar bb,uchar cc,uchar bai,uchar shi,uchar ge);sbit dula=P2^6;//位声明(sbit为位的关键字) sbit wela=P2^7;//位声明uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x76,0x79,0x38,0x3f,0};uchar temp,t0,t1,aa,bb,cc,bai,shi,ge;uint shu;void main(){ shu=432;init();while(1){display(7,6,5,bai,shi,ge);}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--)}void init(){temp=0xfe;P0=temp;TMOD=0x11;TH0=(65535-50000)/256;TL0=(65535-50000)%256;TH1=(65535-50000)/256;TL1=(65535-50000)%256;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;}void timer0() interrupt 1{TH0=(65535-50000)/256;TL0=(65535-50000)%256;t0++;if(t0==10){t0=1;temp=_crol_(temp,1);P1=temp;}}void timer1() interrupt 3{TH1=(65535-50000)/256;TL1=(65535-50000)%256;t1++;if(t1==2){t1=0;shu--;bai=shu/100;shi=shu%100/10;ge=shu%10;if(shu==398){TR0=0;TR1=0;}}void display(uchar aa,uchar bb,uchar cc,uchar bai,uchar shi,uchar ge){dula=1;P0=table(aa);dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delay(5);dula=1;P0=table(bb);dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delay(5);dula=1;P0=table(cc);dula=0;P0=0xfb;wela=1;P0=0xfe;wela=0;delay(5);dula=1;P0=table(bai);dula=0;P0=0xf7;wela=1;P0=0xfe;wela=0;delay(5);dula=1;P0=table(shi);dula=0;P0=0xff;wela=1;P0=0xef;wela=0;delay(5);dula=1;P0=table(ge);dula=0;P0=0xff;wela=1;P0=0xdf;wela=0;delay(5);}5.1//#include <reg52.h>#include <intrins.h>//因为用到_crol_()这个量,该头文件包含这个量#define uchar unsigned char#define uint unsigned intsbit dula=P2^6;//位声明sbit wela=P2^7;//位声明uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x76,0x79,0x38,0x3f,0};//编码表uchar temp,t0,t1,bai,shi,ge,flag,flag1;uint shu;void init();void display(uchar,uchar,uchar,uchar,uchar,uchar); void delay(uint z){uint t1,y;for(t1=z;t1>0;t1--)for(y=110;y>0;y--);}void main(){init();while(1){if(flag1!=1)display(7,6,5,bai,shi,ge);elsedisplay(16,17,18,18,19,20);}}void init()//调用初始化函数{shu=432;temp=0xfe;//赋给temp的初始值P1=temp;//点亮第一个发光二极管(初始化定时器)TMOD=0x11;//定义定时器的工作方式,这是同时定义定时器0和定时器1为工作方式1TH0=(65536-50000)/256;TL0=(65536-50000)%256;//初始化定时器0TH1=(65536-50000)/256;TL1=(65536-50000)%256;//初始化定时器1EA=1;ET0=1;//开定时器0中断ET1=1;//开定时器1中断TR0=1;//启动定时器0TR1=1;//启动定时器1}void timer0() interrupt 1//定时器0的中断{TH0=(65536-50000)/256;//装初值TL0=(65536-50000)%256;//装初值t0++;if(flag!=1){if(t0==10){t0=1;temp=_crol_(temp,1);P1=temp;}}else{if(t0%4==0)P1=~P1;if(t0==60){TR0=0;P1=0xff;flag1=1;}}}void timer1() interrupt 3//定时器1的中断{TH1=(65536-50000)/256;TL1=(65536-50000)%256;t1++;if(t1==2){t1=0;shu--;bai=shu/100;shi=shu%100/10;ge=shu%10;if(shu==398){TR0=0;//将控制流水灯的定时器0关闭TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;//重新打开定时器0flag=1;t0=0;P1=0xff;//关闭所有的流水灯TR1=0;//将控制数码管的定时器1关闭}}}void display(uchar aa,uchar bb,uchar cc,uchar ba,uchar sh,uchar g){dula=1;P0=table[aa];dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delay(1);dula=1;P0=table[bb];dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delay(1);dula=1;P0=table[cc];dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delay(1);dula=1;P0=table[ba];dula=0;P0=0xff;wela=1;P0=0xf7;wela=0;delay(1);dula=1;P0=table[sh];dula=0;P0=0xff;wela=1;P0=0xef;wela=0;delay(1);dula=1;P0=table[g];dula=0;P0=0xff;wela=1;P0=0xdf;wela=0;delay(1);}5.2//#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit d1=P1^0;sbit dula=P2^6;sbit wela=P2^7;sbit key1=P3^4;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};uchar num;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void main(){wela=1;P0=0xfe;wela=0;P3=0xff;while(1){if(key1==0){delay(5);if(key1==0){d1=0;num++;if(num==10)num=0;}while(!key1);delay(5);while(!key1);//消抖}elsed1=1;dula=1;P0=table[num];dula=0;}}5.3//#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit dula=P2^6;sbit wela=P2^7;sbit key1=P3^4;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};uchar num,temp,num1;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}uchar keyscan();void display(uchar aa);void main(){num=17;dula=1;P0=0;dula=0;wela=1;P0=0xc0;wela=0;while(1){display(keyscan());}}void display(uchar aa){dula=1;P0=table[aa-1];dula=0; }uchar keyscan(){P3=0xfe;temp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P3;//temp此时的值为0xeetemp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){case 0xee:num=1;break;case 0xde:num=2;break;case 0xbe:num=3;break;case 0x7e:num=4;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}//该while函数为松手检测}}P3=0xfd;temp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){case 0xed:num=5;break;case 0xdd:num=6;break;case 0xbd:num=7;break;case 0x7d:num=8;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}P3=0xfb;temp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){case 0xeb:num=9;break;case 0xdb:num=10;break;case 0xbb:num=11;break;case 0x7b:num=12;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}P3=0xf7;temp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){case 0xe7:num=13;break;case 0xd7:num=14;break;case 0xb7:num=15;break;case 0x77:num=16;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}return num;}5.4//#include<reg52.h>sbit d1=P1^0;sbit key1=P3^4;void main(){P3=0xff;//令P3所有的端口都变成高电平while(1){if(key1==0)d1=0;else d1=1;//如果P3^4口为低电平,那么第一个二极管亮,否则就不亮}}5.7//#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit wela=P2^6;sbit dula=P2^7;uchar temp,num;void delay(uint z);void main(){dula=1;P0=0;dula=0;wela=1;P0=0xc0;wela=0;while(1)//在大循环内部始终检测键盘有没有按下,和按下哪一个键盘{P3=0xfe;//(1111 1110)表示打开第一行的四个键盘temp=P3;temp=temp&0xf0;while(temp!=0xf0)//判断是否有键按下{delay(5);//延时之后再判断是原来那个值temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){case0xee:num=1;//ee表示(1110 1110),第一个灯亮break;case0xde:num=1;//de表示(1101 1110),第二个灯亮break;case0xbe:num=1;//be表示(1011 1110),第三个灯亮break;case0x7e:num=1;//7e表示(0111 1110),第三个灯亮break;}dula=1;P0=table[num-1];dula=0;}}}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--)}6.1//#include<reg52.h>sbit csda=P3^2;sbit wr=P3^6;void main(){csda=0;wr=0;P0=0;while(1);}6.2//#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit wr=P3^6;sbit rd=P3^7;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void init();void start();void main(){init();while(1){start();delay(50);//启动,延时rd=0;// rd拉低之后过一段时间输出数据才有效delay(5);rd=1;delay(5);//这个是根据那个时序图写出来的}}void init(){P0=0;//将片选打开,cs拉低,P0口的最高位送0}void start()//这个函数就是启动A/D转换{wr=1;wr=0;wr=1;}7.1//#include<reg52.h>void main(){REN=1;SMO=0;SM1=1;TMOD=0x20;TH1=0xfd;TL1=0xfd;TR1=1;//EA=1;//ES=1;while(1){if(RI==1){RI=0;//将其清零P1=SBUF;}}}void ser() interrupt 4{RI=0;P1=SBUF;}7.2//#include<reg52.h>void main(){TMOD=0x20;REN=1;SM0=0;SM1=1;EA=1;ES=1;TH1=0xfd;TL1=0xfd;TR1=1;while(1){}}void ser() interrupt 4{RI=0;P1=SBUF;}//用中断程序来实现串口的发送,此程序的意思就是利用串口发送的数据来在单片机上实现7.// #include<reg52.h>unsigned char flag,a;//一旦收到一个数就将flag置1void main(){TMOD=0x20;//设置定时器1为工作方式2TH1=0xfd;//说明串口的波特率为9600TL1=0xfd;//装初值TR1=1;//启动定时器1REN=1;//让串口允许接收SM0=0;SM1=1;//选择串口的工作方式为1EA=1;ES=1;//打开串口中断while(1)//进入大循环,始终检测flag是否为1{/* if(RI==1){RI=0;P1=SBUF;}*/if(flag==1)//如果flag=1说明收到数据了{ES=0;//在发送数据的时候将中断关闭flag=0;//对flag先清零SBUF='1';//28,这里的SBUF有两层含义,SBUF在左边,说明是发送,SBUF在右边,说明是接收;while(!TI);TI=0;SBUF='2';//28;while(!TI);TI=0;//等待是否发送完SBUF='3';//28;while(!TI);//发送完之后TI会置1TI=0;//将TI 清零ES=1;//再将中断打开}}}void ser() interrupt 4//进入串行口中断{RI=0;// P1=SBUF;//此处的SBUF调用的是接收缓冲器,将SBUF赋给P1口a=SBUF;//将收到的数据先存起来flag=1;}8.// #include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar code table[]="I LIKE MCU!";uchar code table1[]="";sbit lcden=P3^4;sbit lcdrs=P3^5;sbit dula=P2^6;sbit wela=P2^7;uchar num;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_com(uchar com){lcdrs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_data(uchar date){lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void init(){dula=0;wela=0;lcden=0;write_com(0x38);write_com(0x0e);write_com(0x06);write_com(0x01);write_com(0x80+0x10);}void main(){init();for(num=0;num<11;num++){write_data(table[num]);delay(20);}// write_com(1);write_com(0x80+0x53);for(num=0;num<13;num++){write_data(table1[num]);delay(20);}for(num=0;num<16;num++){write_com(0x18);delay(20);}while(1);}9.// #include<reg52.h>#define uchar unsigned charsbit sda=P2^0;sbit scl=P2^1;uchar a;void delay(){ ;; }void start() //开始信号{sda=1;delay();scl=1;delay();sda=0;delay();}void stop() //停止{sda=0;delay();scl=1;delay();sda=1;delay();}void respons() //应答{uchar i;scl=1;delay();while((sda==1)&&(i<250))i++;scl=0;delay();}void init(){sda=1;delay();scl=1;delay();}void write_byte(uchar date){uchar i,temp;temp=date;for(i=0;i<8;i++){temp=temp<<1;scl=0;delay();sda=CY;delay();scl=1;delay();// scl=0;// delay();}scl=0;delay();sda=1;delay();}uchar read_byte(){uchar i,k;scl=0;delay();sda=1;delay();for(i=0;i<8;i++){scl=1;delay();k=(k<<1)|sda;scl=0;delay();}return k;}void delay1(uchar x){uchar a,b;for(a=x;a>0;a--)for(b=100;b>0;b--);}void write_add(uchar address,uchar date) {start();write_byte(0xa0);respons();write_byte(address);respons();write_byte(date);respons();stop();}uchar read_add(uchar address){uchar date;start();write_byte(0xa0);respons();write_byte(address);respons();start();write_byte(0xa1);respons();date=read_byte();stop();return date;}void main(){init();write_add(23,0xaa);delay1(100);P1=read_add(23);while(1);}10.// #include<reg52.h> #define uchar unsigned char#define uint unsigned intsbit dula=P2^6;sbit wela=P2^7;sbit rs=P3^5;sbit lcden=P3^4;sbit s1=P3^0;sbit s2=P3^1;sbit s3=P3^2;sbit rd=P3^7;uchar count,s1num;char miao,shi,fen;uchar code table[]=" 2007-7-30 MON"; uchar code table1[]=" 00:00:00";void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_com(uchar com){rs=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_date(uchar date){rs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void init(){uchar num;dula=0;wela=0;lcden=0;// fen=59;// miao=53;// shi=23;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);for(num=0;num<15;num++){write_date(table[num]);delay(5);}write_com(0x80+0x40);for(num=0;num<12;num++){write_date(table1[num]);delay(5);}TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void write_sfm(uchar add,uchar date){uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);}void keyscan(){rd=0;if(s1==0){delay(5);if(s1==0){ s1num++;while(!s1);if(s1num==1){TR0=0;write_com(0x80+0x40+10);write_com(0x0f);}}if(s1num==2){write_com(0x80+0x40+7);}if(s1num==3){write_com(0x80+0x40+4);}if(s1num==4){s1num=0;write_com(0x0c);TR0=1;}}if(s1num!=0){if(s2==0){delay(5);if(s2==0){while(!s2);if(s1num==1){miao++;if(miao==60)miao=0;write_sfm(10,miao);write_com(0x80+0x40+10);}if(s1num==2){fen++; if(fen==60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7);}if(s1num==3){shi++; if(shi==24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+4);}}}if(s3==0){delay(5);if(s3==0){while(!s3);if(s1num==1){/*if(miao==0){ miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);}*/miao--;if(miao==-1)miao=59;write_sfm(10,miao);write_com(0x80+0x40+10);}if(s1num==2){fen--;if(fen==-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+7);}if(s1num==3){shi--;if(shi==-1)shi=23;write_sfm(4,shi);write_com(0x80+0x40+4);}}}}}void main(){init();while(1){keyscan();}// while(1);}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++; if(count==18){count=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;}write_sfm(4,shi);}write_sfm(7,fen);}write_sfm(10,miao);}}d//#define uchar unsigned char#define uint unsigned intsbit dula=P2^6;sbit wela=P2^7;sbit rs=P3^5;sbit lcden=P3^4;sbit s1=P3^0;sbit s2=P3^1;sbit s3=P3^2;sbit rd=P3^7;sbit beep=P2^3;sbit dscs=P1^4;sbit dsas=P1^5;sbit dsrw=P1^6;sbit dsds=P1^7;sbit dsirq=P3^3;uchar count,s1num,flag,flag1;char miao,shi,fen;uchar code table[]=" 2007-7-30 MON";uchar code table1[]=" : : ";void write_ds(uchar,uchar);void set_alarm(uchar,uchar,uchar);uchar read_ds(uchar);void set_time();。
单片机音乐代码

单片机音乐代码uchar code music[] ={//梁祝0xff,0xff,0xff,0xff,0x18,0x26,0x32,0x56,0x62,0x32,0x52,0x24,0x96,0xC2,0xA2,0x92,0x72,0x92,0x68,0x66,0x72,0x44,0x34,0x26,0x32,0x54,0x64,0x14,0x54,0x32,0x22,0x32,0x52,0x28,0x76,0x92,0x44,0x64,0x32,0x52,0x28,0x04,0x12,0x24,0x12,0x22,0x32,0x42,0x62,0x36,0x22,0x32,0x56,0x62,0x94,0x74,0x64,0x72,0x62,0x54,0x32,0x22,0x18,0x58,0x32,0x51,0x32,0x22,0x12,0x22,0x32, 0x52,0x28,0x00};uchar code music[] ={//东风破0xff,0xff,0xff,0xff,0x52,0x42,0x52,0x63,0x51,0x51,0x42,0x52,0x42,0x42,0x42,0x22,0x58,0x0 2, 0x52,0x42,0x52,0x63,0x51,0x42,0x42,0x52,0x42,0x22,0x21,0x11,0x18,0x02,0x82,0x82,0x82,0x62,0x62,0x62,0x72,0x84,0x72,0x61,0x64,0x04,0x02, 0x52,0x52, 0x52,0x62,0x42,0x42,0x22,0x42,0x92,0x92,0x92,0x82,0x88,0x02,0x52,0x42,0x22,0x63,0x51,0x51,0x41,0x42,0x52,0x42,0x42,0x22,0x58, 0x02,0x52 ,0x42,0x52,0x63,0x51,0x51,0x41 ,0x42,0x52,0x62,0x82,0x62,0x88, 0x02,0x82,0x82,0x82,0x92,0x82,0x62,0x72,0x82,0x72,0x72,0x72,0x72,0x78, 0x02,0x52,0x52,0x42,0x62,0x52,0x42,0x22,0x52,0x42,0x53,0x41,0x48,0x82, 0x82,0x82,0x93,0xa1,0x92,0x82,0x62,0x62,0x61,0x51,0x52,0x58,0x02,0x52, 0x42,0x52,0x63,0x51,0x51,0x41,0x42,0x52,0x42,0x42,0x22,0x58,0x02,0x52,0x42,0x52,0x63,0x51,0x51,0x41,0x42,0x02,0x42,0x42,0x52,0x62,0x52,0x62,0x82,0x92,0x82,0x81,0x61,0x62,0x62,0x62,0x61,0x51,0x52,0x02,0x82,0x82,0x82,0x93,0xa1,0x92,0x82,0x62,0x62,0x61,0x51,0x52,0x58,0x02,0x82,0x82,0x82,0x62,0x52,0x51,0x41,0x42,0x52,0x42,0x52,0x62,0x68,0x02,0x32,0x42,0x52,0x62,0x52,0x62,0x82,0x92,0x82,0x52,0x52,0x88,0x02,0x92,0x91,0x81,0x81,0x82,0x63,0x81,0x62,0x52,0x02,0x52,0x52,0x62,0x82,0x92,0x52,0x52,0x88,0x02,0x92,0x91,0x81,0x82,0x63,0x81,0x62,0x52,0x02,0x52,0x52,0x42,0x62,0x52,0x42,0x22,0x52,0x42,0x4f,0x00};uchar code music[] ={//勇气0xff,0xff,0xff,0xff,0x12 ,0x21 ,0x51 ,0x51 ,0x61,0x71,0x72,0x21,0x31,0x01,0x31,0x51,0x41, 0x42,0x31,0x21,0x22,0x82,0x74,0x71,0x71,0x81,0x71,0x72,0x61,0x51,0x51,0x63,0x42,0x31,0x21,0x0 2, 0x21,0x32,0x52,0x52,0x51,0x72,0x61,0x68,0x12,0x21,0x51,0x52,0x61,0x71,0x72,0x21,0x31,0x01,0x31,0x51,0x41,0x4 2, 0x31,0x21,0x22,0x82,0x74,0x71,0x71,0x81,0x71,0x72,0x61,0x51,0x51,0x62, 0x42,0x31,0x21,0x02,0x21,0x32,0x51,0x51,0x51,0x72,0x61,0x64,0x22,0x52,0x42,0x58,0x58,0x02,0x31,0x31,0x31,0x53,0x42,0x51,0x41,0x41,0x22,0x21,0x72,0x72,0x7 2,0x92,0x62,0x72,0x58,0x02,0x31,0x31,0x31,0x53,0x42,0x51,0x41,0x41,0x22,0x21,0x82,0x72,0x8 2, 0x72,0x52,0x01,0x51,0x82,0x72,0x82,0x71,0x53,0x12 ,0x21 ,0x51 ,0x51 ,0x61,0x71,0x72,0x21,0x31,0x01,0x31,0x51,0x41, 0x42,0x31,0x21,0x22,0x82,0x74,0x71,0x71,0x81,0x71,0x72,0x61,0x51,0x51,0x63,0x42,0x31,0x21,0x0 2, 0x21,0x32,0x52,0x52,0x51,0x72,0x61,0x68,0x12,0x21,0x51,0x52,0x61,0x71,0x72,0x21,0x31,0x01,0x31,0x51,0x41,0x4 2, 0x31,0x21,0x22,0x82,0x74,0x71,0x71,0x81,0x71,0x72,0x61,0x51,0x51,0x62, 0x42,0x31,0x21,0x02,0x21,0x32,0x51,0x51,0x51,0x72,0x61,0x64,0x22,0x52,0x42,0x58,0x58,0x00};uchar code qnzl[]={ //千年之恋0xff,0xff,0xff,0xff,0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,0x42,0x34,0x84,0x72,0x82,0x94,0xA8,0xff,0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,0x32,0x31,0x21,0x32,0x82,0x71,0x81,0x71,0x51,0x32,0x22,0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,0x32,0x31,0x21,0x32,0x83,0x82,0x71,0x72,0xff,0x63,0xA1,0xA2,0x62,0x92,0x82,0x52,0x31,0x51,0x63,0x51,0x63,0x51,0x63,0x51,0x62,0x82,0x7C,0xff,0x61,0x71,0x82,0x71,0x62,0xA2,0x71,0x76,0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,0xff,0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,0x42,0x63,0x83,0x83,0x91,0x91,0x61,0x71,0x82,0x71,0x62,0x0A2,0x71,0x76,0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,0xff,0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,0x42,0x82,0x88,0x74,0x93,0x89,0x00};uchar code jmszl[]={ //寂寞沙洲冷0xff,0xff,0xff,0xff,0x12,0x12,0x22,0x32,0x31,0x22,0x21,0x22,0x21,0x31,0x51,0x52,0x31,0x52,0x61,0x15,0x14,0x51,0x52,0x31,0x52,0x62,0x13,0x11,0x13,0x32,0x28,0xff,0x31,0x32,0x31,0x32,0x11,0x21,0x51,0x52,0x51,0x52,0x51,0x51,0x31,0x32,0x31,0x32,0x81,0x72,0x63,0x62,0x71,0x81,0x72,0x61,0x61,0x52,0x31,0x21,0x32,0x51,0x54,0x22,0x12,0x11,0x12,0x11,0x12,0x24,0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,0x32,0x81,0x81,0x81,0x81,0x62,0x52,0x34,0x31,0x81,0x81,0x81,0x61,0x91,0x82,0x51,0x51,0x51,0x51,0x31,0x61,0x53,0x21,0x11,0x21,0x11,0x22,0x11,0x21,0x26,0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,0x5 2,0x31,0x31,0x81,0x81,0x81,0x61,0x91,0x81,0x61,0x31,0x56,0x32,0x32,0x81,0x81,0x81,0x81,0x91,0x81,0x61,0x81,0x61,0x51,0x31,0x51,0x 34,0x21,0x31,0x51,0x31,0x21,0x11,0x61,0x21,0x16, 0x00};uchar code music[] ={//生日快乐0xff,0xff,0xff,0xff,0x52,0x52,0x63,0x53,0x83,0x73,0x52,0x52,0x63,0x53,0x93,0x83,0x52,0x52,0xc3,0xa3,0x83,0x71,0x61,0xb2,0xb3,0xa3,0x83,0x93,0xa3,0x00};uchar code music[] ={//你不知道的事0xff,0xff,0xff,0xff,0xa2,0x52,0x82,0x52,0xa2,0x52,0x82,0x52,0xb2,0x62,0x82,0x62,0xb2,0x62,0x82,0x62,0xa2,0x52,0xff,0xa2,0x92,0x92,0x82,0x82,0x92,0x82,0x62,0x64,0xff,0x52,0x82,0x84,0x92,0x94,0xff,0xa2,0x92,0x82,0x92,0x62,0x82,0x62,0x54,0xff,0x52,0x52,0x82,0x82,0x82,0x92,0x92,0x71,0x61,0x54,0xff,0x64,0x82,0x84,0x84,0x52,0x52,0x94,0xa2,0x82,0x54,0xff,0x64,0x84,0x84,0x52,0x52,0x94,0xa2,0x84,0xff,0x64,0x84,0x84,0x52,0x94,0x82,0xa2,0xa4,0x84,0x82,0x82,0xff,0x84,0xa2,0xb2,0xc2,0x82,0xd4,0xc2,0xc2,0xb4,0xa4,0x92,0x92,0xff,0xff,0x52,0x92,0xa2,0xb2,0x52,0xc4,0xb2,0xa2,0x94,0x92, 0x82,0x82,0xff, 0x52,0x82,0x92,0xa2,0x82,0xb4,0xa2,0x92,0x82,0x84,0x82,0x72,0x72,0x82,0x94,0xb2,0xa2,0xa2,0xa4,0x92,0xa4,0xff,0x82,0xa2,0xb2,0xc2,0x82,0xd4,0xc2,0xc2,0xb4,0xa4,0x94,0xff,0x52,0x92,0xa2,0xb2,0x52,0xc4,0xb2,0xa2,0x94,0x94,0x84,0x84,0xff,0x64,0x82,0x82,0x94,0x52,0x94,0x82,0xa2,0x84,0x84,0x00 };uchar code music[] ={//海角七号0xff,0xff,0xff,0xff,0x84,0x72,0x62,0x74,0x54,0x64,0x52,0x42,0x34,0xff,0x44,0x32,0x22,0x34,0x64,0x72,0x82,0x82,0x64,0x74,0xff,0x84,0x72,0x62,0x74,0x54,0x64,0x72,0x82,0x54,0xff,0x44,0x32,0x22,0x34,0x64,0x84,0x72,0x82,0x64,0xff,0xff,0x84,0x72,0x62,0x74,0xa4,0x62,0x72,0x72,0x82,0x54,0xff,0x44,0x32,0x22,0x34,0x64,0x74,0x82,0x64,0x74,0xff,0x84,0x72,0x62,0x74,0x54,0x64,0x72,0x82,0x54,0xff,0x44,0x32,0x22,0x34,0x64,0x84,0x72,0x82,0x64,0xff,0xff,0x82,0x72,0x64,0x62,0xa2,0x92,0x82,0x72,0x62,0x54,0x34,0x84,0x62,0x52,0x64,0xa4,0x92,0xa2,0xc2,0x92,0xa4,0xff,0xa2,0xc2,0xd4,0xc2,0xa2,0x94,0x84,0xa4,0x82,0x62,0x64,0x62,0x72,0x8 4,0x34,0x74,0x54,0x64,0xff,0xff,0x82,0x72,0x64,0x62,0xa2,0x92,0x82,0x72,0x62,0x54,0x34,0x84,0x62,0x52,0x64,0xa4,0x92,0xa2,0xc2,0x92,0xa4,0xff,0xa2,0xc2,0xd4,0xc2,0xa2,0x94,0x84,0xa4,0x82,0x62,0x64,0x62,0x72,0x8 4,0x34,0x74,0x54,0x64,0xff,0x00};uchar code music[] ={//星月神话0xff,0xff,0xff,0xff,0xa4,0x92,0x82,0x94,0x82,0x72,0x84,0x72,0x62,0x54,0x64,0x82,0x72, 0x74,0x52,0x32,0x34,0xff,0x82,0x92,0xa4,0x92,0x82,0x94,0x82,0x72,0x84,0x72,0x62,0x54,0x64, 0xa2,0x72,0x74,0x82,0x92,0x86,0xff,0x82,0x92,0xa4,0x92,0x82,0x94,0x82,0x72,0x84,0x72,0x62,0x54,0x82, 0x52,0x64,0xa2,0x82,0x74,0x82,0x92,0x86,0xff,0xa2,0xc2,0xd4,0xd4,0xc4,0x92,0xc2,0xa2,0x82,0x82,0x62,0x64,0x62,0x7 2,0x84,0xa2,0x92,0x94,0xc2,0xa2,0xa6,0xff,0xa2,0xc2,0xd4,0xd4,0xc2,0x92,0x92,0xc2,0xa2,0x82,0x82,0x62,0x64,0xa 2,0x92,0x84,0xa2,0x92,0x94,0xa2,0x72,0x66,0xff,0xff,0xa2,0xc2,0xd4,0xc4,0xc2,0x92,0x92,0xc2,0xa2,0x82,0x82,0x62,0x64,0xa 2,0x92,0x94,0xc2,0xa2,0xa6,0xff,0xa2,0xc2,0xd4,0xc4,0xc2,0x92,0x92,0xc2,0xa4,0x64,0xa2,0x92,0x84,0xa 2,0x92,0x94,0xa2,0x72,0x66,0x00};uchar code music[] ={//一生有你0xff,0xff,0xff,0xff,0x52,0x52,0x84,0x92,0x92,0xa2,0x91,0xa1,0xa6,0xff,0x52,0x52,0x84,0x92,0x92,0xa2,0x81,0x91,0x96,0xff,0x52,0x52,0x84,0x92,0x92,0xa2,0x91,0xa1,0xa4,0x82,0xa2,0x96,0x92,0x8 2,0x84,0x82,0x92,0x96,0xff,0x52,0x52,0x84,0x92,0x92,0x52,0x91,0xa1,0xa6,0xff,0x52,0x52,0x82,0x82,0x92,0x92,0xa2,0x92,0x96,0xff,0x52,0x52,0x84,0x92,0x92,0xa3,0x91,0xa1,0xa6,0x82,0xa2,0x96,0x92,0x82,0x82,0x92,0x96,0xff,0xff,0x82,0x52,0x82,0x92,0x92,0x92,0x92,0xc2,0x92,0x82,0x82,0xa2,0xa4,0x62,0x32,0x62,0x82,0x72,0x72,0x62,0x72,0x82,0x82,0x82,0x81,0x91,0x94,0xa2,0xa2,0xa2,0xa2,0x92,0x92,0x92,0xc2,0xd2,0xd2,0xd2,0xc2,0xa4,0xb2,0xb2,0xb2,0xd2,0xd2,0xc2,0xc2,0xc2,0x82,0x82,0x82,0x92,0x86,0xff, 0xb2,0xb2,0xb4,0xb2,0xb2,0xb4,0xb2,0xb2,0xb4,0xa2,0xa6,0xff, 0xb2,0xb2,0xb4,0xb2,0xa2,0xa4,0xa2,0xa2,0xa2,0xa2,0xe4,0xd6,0xff,0x92,0xa2,0x96,0xc6,0xc6,0xb2,0xb2,0xb2,0xd2,0xd2,0xc2,0xc2,0xc2,0x82,0x82,0x82,0x92,0x94,0x86,0x00 };uchar code music[] ={//可惜不是你0xff,0xff,0xff,0xff,0x62,0xc2,0xa2,0x81,0x91,0x94,0x52,0xc2,0xa2,0x51,0x81,0x84,0x62,0xc2,0xa2,0x82,0x74,0x82,0x92,0xb4,0xb2,0xa1,0xa4,0xff,0x62,0xc2,0xa2,0x81,0x91,0x94,0x52,0xc2,0xa2,0x51,0x81,0x84,0x62,0xc2,0xa2,0x82,0x74,0x84,0x86,0x00};uchar code music[] ={//樱花草0xff,0xff,0xff,0xff,0xa3,0x91,0x82,0x52,0x82,0xa2,0x94,0xa3,0x91,0x82,0x32,0x62,0x82,0x74,0x82,0x71,0x61,0x64,0x72,0x61,0x51,0x54,0x81,0x81,0xb2,0xa2,0x92,0x81,0xa1,0x96,0xff,0xa3,0x91,0x82,0x52,0x82,0xa2,0x94,0xa3,0x91,0x82,0x32,0x62,0x82,0x74,0x82,0x71,0x61,0x64,0x72,0x61,0x51,0x54,0x81,0x81,0xb2,0xa2,0x92,0x81,0xa1,0x96,0xff,0xa2,0x86,0x92,0x84,0x71,0x61,0x52,0x82,0xa2,0xb2,0x96,0xff,0xa2,0x86,0x81,0x91,0x82,0x71,0x61,0x52,0x82,0xa2,0xb1,0xa1,0x94,0xf f, 0xd3,0xc1,0xa2,0xc2,0xc2,0xa1,0x91,0x94,0xc3,0xc1,0xa2,0xc2,0xc2,0xa1,0x91,0x84,0x82,0x91,0xa1,0xa4,0xc2,0xa1,0x91,0x94,0xc3,0xa1,0x82,0x92,0xa2,0xc1,0x91,0x94,0xff,0xd3,0xc1,0xa2,0xc2,0xc2,0xa1,0x91,0x94,0xc3,0xc1,0xa2,0xc2,0xc2,0xa1,0x91,0x84,0x82,0x91,0xa1,0xa4,0xc2,0xa1,0x91,0x94,0xc3,0xa1,0x82,0x92,0xa2,0xc1,0x91,0x96,0xa2,0x88,0x00};uchar code music[] ={//江南0xff,0xff,0xff,0xff,0x62,0x72,0x82,0xc2,0xa4,0x82,0x66,0x72,0x72,0x72,0x82,0x74,0x52,0x6 6,0xff,0x62,0x62,0x72,0x82,0xc2,0xa4,0x82,0x66,0x72,0x72,0x72,0x82,0x92,0x82,0x 72,0x52,0x52,0x66,0xff,0x62,0x72,0x82,0xc2,0xa4,0xa2,0x66,0x72,0x72,0x72,0x82,0x74,0x64,0x5 4,0x62,0x82,0x66,0xff,0x62,0x72,0x82,0xc2,0xa2,0x82,0x66,0x72,0x72,0x72,0x82,0x92,0x82,0x7 2,0x54,0x66,0xff,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xff,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa 4,0x92,0xa4,0xff,0xa2,0xa4,0x82,0x94,0x82,0x84,0x82,0x82,0xc4,0x82,0x84,0x82,0x62,0xc 4,0x82,0x82,0xd4,0xc6,0xff,0x82,0x92,0xa2,0xb2,0xa2,0xb2,0xc2,0xb2,0xa2,0x84,0x96,0xb2,0xa2,0x9 2,0x82,0x72,0x82,0x92,0xa2,0x92,0x82,0x94,0x74,0x82,0x52,0x64,0xd2,0xd4,0x82,0x84,0xc 2,0xc4,0x82,0xb2,0xa2,0xb2,0xa2,0xc2,0xb2,0xa2,0x84,0x94,0xff,0xb3,0xa3,0x93,0x82,0x92,0x82,0x86,0x00};uchar code music[] ={ //突然好想你0xff,0xff,0xff,0xff,0x52,0xa4,0xa2,0x82,0x92,0x82,0x72,0x86,0xff,0x82,0xb4,0xb2,0xa2,0xb2,0xa2,0xb1,0xc2,0x94,0xff,0x82,0x72,0x81,0xd1,0xd4,0xd2,0xe1,0xf1,0xf2,0xf2,0xe1,0xd2,0xc1,0xc4,0xc1,0xd2,0xa1,0xa2,0x82,0x72,0x81,0xc1,0xc4,0xc1,0xc2,0xb2,0x62,0x72,0x86,0xff,0x52,0xa4,0xa2,0x82,0x92,0x82,0x72,0x81,0x84,0xff,0x82,0xb4,0xb2,0xa2,0xb2,0xa2b1,0xc2,0x95,0xff,0x82,0x72,0x81,0xd1,0xd4,0xd2,0xe1,0xf1,0xf2,0xf2,0xe1,0xd2,0xc1,0xc4,0xc1,0xd2,0xa1,0xa2,0x82,0x72,0x82,0xc4,0xc1,0xc2,0xb2,0x62,0x72,0x84,0xff,0xff,0x62,0x72,0x84,0xa4,0x94,0x82,0x92,0x54,0x94,0x84,0x62,0x72,0x84,0xa 4,0x94, 0x84,0xa6,0xff,0x62,0x72,0x84,0xa4,0x94,0xc2,0x92,0xb2,0xa1,0x91,0x91,0xa2,0x91,0x9 1,0x82, 0x62,0x72,0x84,0xa4,0x94,0x84,0x86,0xff,0xff,0x52,0xa2,0xa1,0x81,0x92,0xa1,0xb1,0xa2,0x72,0x84,0xff,0x82,0xb4,0xb2,0xa1,0xb1,0xb2,0xa2,0xb1,0xc2,0x94,0xff,0x52,0x42,0x51,0xa1,0xa4,0xa2,0xb1,0xd2,0xc2,0xb1,0xa2,0x91,0x94,0x91,0xa2,0x71,0x72,0x52,0x94,0x91,0x92,0x82,0xe2,0xe2,0xd1,0xc2,0xc6,0xff,0x ff, 0x81,0x93,0xa4,0x92,0x81,0x81,0x82,0x61,0x61,0x62,0x41,0x41,0x41,0x82,0x71,0x72,0x71,0x71,0x72,0x71,0x71,0x72,0x91,0x81,0x82,0x51,0x 61,0x64,0xff,0x41,0x41,0x51,0x64,0x41,0x51,0x61,0x82,0x72,0x72,0x61,0x81,0x82,0x72,0x72,0x62,0x82,0x72,0x72,0x61,0x71,0x74,0x62,0x72,0x84,0xa4,0x94,0x82,0x92,0x54,0x94,0x84,0x62,0x72,0x84,0xa4,0x94, 0x84,0xa6,0xff, 0x62,0x72,0x84,0xa4,0x94,0xc2,0x92,0xb2,0xa1,0x91,0x91,0xa2,0x91,0x9 1, 0x82,0x62,0x72,0x84,0xa4,0x94,0x84,0x86,0x00};uchar code music[] ={//天使的翅膀0xff,0xff,0xff,0xff,0x82,0x82,0x72,0x61,0x71,0x72,0x61,0x71,0x72,0x52,0x66,0x62,0x52,0x62,0x82,0x72,0x62,0x72,0x52,0x52,0x32,0x34,0xff,0x32,0x42,0x31,0x41,0x42,0xa2,0x94,0x52,0x92,0x81,0x91,0x92,0xc2,0xa4,0xa2,0x82,0x64,0x62,0xa2,0x94,0x82,0x72,0x66,0xa2,0xc2,0xd2,0xc1,0xd1,0xd2,0xa1,0x91,0x94,0xc2,0xa1,0xc1,0xc2,0x91,0x81,0x84,0xa2,0x91,0xa1,0xa2,0x62,0x92,0x81,0x91,0x91,0xc2,0xa1,0xa2,0xa4,0xa2,0xc2,0xd2,0xc1,0xd1,0xd2,0xa1,0x91,0x94,0xc2,0xa1,0x c1,0xc2,0x91,0x81,0x84,0x62,0x82,0xa2,0x91,0xa1,0xa2,0x62,0x92,0x81,0x91, 0x94,0x96,0x82,0x62,0x66,0x00};uchar code music[] ={//美丽的神话0xff,0xff,0xff,0xff,0x66,0xa6,0x76,0x63,0x83,0x93,0x82,0xa8,0x66,0xd6,0xc3,0xd3,0xc3,0x93,0xb3,0xa3,0xa8,0x66,0xd6,0xc3,0x93,0xa3,0xb3,0xa6,0x86,0x66,0x66,0xa4,0x96,0x73,0x63,0x66,0xa6,0x75,0x63,0x84,0x93,0x83,0xa3,0x64,0xd4,0xc4,0xd4,0xc3,0x93,0xb3,0xa3,0xa6,0x66,0xd6,0xc3,0x93,0xa3,0xa3,0xb3,0xa6,0x96,0x86,0x66,0xa6,0x96,0x73,0x 68,0x63,0x73,0x82,0x93,0xa4,0x83,0x76,0x56,0x63,0x83,0x93,0xa2,0xa6,0x63, 0x73,0x83,0x93,0xa3,0x83,0x76,0x56,0x63,0x83,0x93,0x72,0x86,0x63,0x73, 0x83,0x93,0xa3,0x83,0x76,0x56,0x63,0x83,0x93,0x83,0xa3,0xa3,0x63,0x73, 0x83,0x93,0xa3,0x83,0x76,0x56,0x63,0x83,0x93,0x72,0x87,0x83,0x82,0x93,0xa3,0x83,0x76,0x56,0x86,0x76,0x73,0x68,0x00};uchar code music[] ={//十年0xff,0xff,0xff,0xff,0x11,0x51,0x81,0xc1,0x01,0x51,0x91,0xc1,0x01,0x31,0x01,0xa4,0x51,0x2 1,0x51,0x71,0x94,0xa4,0xa2,0xa2,0x92,0xa2,0x91,0x81,0x71,0x61,0x62,0x31,0x61,0x 52, 0x61,0x72,0x62,0x62,0x64,0x81,0x71,0x61,0x71,0x64,0xff, 0x31,0x71,0x71,0x61,0x71,0x64,0xff,0x81,0x91,0xa2,0xa2,0x92,0xa2,0x91,0xa1,0xc1,0x81,0x82,0xa1,0x92,0x9 2,0x91, 0x81,0x71,0x81,0x81,0x81,0x81,0x71,0x61,0x71,0x81,0x62,0x64,0xff, 0xa1,0x71,0x71,0x61,0x51,0x62,0x71,0x61,0x64,0xff,0x51,0xa2,0x91,0x81,0x92,0xa1,0x91,0x91,0x52,0xff,0x81,0x61,0x71,0x81,0xd1,0xc1,0x81,0xa4,0xff,0xa1,0x91,0xa1,0xb4,0x93,0xa3,0xb3,0xa3,0xff,0x81,0x91,0xc2,0xa1,0xa3,0xa1,0xa1,0xb1,0xc1,0xd1,0x93,0x91,0x91,0xb 1,0xa1,0x91,0x83,0x31,0x31,0x91,0x81,0x71,0x71,0x71,0x61,0x72,0xb1,0xa1,0x92,0x 71, 0x81,0x84,0xff,0x81,0x91,0xa1,0x62,0xa1,0xb2,0xc1,0xa1,0xa1,0xc2,0xa1,0xa3,0xa1,0xa 1,0xb1,0xc1,0xd1,0x92,0x91,0x91,0xb1,0xa1,0x91,0x83,0x31,0x31,0x91,0x81,0x71,0x 71, 0x61,0x62,0xff,0x81,0x71,0x61,0x72,0xb1,0xa1,0x92,0xa1,0x91,0x91,0x83,0xff,0x81,0x91,0xa1,0xd2,0xc1,0xa2,0x81,0x91,0x94,0xff,0x81,0x71,0x86,0x00 };uchar code music[] ={//一个像夏天一个像秋天0xff,0xff,0xff,0xff,0x52,0x82,0x92,0xa2,0x92,0x82,0x72,0x62,0x72,0x62,0x32,0x34,0xff,0x52,0x82,0x92,0xa2,0x92,0x92,0x82,0x92,0x92,0xa2,0x92,0xff,0xa2,0x92,0x81,0x62,0x62,0xa2,0x92,0x92,0x82,0x82,0x54,0x62,0x82,0xff,0xa2,0x92,0x82,0x64,0xa2,0xa2,0xb2,0xa4,0x92,0x81,0x96,0xff,0xa2,0xc4,0xc2,0xc2,0xc4,0x82,0x92,0xc4,0xc2,0xc2,0xc4,0x92,0xff, 0xa2,0xb2,0xa2,0x92,0x84,0x72,0x62,0x82,0x92,0x82,0xff,0x82,0x82,0x62,0x54,0x62,0x82,0xa2,0x62,0x62,0x52,0x62,0x82,0xa2,0xf f,0xa2,0xa2,0xb2,0xc4,0xc2,0x82,0x84,0x82,0x82,0xc2,0xa2,0x82,0x92,0x94,0x ff, 0xa2,0xc4,0xc2,0xc2,0xc4,0x82,0x92,0xc4,0xc2,0xc2,0xc4,0x92,0xff,0xa2,0xb2,0xa2,0x92,0x84,0x72,0x62,0x82,0x92,0x82,0xff,0x82,0x82,0x62,0x54,0x62,0x82,0xa2,0x62,0x62,0x52,0x62,0x82,0xa2,0xf f, 0xa2,0xa2,0xb2,0xc4,0xc2,0x82,0xa2,0xa2,0x91,0xa3,0x86,0xff,0xff,0x92,0x92,0x82,0x92,0xa2,0x92,0x82,0x62,0x62,0xa2,0x92,0xff,0xa2,0x92,0x82,0x71,0x82,0x72,0x82,0x72,0x32,0x72,0x62,0x64,0xff,0x92,0x92,0x82,0x92,0xa2,0x92,0x82,0x62,0x62,0xa2,0x92,0xff,0x92,0x92,0x82,0xb4,0xb2,0xa2,0xb2,0xa2,0xb2,0xd2,0xd6,0x00 };uchar code music[] ={//等一分钟0xff,0xff,0xff,0xff,0x62,0x72,0x82,0xa2,0xa4,0x82,0x82,0x92,0x92,0x94,0x82,0x64,0x52,0x6 2,0x82, 0x52,0x62,0x52,0x54,0x62,0x72,0x82,0xa2,0xa4,0x82,0x82,0x92,0x92,0x93,0x82,0x83,0x62,0x6 2,0x63, 0x82,0x92,0x94,0xff,0x82,0x92,0xa2,0xa2,0xa2,0xa2,0xa4,0xc2,0x92,0x94,0x93,0xa2,0x82,0x8 2,0x63,0x62,0x64,0x52,0x62,0x64,0x82,0x92,0x92,0xa2,0xa3,0xa2,0xa3,0xc2,0xc2,0x 92, 0x93,0x93,0xa2,0x62,0x66,0xff,0x62,0x72,0x82,0xa2,0xa3,0x82,0x82,0x92,0x92,0x93,0x83,0x64,0x82,0x5 2,0x53,0xff,0x62,0x72,0x82,0xa2,0xa3,0x82,0x82,0x92,0x92,0x93,0x82,0x83,0x62,0x62,0x 63,0x82,0x92,0x93,0x82,0x92,0xa2,0xa2,0xa2,0xa2,0xa2,0xc3,0x92,0x93,0x93,0xa2,0x82,0x8 2,0x63,0x62,0x63,0x52,0x62,0x63,0x82,0x92,0x92,0xa2,0xa2,0xa2,0xa3,0xc2,0xc2,0xc3,0x93,0x93,0xa2,0x8 2,0x82,0x63,0x83,0x92,0xa2,0xa6,0xff,0xa2,0xa2,0xc2,0xd2,0xd2,0xd2,0xd3,0xc2,0xa2,0xc2,0xd2,0xd2,0xd2,0xd 3,0xc2,0xa2,0xc3,0xd3,0xa3,0xc2,0xd2,0xd3,0xa2,0xa2,0xc2,0xd2,0xd2,0xd3,0xc2,0xa2,0x93,0xa3,0xc3,0x92,0xa6,0xa2,0xa2,0xc2,0xd2,0xd2,0xd3,0xc2,0xa2,0xc2,0xd2,0xd2,0xd3,0xc2,0xa2,0x c3,0xf3,0xe3,0xc2,0xa3,0xd3,0xa2,0xa2,0x92,0x82,0x92,0xa2,0x93,0x82,0x92,0xc3,0x93,0x92,0xa2,0x66,0x00 };uchar code music[] ={//安静0xff,0xff,0xff,0xff,0xa2,0xa2,0xa2,0xa2,0x92,0x82,0x72,0x92,0x92,0x92,0x82,0x84,0x52,0xa 2, 0x92,0x82,0x82,0x82,0x84,0x52,0xa2,0x92,0x82,0x82,0x92,0x94,0xff,0xa2,0xa2,0xa2,0xa2,0x92,0x82,0x72,0x92,0x92,0x92,0x82,0x84,0x52,0xa2, 0x92,0x82,0x82,0x82,0x84,0x52,0xa2,0x92,0x82,0x82,0x92,0x92,0x91,0xa1, 0xb4,0xff,0xb2,0xb2,0xb2,0xb2,0xa2,0x92,0x82,0x82,0x82,0x92,0x92,0x94,0xff, 0x52,0xc2,0xc2,0xc2,0xb2,0xa2,0x92,0x92,0x92,0xa2,0xa2,0xa4,0xff, 0x62,0xb2,0xa2,0xb2,0xa2,0xa2,0x92,0x82,0x72,0x82,0x72,0x82,0x52,0x5 2, 0xa4,0xa2,0xb2,0xa2,0xb2,0xa3,0xa2,0x92,0x82,0x92,0x94,0xff,0x52,0xa2,0xb2,0xc2,0xb2,0xa2,0xc2,0xff,0x52,0xa2,0xb2,0xc2,0xb2,0xa2,0xc2,0xff,0x52,0xa2,0xb2,0xc2,0xb2,0xa2,0x82,0x92,0x92,0x92,0xa2,0xa2,0x82,0x8 4,0xff, 0xc2,0xc2,0x82,0x82,0x72,0x82,0x82,0xff,0xc2,0xc2,0x82,0x82,0x72,0x82,0x82,0xff,0xb2,0xb2,0xa2,0xa2,0x92,0x92,0x82,0xff,0xb2,0xb2,0xa2,0xa2,0x92,0x92,0x82,0xff,0x52,0xa2,0xb2,0xc2,0xb2,0xa2,0xc2,0xff,0x52,0xa2,0xb2,0xc2,0xb2,0xa2,0xc2,0xff,0x52,0xa2,0xb2,0xc2,0xb2,0xa2,0x82,0x92,0x92,0x92,0xa3,0xa2,0x82,0x8 4,0xff, 0xc2,0xc2,0x82,0x82,0x72,0x82,0x82,0xff,0xc2,0xc2,0x82,0x82,0x72,0x82,0x83,0xff,0xb2,0xb2,0xa2,0xa2,0x92,0x92,0x82,0xff,0xb2,0xa2,0x82,0x62,0x82,0x82,0x84,0x00};uchar code music[] ={//橄榄树0xff,0xff,0xff,0xff,0xd1,0xd1,0xa2,0xc2,0xb2,0xa1,0x91,0xa6,0xff,0xd1,0xd1,0xa2,0xb2,0xb2,0xa1,0x91,0x86,0xff,0xd2,0xc2,0xd2,0xa2,0x81,0x92,0xa6,0xff,0x92,0x92,0x92,0x84,0xff,0xe2,0xd2,0xe1,0xa4,0xff,0xe4,0xd2,0xa2,0xc1,0xc1,0xb2,0xa1,0x91,0xa4,0x92,0x82,0x94,0xff,0xa4,0xc2,0xd2,0xa2,0xb2,0xa1,0x91,0xa4,0xff,0x84,0x92,0xa2,0xc4,0xa2,0xe4,0xf1,0xe1,0xd6,0xff,0xc2,0xc2,0xc1,0xd4,0xa4,0xff,0xc2,0xc2,0xc1,0xa4,0xd4,0xe4,0xf1,0xe1,0xd6,0xc4,0xa4,0xff,0xd4,0xe3,0xd3,0xa3,0x93,0x86,0xff,0x72,0x91,0x81,0x6 8,0x00 };uchar code music[] ={//我爱他0xff,0xff,0xff,0xff,0x62,0x62,0x72,0x62,0x72,0x82,0x84,0xff,0xa2,0x92,0x82,0x72,0x62,0x64,0x62,0x62,0x72,0x62,0x72,0x82,0x84,0xf f,0xa2,0x92,0x82,0x91,0x81,0xa2,0xa4,0xa2,0xa2,0xd2,0xc2,0xa2,0x92,0x92,0x 82, 0xa2,0x94,0x81,0x61,0xff,0x62,0xa2,0xa2,0xa2,0xc2,0xc2,0x92,0xa2,0x92,0x84,0xff,0xff,0x62,0x62,0x72,0x62,0x72,0x82,0x84,0xff,0xa2,0x92,0x82,0x72,0x62,0x64,0x62,0x62,0x72,0x62,0x72,0x82,0x84,0xf f,0xa2,0x92,0x82,0x91,0x81,0xa2,0xa4,0xa2,0xa2,0xd2,0xc2,0xa2,0x92,0x94,0x 82, 0xa2,0x94,0x81,0x61,0xff,0x62,0xa2,0xa2,0xa2,0xc2,0xc2,0x92,0xa2,0x92,0x84,0xff,0x82,0xa2,0xc4,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xc4,0xc2,0xc4,0xff,0x82,0xa2,0xc4,0xd2,0xd2,0xd2,0xd2,0xd2,0xe2,0xd2,0xe2,0xf2,0xf2,0xd 1,0xc1,0xff,0x82,0xa2,0xc4,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xc2,0xb1,0xc1,0xc2,0xc4,0x ff,0x82,0xa2,0xc4,0xd2,0xd2,0xd2,0xd2,0xd2,0xe2,0xd2,0xe2,0xf2,0xf2,0xd1,0x c1,0xff,0x82,0xa2,0xc4,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xc2,0xb1,0xc1,0xc2,0xc4,0x ff, 0xc2,0xb2,0xa2,0x92,0x92,0x92,0x81,0x61,0xff,0x92,0x92,0x84,0x92,0x82,0xa2,0xa4,0x00};uchar code music[] ={//断点0xff,0xff,0xff,0xff,0x22,0x22,0x12,0x22,0x52,0x52,0x52,0x54,0x52,0x32,0x56,0xff,0x22,0x22,0x12,0x32,0x54,0x52,0x64,0x52,0x22,0x22,0x36,0xff,0x52,0x82,0x62,0x62,0x52,0x64,0x62,0x62,0x52,0x64,0xff,0x52,0x52,0x32,0x62,0x52,0x52,0x52,0x64,0x52,0x32,0x32,0x24,0xff,0x22,0x12,0x22,0x52,0x52,0x52,0x64,0x52,0x32,0x62,0x54,0xff,0x22,0x22,0x12,0x22,0x52,0x52,0x52,0x64,0x52,0x22,0x22,0x36,0xff,0x52,0x82,0x62,0x62,0x62,0x64,0x62,0x52,0x66,0xff,0x62,0x82,0x62,0x82,0x82,0x82,0x82,0x82,0x62,0x82,0x92,0x94,0xff,0x52,0x82,0x72,0x64,0x62,0x62,0x62,0xff,0x62,0x62,0x74,0x72,0x72,0xff, 0x52,0x62,0x52,0x92,0xa4,0xb2,0xa4,0x72,0x72,0x92,0xa4,0x82,0xff,0x52, 0x52,0x62,0x84,0x82,0xff,0x62,0x62,0x52,0x62,0x94,0x92,0xff,0x52,0x62,0x52,0x62,0x82,0x82,0x82,0x82,0x82,0x82,0x62,0x62,0x96,0xff,0x52,0xb2,0xa2,0xb2,0xa2,0xc4,0x52,0x92,0x82,0x92,0x82,0x72,0xc2,0xc2,0xc2,0xff,0x82,0x72,0x82,0x92,0x82,0x82,0x82,0x92,0x82,0x92,0xa2,0xa4,0xff,0x62,0x62,0xc4,0x62,0xc4,0xb2,0xb2,0xff,0xa2,0xa2,0xa2,0xb2,0xa3,0x92,0x82,0xff,0x62,0x82,0x62,0xb2,0x82,0x82,0x82,0x82,0x62,0x82,0x92,0x94,0x52,0xb2,0xa2,0xb2,0xa2,0x54,0x52,0x92,0x81,0x92,0x82,0x72,0xc2,0xc2,0xc2,0xff,0x82,0x72,0x82,0x92,0x82,0x82,0x82,0x92,0x82,0x92,0xa2,0xa6,0xa4,0xc4,0xc4,0xc4,0xb2,0xb2,0xff,0xa2,0xa2,0xb2,0xa2,0x92,0x82,0xff,0x82,0x82,0x62,0xa4,0x82,0x82,0x82,0x64,0x82,0x96,0x53,0x83,0x73,0x8 6,0x00 };uchar code music[] ={//有没有人曾告诉你0xff,0xff,0xff,0xff,0x32,0x62,0x62,0x62,0x62,0x63,0x62,0x63,0x63,0x33,0x42,0x52,0x46,0xff, 0x42,0x52,0x52,0x52,0x52,0x53,0x52,0x53,0x63,0x73,0x62,0x72,0x36,0xff, 0x32,0x62,0x62,0x62,0x62,0x63,0x62,0x63,0x62,0xa3,0x92,0xa2,0x96,0xff,0x72,0x72,0x73,0x72,0x73,0x32,0x83,0x72,0x82,0x76,0xff,0x32,0x62,0x62,0x62,0x62,0x63,0x62,0x63,0x63,0x33,0x42,0x52,0x46,0xff, 0x42,0x52,0x52,0x52,0x52,0x53,0x52,0x53,0x63,0x73,0x62,0x72,0x36,0xff, 0x32,0x62,0x62,0x62,0x62,0x63,0x62,0x63,0x62,0xa3,0x92,0xa2,0x96,0xff,0x72,0x72,0x73,0x72,0x73,0x52,0x73,0x62,0x72,0x66,0xff,0xff,0xa2,0xd2,0xa2,0xa2,0xa2,0xa3,0x82,0x63,0x62,0x63,0xa3,0x96,0xff,0xa2,0xc2,0xc2,0xc2,0xc2,0xc3,0xc2,0xc3,0xd2,0xe3,0xd2,0xd3,0xa6,0xff, 0xa2,0xd2,0xa2,0xa2,0xa2,0xa3,0x82,0xd3,0xd2,0xa3,0x92,0xa2,0x96,0xff, 0x92,0x92,0x93,0x92,0x93,0xc2,0x83,0x62,0x72,0x66,0x00 };uchar code music[] ={//有一种爱叫做放手0xff,0xff,0xff,0xff,0xa2,0x62,0x61,0x71,0x81,0xa1,0x92,0x72,0x51,0x61,0x71,0x91,0x82,0x6 2, 0x61,0x71,0x81,0x61,0x72,0x32,0x32,0x21,0x31,0x42,0x82,0x91,0x81,0x71, 0x61,0x72,0x52,0x52,0x91,0x91,0x42,0x41,0x51,0x52,0x22,0x34,0xa2,0x62,0x61,0x71,0x81,0xa1,0x92,0x72,0x51,0x61,0x72,0x91,0x82,0x62,0x61,0x71,0x81,0x61,0x72,0x32,0x32,0x21,0x31,0x42,0x82,0x91,0x81,0x71 ,0 x61,0x72,0x52,0x52,0x51,0x51,0x92,0xb1,0xb1,0xa2,0x92,0xa4,0xa1,0x91,0x81,0x71,0x82,0x71,0x81,0x81,0xa2,0x94,0xa1,0x91,0x81,0x71,0x72,0xc2,0xc2,0xb1,0xb1,0xa1,0xa3,0xa1,0x91,0x81,0x71,0x82,0x71,0x81,0x81,0xa3,0x94,0xc2,0x92,0xb2,0xa1,0xa1,0xa6,0xa2,0xa2,0xf2,0xe2,0xf2,0xd1,0xe1,0xe1,0xa3,0xa2,0xc2,0xd2,0xc2,0xd 2, 0x81,0x91,0x91,0xa3,0xa2,0x91,0xa1,0xb2,0xb1,0xb1,0xb2,0xa1,0x91,0x82, 0x91,0xa1,0xa3,0xa1,0xd2,0xe1,0xf1,0xf2,0xd1,0xe1,0xe4,0xa2,0xa2,0xd2,0xe1,0xf1,0xf2,0xd1,0xe1,0xe4,0xf2,0xe1,0xd1,0xd4,0xd1,0xf2,0xd1,0xd4,0xf2,0xe1,0xd1,0xd1,0xc1,0xc 2, 0xd1,0xc3,0xa4,0x92,0xa2,0xb4,0xa2,0x91,0xa1,0xa4,0xa2,0xa2,0xd2,0xe1, 0xf1,0xf1,0xd1,0xd1,0xe2,0xff,0xf2,0xe1,0xd1,0xd4,0xd1,0xf2,0xd1,0xd4,0xf2,0xe1,0xd1,0xd4,0xc1,0xd 2,0xe1,0xc1,0xd1,0xe1,0xf2,0xe1,0xd1,0xd4,0xd1,0xf2,0xd1,0xd4,0xd2,0xc1,0xc1,0xc2,0x82,0x82,0x8 2, 0x82,0x72,0x62,0x66,0x00};uchar code music[] ={//心墙0xff,0xff,0xff,0xff,0x84,0x91,0x91,0x92,0xa1,0xb1,0xc1,0x81,0x94,0xa1,0xa1,0xa4,0x62,0x71,0x81,0x81,0x91,0xa2,0xa2,0x91,0xc1,0xc1,0x93,0x92,0xa1,0xa1,0x a4,0xa1,0xb1,0xc1,0x81,0x93,0xa1,0x91,0x92,0x81,0x71,0x91,0x81,0xd2,0xc1,0x c1, 0xc1,0x92,0x91,0x91,0x91,0x82,0xff,0xa1,0xa1,0xa1,0xa2,0x81,0x81,0x81,0x92,0xa1,0xa3,0x81,0x72,0x82,0x9 1,0xa1,0x91,0x81,0x84,0xff,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x71,0x82,0x82,0x72,0xff,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x51,0x91,0x81,0x82,0x ff,0x81,0x81,0x81,0x81,0x91,0xa1,0xa2,0x81,0x81,0x81,0x81,0x91,0xa1,0xa1,0x a4,0xff,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0x91,0xc1,0x91,0x92,0x ff,0xa1,0xa1,0xc1,0xc1,0xa1,0xa1,0xd1,0xd1,0xc2,0xa1,0x91,0x93,0x92,0x81,0x 91,0x92,0x81,0x91,0x92,0x91,0xa1,0xa1,0xc2,0xa1,0xb1,0xa1,0x92,0x94,0xa1,0xb1,0xc1,0x81,0x83,0x92,0x94,0xa1,0xb1,0xc1,0x81,0x93,0xa2,0xa4,0x62,0x71,0x 81,0x81,0x91,0xa2,0xa2,0x91,0xc1,0xc1,0x93,0x92,0xa1,0xa1,0xa4,0xa1,0xb1,0x c1,0x81,0x93,0xa1,0x91,0x94,0x71,0x81,0x91,0x71,0xd2,0xc1,0xc1,0xc2,0x92,0x 91,0x91,0x91,0x82,0xff,0xa1,0xa1,0xa1,0xa2,0x81,0x81,0x81,0x92,0xa1,0xa3,0x81,0x72,0x82,0x9 1,0xa1,0x91,0x81,0x84,0x00};uchar code music[] ={//心愿0xff,0xff,0xff,0xff,0x82,0x92,0xa4,0xa2,0x92,0x82,0xa4,0x92,0x62,0x84,0x84,0x74,0x66,0x62,0x82,0x74,0x72,0x62,0x54,0x74,0x72,0x52,0x64,0x62,0x82,0x74,0x66, 0x82,0x92,0xa4,0xa2,0xc2,0xc2,0x92,0xa4,0x94,0x72,0x82,0x94,0x92,0xa2, 0x92,0x82,0x84,0x64,0x62,0x82,0x74,0x72,0x62,0x54,0x74,0x72,0x52,0x64, 0x62,0x82,0x74,0x66,0x82,0x92,0xa4,0xb2,0xa1,0x94,0x72,0x82,0x94,0x92,0xa1,0x84,0x62,0x7 2, 0x84,0x82,0x72,0x62,0x82,0x74,0x74,0x54,0xa8,0x82,0x92,0xa4,0xa2,0xc1,0x94,0x72,0x82,0x94,0x92,0xa1,0x84,0x62,0x7 2, 0x84,0x82,0x72,0x62,0x82,0x74,0x74,0x54,0x64,0xff,0x62,0x72,0x82,0x62,0x62,0x72,0x64,0xa4,0x94,0xa6,0x82,0x92,0xa4,0xa4,0xb4,0xa4,0x64,0x94,0x94,0x64,0x84,0x62,0x72,0x8 4, 0x82,0x92,0x92,0x82,0x74,0x72,0x82,0x92,0x52,0x82,0x82,0x92,0xa4,0x82,0x92,0xa4,0xa4,0xb4,0xa4,0x64,0x94,0x94,0x64,0x84,0x62,0x72,0x84, 0x82,0x92,0x92,0x82,0x74,0x72,0x82,0x92,0x52,0x86,0x74,0x66,0x00 };uchar code music[] ={//烟火0xff,0xff,0xff,0xff,0x52,0x84,0x52,0x81,0x91,0x94,0x82,0x92,0xa2,0xb2,0xa2,0x91,0x81,0x8 3,0x81,0xa2,0xc2,0xc3,0xb1,0xb2,0xa2,0x96,0x82,0x52,0x52,0x81,0x91,0x94,0xff,0xa2,0xb1,0xa1,0xa2,0x91,0x81,0x84,0xff,0x82,0x52,0x51,0xa2,0x91,0x94,0x82,0x71,0x81,0x82,0x64,0xff,0x82,0x52,0x51,0xa2,0x91,0x94,0xff,0xa2,0xb1,0xc1,0xc2,0x81,0x81,0x84,0x82,0xc2,0xc2,0xb1,0xb1,0xb2,0xa 2,0x94,0x92,0xa1,0x91,0x82,0x84,0xff,0x81,0x91,0xa1,0xb1,0xa4,0xa4,0xa2,0x71,0xa1,0xa1,0x93,0x92,0x82,0x8 1,0x71,0x71,0x81,0x84,0x81,0x91,0xa1,0xb1,0xa4,0xa4,0xa2,0x71,0xa1,0xa1,0x92,0x81,0x84,0xff,0x61,0x81,0x61,0x61,0x81,0x81,0x62,0xc1,0xc4,0xff,0xc1,0xc1,0xc1,0xb1,0xa1,0xb1,0xb2,0xa1,0xa1,0xff,0x52,0x51,0x92,0x91,0x94,0x82,0x71,0x81,0x82,0x91,0xa1,0xff,0x82,0xa2,0xf2,0xd2,0xc1,0xd1,0xd2,0xd2,0xc2,0x81,0x81,0xff,0x91,0xa1,0xb2,0xa1,0xb1,0xb1,0xc2,0x91,0xff,0xc1,0xc1,0xc1,0xb1,0xa1,0xb1,0xb2,0xa1,0xa1,0xff,0x52,0x51,0x92,0x91,0x94,0x82,0x71,0x81,0x82,0x91,0xa1,0xff,0x82,0xa2,0xf2,0xd2,0xc1,0xd1,0xd2,0xd2,0xc2,0x81,0x81,0xff,0x91,0xa1,0xb3,0xc1,0xc2,0x91,0xa1,0xb3,0xc1,0xc2,0x92,0x84,0xff,0x81,0x71,0x81,0x71,0x81,0x91,0x91,0x81,0x91,0x81,0x93,0x51,0xc4,0xa1,0x 91,0x91,0x83,0x92,0xa2,0xb2,0xa1,0xa1,0xff,0x92,0x81,0x61,0x62,0x62,0xd2,0xd1,0xc1,0xc1,0xc1,0xc1,0xd2,0xe1,0xd 1,0xe1,0xd1,0xc1,0xc4,0xff,0xc1,0xc1,0xc1,0xb1,0xa1,0xb1,0xb2,0xa1,0xa1,0xff,0x52,0x51,0x92,0x91,0x94,0x82,0x71,0x81,0x82,0x91,0xa1,0xff,0x82,0xa2,0xf2,0xd2,0xc1,0xd1,0xd2,0xd2,0xc2,0x81,0x81,0xff,0x91,0xa1,0xb2,0xa1,0xb1,0xb1,0xc2,0x91,0xff,0xc1,0xc1,0xc1,0xb1,0xa1,0xb1,0xb2,0xa1,0xa1,0xff,0x52,0x51,0x92,0x91,0x94,0x82,0x71,0x81,0x82,0x91,0xa1,0xff,0x82,0xa2,0xf2,0xd2,0xc1,0xd1,0xd2,0xd2,0xc2,0x81,0x81,0xff,0x91,0xa1,0xb3,0xc1,0xc2,0x91,0xa1,0xb3,0xc1,0xc2,0x92,0x84,0xff,0x82,0xa2,0xf2,0xd2,0xc1,0xd1,0xd2,0xd2,0xc1,0x82,0x81,0xff, 0x91,0xa1,0xb3,0xc1,0xc2,0x91,0xa1,0xb3,0xc1,0xc2,0x92,0x86,0x00 };uchar code music[] ={//是非题0xff,0xff,0xff,0xff,0x32,0x42,0x54,0x54,0x52,0x42,0x32,0x12,0x24,0x56,0x12,0x22,0x34,0x34,0x42,0x32,0x22,0x12,0x04,0x36,0x32,0x52,0x64,0x64,0x92,0x72,0x62,0x52,0x54,0x82,0x12,0x14,0x22,0x3 2,0x44,0x42,0x52,0x64,0x54,0x33,0x21,0x26,0x32,0x42,0x54,0x54,0x52,0x42,0x32,0x12,0x24,0x56,0x62,0x72,0x84,0x84,0x92,0x82,0x82,0x32,0x63,0x61,0x56,0x62,0x72,0x84,0x84,0x92,0x82,0x62,0x62,0x54,0x82,0x12,0x14,0x22,0x3 2,0x44,0x42,0x52,0x63,0x71,0x72,0x82,0x82,0x92,0x96,。
基于AT89C52单片机的音乐盒设计

对于单片机来说,产生不同频率的脉冲是非 常方便的,利用单片机的定时/计数器来产生这样 的方波频率信号。因此,需要弄清楚音乐中的音 符和对应的频率,以及单片机定时计数的关系。
基于AT89C52单片机的音乐盒设计
指导老师:XXXXX
专业:电子信息工程
姓名:XXXXX 学号:0000000
论文结构
课题意义、任务及要求
应用软件简介
设计方案
设计结构
系统电路图
Page
2
设计意义
传统的音乐盒多是机械音乐盒,其工作原理是通过齿 轮带动一个带有铁钉的铁桶转动,铁桶上的铁钉撞击铁 片制成的琴键,从而发出声音但是,机械式的音乐盒体 积比较大,比较笨重,且发音单调。水、灰尘等外在因 素,容易使内部金属发音条变形,从而造成发音跑调。 另外,机械音乐盒放音时为了让音色稳定,必须放平不 能动摇,而且价格昂贵,不能实现大批量生产。 本文设计的音乐盒,是基于单片机设计制作的电子 式音乐盒。与传统的机械式音乐盒相比更小巧,能演奏 多个曲目且携带方便。电子式音乐盒动力来源是电池, 制作工艺简单,可进行批量生产,且价格便宜。基于单 片机制作的电子式音乐盒,控制功能强大,可根据需要 选歌,使用方便。根据存储容量的大小,可以尽可能多 的存储歌曲。另外,可以设计彩灯外观效果,使音乐盒 的功能更加丰富。
Page
11
发音电路及数码显示电路设计
发音块设计主要器件是蜂鸣器。根据实际需要,使其与AT89C52 的p2.0口相接,另一引脚接地,实现演奏曲目的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sbit speaker=P1^2; //定义音乐输出端口,需要连接到对应的喇叭,请参考电路图
unsigned char timer0h,timer0l,time;
//童话数据表
code unsigned char sszymmh[]={ 5,2,1, 5,3,1, 4,3,1, 3,3,2, 3,3,1, 4,3,1, 3,3,2,
time=sszymmh[i+();
}
}
}
其余只需将数据表替换即可
东风破
6,3,1, 3,3,1, 5,3,1, 2,3,1, 3,3,1, 1,3,1, 2,3,1,
3,3,2, 2,3,2, 2,3,1, 3,3,1, 2,3,2, 1,3,2, 5,3,6,
5,2,2, 1,3,2, 1,3,2, 1,3,2, 3,3,2, 5,3,1, 5,3,1,
5,3,1, 5,3,1, 5,3,2, 3,3,2, 2,3,2, 2,3,1, 3,3,1,
/******************************************************************/
void main(void)
{
unsigned char k,i;
TMOD=1; //置CT0定时工作方式1
EA=1;
ET0=1;//IE=0x82 //CPU开中断,CT0开中断
// 音阶频率表 低八位
code unsigned char FREQL[]={
0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
6,2,1, 2,3,1, 2,3,1, 3,3,1, 3,3,1, 4,3,1, 4,3,1,
4,3,1, 3,3,1, 2,3,1, 1,3,1, 1,3,2, 0,0,0
问候歌
5,2,2, 1,3,2, 1,3,2, 1,3,2, 3,3,2, 5,3,1, 5,3,1,
5,3,1, 5,3,1, 5,3,2, 3,3,1, 3,3,1, 2,3,2, 2,3,1,
3,3,1, 2,3,2, 1,3,2, 6,2,6, 5,2,2, 1,3,2, 1,3,2,
1,3,2, 3,3,2, 5,3,1, 5,3,1, 5,3,1, 5,3,1, 5,3,2,
3,3,1, 4,3,1, 3,3,1, 2,3,1, 1,3,2, 2,3,1, 3,3,1,
6,2,2, 6,2,1, 1,3,1, 1,3,2, 7,2,2, 1,3,6 0,0,0
};
0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
} ;
/* 音乐处理函数 */
/******************************************************************/
void song()
{
TH0=timer0h;
0,0,0
简单爱
5,2,1, 1,3,1, 2,3,1, 3,3,1, 2,3,1, 3,3,1, 4,3,1,
5,3,1, 5,3,1, 5,3,1, 4,3,1, 3,3,1, 2,3,1, 2,3,3,
5,2,1, 1,3,1, 2,3,1, 3,3,1, 2,3,1, 3,3,1, 4,3,1,
void delay(unsigned char t)
{
unsigned char t1;
unsigned long t2;
for(t1=0;t1<t;t1++)
{
for(t2=0;t2<8000;t2++)
{
;
}
/******************************************************************/
/* 延时函数 */
/******************************************************************/
5,3,1, 3,3,1, 3,3,2, 5,3,10, 6,3,2, 6,3,1, 5,3,1,
5,3,2, 3,3,3, 5,3,1, 3,3,1, 2,3,1, 2,3,4, 2,3,2,
2,3,2, 1,3,2, 3,3,2, 2,3,2, 1,3,2, 6,2,2, 1,3,8,
// 音阶频率表 高八位
code unsigned char FREQH[]={
0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
2,3,1, 2,3,1, 4,3,1, 3,3,5, 1,3,1, 3,3,1, 5,3,1,
6,3,2, 6,3,1, 6,3,1, 7,3,1, 6,3,1, 5,3,1, 4,3,1,
}
TR0=0;
}
/******************************************************************/
/* 定时器中断函数 */
/******************************************************************/
2,3,1, 3,3,1, 1,3,6, 0,0,0
世上只有妈妈好
6, 2, 3, 5, 2, 1, 3, 2, 2, 5, 2, 2, 1, 3, 2, 6, 2, 1, 5, 2, 1,
6, 2, 4, 3, 2, 2, 5, 2, 1, 6, 2, 1, 5, 2, 2, 3, 2, 2, 1, 2, 1,
5,3,2, 5,3,2, 5,3,2, 3,3,2, 2,3,2, 2,3,2, 1,3,2,
2,3,2, 1,3,2, 2,3,2, 3,3,2, 3,3,10, 1,3,2, 1,3,2,
2,3,2, 3,3,2, 2,3,2, 3,3,2, 5,3,2, 6,3,2, 5,3,2,
6,2,1, 5,2,1, 6,2,1, 1,3,1, 2,3,1, 3,3,1, 5,3,1,
6,3,4, 5,3,2, 5,3,2, 5,3,2, 6,3,3, 7,3,1, 6,3,2,
5,3,2, 3,3,2, 3,3,2, 3,3,1, 2,3,1, 2,3,2, 2,3,8,
TL0=timer0l;
TR0=1;
delay(time);
}
/******************************************************************/
/* 主函数 */
2,3,2, 1,3,2, 6,2,6, 5,2,2, 5,3,1, 5,3,1, 5,3,1,
5,3,1, 5,3,2, 5,2,2, 5,3,1, 5,3,1, 5,3,1, 5,3,1,
5,3,2, 5,2,2, 5,3,1, 5,3,1, 5,3,1, 5,3,1, 5,3,2,
5,3,1, 5,3,1, 5,3,1, 6,3,1, 5,3,2, 3,3,2, 1,3,2,
1,3,1, 6,2,1, 2,3,1, 2,3,1, 3,3,1, 3,3,1, 1,3,2,
5,3,1, 1,3,1, 5,2,1, 1,3,1, 7,2,1, 1,3,3, 1,3,1,
void t0int() interrupt 1
{
TR0=0;
speaker=!speaker;
TH0=timer0h;
TL0=timer0l;
TR0=1;
}
/******************************************************************/
基于单片机C52的音乐播放C语言程序
//此程序在硬件上调试通过
//本程序的单片机晶振采用11.0592M
若无反应,可能会因为开发板不同,需对程序稍作修改,同时要正确连接插针。
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
};
while(1)
{
i=0;
while(i<100){ //音乐数组长度 ,唱完从头再来
k=sszymmh[i]+7*sszymmh[i+1]-1;
timer0h=FREQH[k];
timer0l=FREQL[k];
3,3,1, 4,3,1, 3,3,1, 4,3,1, 3,3,1, 2,3,1, 1,3,1,
1,3,1, 3,3,1, 5,3,1, 6,3,2, 6,3,1, 6,3,1, 5,3,1,