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

📄 6 sing.c

📁 很好的51单片机仿真模板。
💻 C
字号:
#include "reg51.h" 
unsigned char Count; 
sbit _Speak =P2^3 ;     //蜂鸣器控制脚   
unsigned char code SONG[] ={     
	//祝你平安,以下为编码 
	0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,
	0x20,0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,
	0x1c,0x20,0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,
	0x80,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,
	0x39,0x10,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,
	0x20,0x2b,0x10,0x2b,0x10,0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,
	0x2b,0x20,0x2b,0x40,0x40,0x20,0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,
	0x80,0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,
	0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,
	0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,0x20,0x20,0x2b,0x10,0x26,0x10,
	0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,0x18,0x20,0x18,0x20,0x26,
	0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,
	0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,0x39,0x20,0x26,
	0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,0x20,0x10,
	0x2b,0x10,0x26,0x30,0x30,0x80,0x00, 
	//路边的野华不要采 ,  以下为这首歌的编码 
	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_Init()   //定时器 0 初始化函数 
{ 
	TMOD = 0x01;  //工作模式选择 
	IE    = 0x82;  //中断设置 
	TH0  = 0xD8;   //装初值 
	TL0  = 0xEF;   //12MZ晶振,10ms 
} 
 
void Time0_Int() interrupt 1    //定时器 0 中断子函数 
{ 
	TH0 = 0xD8; 
	TL0 = 0xEF; 
	Count++;   //长度加 1 
} 
/*------------------------------------------------- 
1MS 延时子程序 
-------------------------------------------------*/ 
void Delay_xMs(unsigned int x) 
{	unsigned int i,j; 
	for( i =0;i < x;i++ ) 
	{ 
		for( j =0;j<3;j++ ); 
	} 
} 
/*------------------------------------------------- 
功能:歌曲播放子程序 i 为播放哪一段曲目 
-------------------------------------------------*/ 
void Play_Song(unsigned char i) 
{ 
	unsigned char Temp1,Temp2; 
	unsigned int Addr; 
	Count = 0;      //中断计数器清 0 
	Addr = i * 217; 
	while(1) 
	{ 
		Temp1 = SONG[Addr++]; 
		if ( Temp1 == 0xFF )          //休止符 
		{ 
			TR0 = 0; 
			Delay_xMs(100); 
		} 
		else if ( Temp1 == 0x00 )    //歌曲结束符 
		{ 
			return; 
		} 
		else 
		{ 
			Temp2 = SONG[Addr++]; 
			TR0 = 1; 
			while(1) 
			{ 
				_Speak = ~_Speak; 
				Delay_xMs(Temp1); 
				if ( Temp2 == Count ) 
				{ 
					Count = 0; 
					break; 
				} 
			} 
		} 
	} 
} 
/*------------------------------------------------- 
功能:主程序 
-------------------------------------------------*/ 
void main() 
{ 
	Time0_Init();   //定时器 0 中断初始化 
	while(1) 
	{ 
		Play_Song(0);  //播放 
	} 
} 

⌨️ 快捷键说明

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