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

📄 51音乐.c

📁 8051系列的音乐播放系统 音乐播放 简单易用
💻 C
字号:
                    /*6Mhz晶振工作*/
#include <at89x51.h>
#define uint unsigned int
#define uchar unsigned char
sbit BUZZER=P1^6;                    //声音输出接口,可自定义
uint m,i,rti,l;
/**************************************************************/
//在6M频率下的高低音音频率表,toneh为高字节,toneh1为低字节
//此段不需要更改。
/*************************************************************/
uchar code toneh[14]={0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
uchar code toneh1[14]={0x22,0x56,0x85,0x9a,0xc1,0xe3,0x03,0x10,0x2b,0x42,0x4c,0x60,0x71,0x81};

/************************************************************
以下为用户自定义内容。
song[]为用户想要的音乐乐谱,1~7为高音。a~g为低音
length[]为音长,就是每一个音节放音的长度。
************************************************************/
                   
uchar code song[]="123112313455345556543256543215111511abcaabcacdeecdeeefedcbefedcbaeaaaeaa";        //音谱,把你喜欢的乐谱加入就可
uchar code length[]="444444444444444422224422224422224444444444444444444422224422224422224444";      //音长                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ; 
void timer0(void)interrupt 1           //音谱定时器
{
  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;
     default:ti=50;break;
	}

 return(ti);
}


void main()
{
  m=0;
  TMOD=0X11;
  BUZZER=0;
  TH0=toneh[0];
  TL0=toneh1[0];
  TH1=0x0c;               //音长定时器125ms中断
  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]);         //把音谱加入寄存器并送入定时器0。
      l=length[i]-0x30;           //把音长加入寄存器
		while(m<l);               //等待音长结束
      m=0;                        //音长清归零
      i++;
    }
}

⌨️ 快捷键说明

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