您好,欢迎访问三七文档
蜂鸣器唱歌#includereg52.h#defineucharunsignedcharbitflag;//标志音乐输出脚电平的高低sbitspk=P0^1;ucharptr=0x00;//取音符ucharhigh;//计数器高位ucharlow;//计数器低位//本曲谱为新年好,前两个十六进制表示发声频率,后一个表示发声时间,0xFF,0xFF表示休止符//0x00表示结束/*ucharcodemusic[]={0xfe,0x2a,0x7f,0xfe,0x2a,0x7f,0xfe,0x2a,0xff,0xfd,0x81,0xff,//新年好0xfe,0x84,0x7f,0xfe,0x84,0x7f,0xfe,0x84,0xff,0xfe,0x2a,0xff,0xfe,0x2a,0x7f,0xfe,0x84,0x7f,0xfe,0xc0,0xff,0xfe,0xc0,0xff,0xfe,0x99,0x7f,0xfe,0x84,0x7f,0xfe,0x55,0xff,0xff,0xff,0xff,0xfe,0x55,0x7f,0xfe,0x84,0x7f,0xfe,0x99,0xff,0xfe,0x99,0xff,0xfe,0x84,0x7f,0xfe,0x55,0x7f,0xfe,0x84,0xff,0xfe,0x2a,0xff,0xfe,0x84,0x7f,0xfe,0x84,0x7f,0xfe,0x55,0xff,0xfd,0x81,0xff,0xfe,0x05,0x7f,0xfe,0x55,0x7f,0xfe,0x2a,0xff,0xff,0xff,0xff,0x00};*/ucharcodemusic[]={0xf8,0x8b,0x7f,0xfd,0x08,0x7f,0xfd,0x08,0x7f,0xfd,0x08,0x7f,//兰花草0xfd,0x08,0xff,0xfc,0xab,0xff,0xfc,0x4a,0x7f,0xfc,0xab,0x7f,0xfc,0x4a,0x7f,0xfc,0x0b,0x7f,0xfb,0x8f,0xff,0xff,0xff,0xff,0xfd,0xc7,0x7f,0xfd,0xc7,0x7f,0xfd,0xc7,0x7f,0xfd,0xc7,0x7f,0xfd,0xc7,0xff,0xfd,0x81,0xff,0xfd,0x08,0x7f,0xfd,0x81,0x7f,0xfd,0x81,0x7f,0xfd,0x33,0x7f,0xfd,0x08,0xff,0xff,0xff,0xff,0xfd,0x08,0x7f,0xfd,0xc7,0x7f,0xfd,0xc7,0x7f,0xfd,0x81,0x7f,0xfd,0x08,0xff,0xfc,0xab,0xff,0xfc,0x4a,0x7f,0xfc,0xab,0x7f,0xfc,0x4a,0x7f,0xfc,0x0b,0x7f,0xfb,0x8f,0xff,0xfa,0x14,0xff,0xfa,0x14,0x7f,0xfc,0x4a,0x7f,0xfc,0x4a,0x7f,0xfc,0x0b,0x7f,0xfb,0x8f,0xff,0xfd,0x08,0xff,0xfc,0xab,0x7f,0xfc,0x4a,0x7f,0xfc,0x0b,0x7f,0xfb,0x03,0x7f,0xfb,0x8f,0xff,0xff,0xff,0xff,0x00};/*生日歌ucharcodemusic[]={0xfd,0x81,0x7f,0xfd,0x81,0x7f,0xfe,0xc0,0xff,0xfe,0x84,0xff,0xfe,0x84,0xff,0xfe,0x05,0xff,//a0xfd,0xc7,0xff,0xff,0xff,0xff,0xfe,0x99,0x7f,0xfe,0x99,0x7f,0xfe,0x84,0xff,//40xfe,0x2a,0xff,0xfe,0x55,0xff,0xfe,0x2a,0xff,0xff,0xff,0xff,0xfd,0x81,0x7f,0xfd,0x81,0x7f,//b0xfd,0xc7,0xff,0xfd,0x81,0xff,0xfe,0x2a,0xff,0xfe,0x05,0xff,0xff,0xff,0xff,0xfd,0x81,0x7f,0xfd,0x81,0x7f,//20xfd,0xc7,0xff,0xfd,0x81,0xff,0xfe,0x55,0xff,0xfe,0x2a,0xff,0xff,0xff,0xff,0xfd,0x81,0x7f,0xfd,0x81,0x7f,//30xfe,0xc0,0xff,0xfe,0x84,0xff,0xfe,0x84,0xff,0xfe,0x05,0xff,0xfd,0xc7,0xff,0xff,0xff,0xff,0xfe,0x99,0x7f,0xfe,0x99,0x7f,0xfe,0x84,0xff,//40xfe,0x2a,0xff,0xfe,0x55,0xff,0xfe,0x2a,0xff,0xff,0xff,0xff,0xfd,0x81,0x7f,0xfd,0x81,0x7f,//b0xfe,0x2a,0xff,0xff,0xff,0xff,0xfd,0x81,0x7f,0xfd,0x81,0x7f,//30xfe,0xc0,0xff,0xfe,0x84,0xff,0xfe,0x84,0xff,0xfe,0x05,0xff,0xfd,0xc7,0xff,0xff,0xff,0xff,0xfe,0x99,0x7f,0xfe,0x99,0x7f,0xfe,0x84,0xff,//40xfe,0x2a,0xff,0xfe,0x55,0xff,0xfe,0x2a,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00};*/voidInit(void);//初始化函数voidDelayMs(unsignedinttime);//毫秒级延时函数voidmain(){uchartime;Init();TH0=high;TL0=low;while(1){if(music[ptr]!=0xFF&&music[ptr]!=0x00)//判断是否是正常音符{TR0=0;spk=1;DelayMs(10);//间歇TR0=1;high=music[ptr];//取设置频率数值的高8位low=music[ptr+1];//取设置频率数值的低8位time=music[ptr+2];//取发声时间DelayMs(time);ptr+=3;}elseif(music[ptr]==0xFF)//判断是否是休止符{time=music[ptr+2];DelayMs(time);ptr+=3;}else//结束符,停止2秒后继续{TR0=0;spk=1;DelayMs(2000);ptr=0;}}}/**********************************************************************************名称:Count1(void)interrupt1*功能:设置计时器0溢出中断,每中断一次改变P2_3引脚电平*********************************************************************************/voidCount1(void)interrupt1{TH0=high;TL0=low;if(flag==0)//改变P2_3引脚电平{spk=0;flag=1;}else{spk=1;flag=0;}}/**********************************************************************************名称:Init()*功能:设置计数器0工作方式,16位计数,溢出中断方式**********************************************************************************/voidInit(){TMOD=0x01;//定时器0处于计时方式,16位EA=1;ET0=1;//定时器0溢出中断}/**********************************************************************************名称:DelayMs(unsignedinttime)*功能:延时time*1ms时间*********************************************************************************/voidDelayMs(unsignedinttime){unsignedinti;unsignedintj;for(j=0;jtime;j++)//每个循环约3ms{for(i=0;i363;i++){;}}}
本文标题:单片机蜂鸣器唱歌
链接地址:https://www.777doc.com/doc-4662590 .html