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

📄 音乐演奏(八月桂花遍地开).c

📁 用于单片机开发实验平台上
💻 C
字号:
#include <reg51.h>
unsigned char m;   //m为频率常数
unsigned char n=0; //n为节拍常数 
unsigned char i=0;
sbit bell=P1^1;
unsigned char code music_tab[] ={ 
0x18, 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(void)  
interrupt 1 using 1  //产生10MS精确定时
{  
TH0=(65536-10000)/256;   
TL0=(65536-10000)%256;   
n--;}
void delayms
(unsigned char a)  //微秒延时程序
{  while(--a);                  
}
void delay(void)   //延迟程序
{ int i,j; 
for(i=50;i--;i>0)  
for(j=10000;j--;j>0)  
;}
void main()
{ 
		    
TMOD=(TMOD&0xf0)|0x01;     
TH0=(65536-10000)/256;     
TL0=(65536-10000)%256;     
EA=1;     
ET0=1;     
TR0=0;        
while(1)     
{     
switch(music_tab[i])     
{        
case 0x00:            
i=0;delay(); break; // 曲终停顿一定时间        
case 0xff:            
i=i+1;delayms(100);break;  //遇到休止符停顿一定时间100微秒,再取下一个频率        
default:               
m=music_tab[i++];n=music_tab[i++];//取频率到m,取节拍到n
		                 
TR0=1;                 
while(n!=0)                  
{                  
bell=!bell;                  
delayms(4*m);//调整产生的频率,可以通过在m前的值来修正音调的高低
		                   
}    
TR0=0;      
}     
}
}

⌨️ 快捷键说明

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