拿去吧,不謝!
ujchcj.jpg (214.84 KB, 下載次數(shù): 33)
下載附件
2019-6-20 12:43 上傳
// -------------------- 擁抱你的離去 ---------------
#include<reg51.h>
#define uint8 unsigned char
#define uint16 unsigned int
sbit Music=P2^0;
uint16 code FreTab_Low[7]={262,294,330,349,392,440,494}; //低音頻率表
uint16 code FreTab_Mid[7]={523,578,659,698,784,880,988}; //中音頻率表
uint16 code FreTab_Hight[7]={1046,1175,1318,1397,1568,1760,1976}; //高音頻率表
uint8 code ybnlc[]={
0x06,0x08,0x06,0x04,0x06,0x04,0x06,0x04,0x11,0x04,0x06,0x04,0x05,0x04,0x06,0x0f,
0x11,0x04,0x12,0x04,0x13,0x08,0x13,0x08,0x15,0x04,0x15,0x04,0x13,0x04,0x12,0x04,0x13,0x0f,
0x13,0x04,0x15,0x04,0x12,0x08,0x12,0x08,0x12,0x04,0x13,0x04,0x12,0x04,0x11,0x04,0x12,0x0f,
0x12,0x04,0x13,0x04,0x06,0x08,0x06,0x04,0x06,0x04,0x06,0x04,0x11,0x04,0x06,0x04,0x05,0x04,
0x05,0x04,0x03,0x0f,
0x06,0x08,0x06,0x08,0x06,0x04,0x11,0x04,0x06,0x04,0x05,0x04,0x06,0x0f,
0x11,0x04,0x12,0x04,0x13,0x08,0x13,0x08,0x15,0x04,0x15,0x04,0x13,0x04,0x12,0x04,0x13,0x0f,
0x13,0x04,0x15,0x04, 0x12,0x08, 0x12,0x04, 0x12,0x04, 0x12,0x04, 0x11,0x04, 0x12,0x0f,
0x06,0x08,0x06,0x04,0x05,0x04,0x06,0x12,
0x11,0x08,0x12,0x08,0x13,0x04,0x13,0x08,0x13,0x04,0x13,0x04,
0x12,0x04,0x12,0x08,0x13,0x04,0x13,0x08,0x13,0x04,0x13,0x08,0x15,0x08,
0x16,0x04,0x16,0x08,0x16,0x04,0x16,0x04,0x15,0x04,0x15,0x08,0x16,0x0f,
0x15,0x04,0x16,0x04,
0x21,0x08,0x21,0x04,0x21,0x04,
0x16,0x04, 0x16,0x04,0x15,0x04,0x15,0x0c,0x15,0x04,
0x15,0x04, 0x16,0x04,0x15,0x04,0x13,0x04,0x13,0x12,
0x15,0x08, 0x13,0x04,0x12,0x04,0x12,0x0c,0x12,0x04,
0x13,0x04, 0x12,0x04,0x11,0x04,0x12,0x08,
0x15,0x08, 0x13,0x04,0x12,0x04,
0x12,0x08, 0x12,0x04,0x12,0x04,0x12,0x04,
0x13,0x04, 0x12,0x04,0x11,0x04,0x06,0x0a,
0x06,0x08, 0x05,0x0a,0x06,0x04, 0x07,0x08,
0x05,0x04, 0x13,0x08,0x05,0x08, 0x06,0x0f,
0x11,0x08,0x12,0x08,0x13,0x04,0x13,0x08,0x13,0x04,0x13,0x04,
0x12,0x04,0x12,0x08,0x13,0x04,0x13,0x08,0x13,0x04,0x13,0x08,0x15,0x08,
0x16,0x04,0x16,0x08,0x16,0x04,0x16,0x04,0x15,0x04,0x15,0x08,0x16,0x0f,
0x15,0x04,0x16,0x04,
0x21,0x08,0x21,0x04,0x21,0x04,
0x16,0x04, 0x16,0x04,0x15,0x04,0x15,0x0c,0x15,0x04,
0x15,0x04, 0x16,0x04,0x15,0x04,0x13,0x04,0x13,0x12,
0x15,0x08, 0x13,0x04,0x12,0x04,0x12,0x0c,0x12,0x04,
0x13,0x04, 0x12,0x04,0x11,0x04,0x12,0x08,
0x15,0x08, 0x13,0x04,0x12,0x04,
0x12,0x08, 0x12,0x04,0x12,0x04,0x12,0x04,
0x13,0x04, 0x12,0x04,0x11,0x04,0x06,0x0a,
0x06,0x08, 0x05,0x0a,0x06,0x04, 0x07,0x08,
0x05,0x04, 0x13,0x08,0x05,0x08, 0x06,0x0f,
0x11,0x08,0x12,0x08,0x13,0x04,0x13,0x08,0x13,0x04,0x13,0x04,
0x12,0x04,0x12,0x08,0x13,0x04,0x13,0x08,0x13,0x04,0x13,0x08,0x15,0x08,
0x16,0x04,0x16,0x08,0x16,0x04,0x16,0x04,0x15,0x04,0x15,0x08,0x16,0x0f,
0x15,0x04,0x16,0x04,
0x21,0x08,0x21,0x04,0x21,0x04,
0x16,0x04, 0x16,0x04,0x15,0x04,0x15,0x0c,0x15,0x04,
0x15,0x04, 0x16,0x04,0x15,0x04,0x13,0x04,0x13,0x12,
0x15,0x04,0x16,0x04,
0x21,0x08,0x21,0x04,0x21,0x04,
0x16,0x04, 0x16,0x04,0x15,0x04,0x15,0x0c,0x15,0x04,
0x15,0x04, 0x16,0x04,0x15,0x04,0x13,0x04,0x13,0x12,
0x15,0x04,0x15,0x04, 0x16,0x04,0x15,0x04,0x13,0x04,0x13,0x12,
0x00,0x00
};
uint16 Fre; //存放獲取頻率值的變量
void Timer_Init()
{
TMOD=0x11;
EA=1;
ET0=1;
ET1=0;
TR0=0;
TR1=0;
}
void Timer0_i() interrupt 1
{
TH0=Fre/256;
TL0=Fre%256;
if(Music==0)
Music=1;
else Music=0;
}
void Music_Play(uint8 *MusicTab)
{
uint8 *pMusic;
uint8 temp,i;
pMusic=MusicTab; //將歌曲首地址給指針變量
while(*pMusic!=0)
{
if((*pMusic&0xf0)==0x00)
Fre=65536-1000000/FreTab_Low[*pMusic&0x0f];
else if((*pMusic&0xf0)==0x10)
Fre=65536-1000000/FreTab_Mid[*pMusic&0x0f];
else if((*pMusic&0xf0)==0x20)
Fre=65536-1000000/FreTab_Hight[*pMusic&0x0f];
TH0=Fre/256; //計(jì)算頻率初值,賦高八位
TL0=Fre%256; //計(jì)算頻率初值,賦低八位
TH1=0x3c; //定時(shí)器1賦初值,定時(shí)50ms
TL1=0xb0;
pMusic++; //獲得節(jié)拍值
temp=*pMusic;
TR0=1; //開(kāi)啟定時(shí)器T0
TR1=1; //開(kāi)啟定時(shí)器T1
for(i=0;i<temp;i++)
{
while(TF1==0); //判斷定時(shí)器1是否溢出
TH1=0x3c;
TL1=0xb0;
TF1=0;
}
pMusic++;
}
}
void main()
{
Timer_Init();
while(1)
{
Music_Play(ybnlc);
}
}
|