⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 123.c

📁 用单片机实现的茉莉花曲子音乐的播放功能!值得学习参考!
💻 C
字号:
                    /*12Mhz晶振工作*/
#include <at89x51.h>
#define uint unsigned int
#define uchar unsigned char
sbit BUZZER=P2^4;
uint m,i,rti,l;

//在12M频率下的高低音音频率表,toneh为高字节,toneh1为低字节
uchar code toneh[15]={0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
uchar code toneh1[15]={0x22,0x56,0x85,0x9a,0xc1,0xe3,0x03,0x10,0x2b,0x42,0x4c,0x60,0x71,0x81,0xff};
                   
/*******************************************************************************************
以下为用户自定义
song[]为音乐的音谱。1~7为高音。8为停音节,a~g为低音。
length[]为每个音谱的音第。如1/4节拍。1/2节拍       以下为一首名曲“茉莉花”
*****************************************************************555**************************/
  uchar code song[]="335676556558335676556558555356655832353211211321322356755235231feef1223121fee8"; //音谱,把你喜欢的乐谱加入就可
uchar code length[]="422422442241422422442241444224444142242242244222244242244422222244444422222442"; //音长                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ; 
void timer0(void)interrupt 1
{
 if(rti!=14)
  { 
   BUZZER=!BUZZER;        //输出
   TH0=toneh[rti];        //装入音谱
   TL0=toneh1[rti];
  }
}

void timerl(void)interrupt 3
{
  TH1=0x0c;
  TL1=0xdc;              //音长定时值。125毫秒
  m++;                   //音长计数器
}

playc(char ch)
{
  int ti;
  switch(ch)
  {
    case'a': ti=0;break;
    case'b': ti=1;break;
    case'c': ti=2;break;
    case'd': ti=3;break;
    case'e': ti=4;break;
    case'f': ti=5;break;
    case'g': ti=6;break;
    case'1': ti=7;break;
    case'2': ti=8;break;
    case'3': ti=9;break;
	 case'4': ti=10;break;
    case'5': ti=11;break;
    case'6': ti=12;break;
    case'7': ti=13;break;
	 case'8': ti=14;break;
     default:ti=50;break;
	  }

	  return(ti);
}


void main()
{
  m=0;
  TMOD=0X11;
  P1_0=0;
  TH0=toneh[0];
  TL0=toneh1[0];
  TH1=0x0c;                 //定时器1为125毫秒中断
  TL1=0xdc;
  IP=0x08;                  //定时器1优先级高。
  EA=1;
  ET0=1;
  ET1=1;
  TR0=1;
  TR1=1;
  i=0;
  while(1)
    {
      
 	   if(song[i]=='\0')        //是否播放完毕。
		  i=0;
      rti=playc(song[i]);         //把音谱加入寄存器
      l=length[i]-0x30;        //把音长力入寄存器
		while(m<l);          //等待音长结束
      m=0;                //音长清归零
      i++;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -