p15_2.c

来自「单片机原理与应用实例教程 单片机原理与应用实例教程」· C语言 代码 · 共 74 行

C
74
字号
#include "REG51.H"
sbit SPK = P2^3;
unsigned char T0_Times = 0;
unsigned char code Music[] = {
		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  INT_T0(void) interrupt 1
{
	T0_Times ++;
	TH0 = 0xd8;
	TL0 = 0xef;
}
void Delay( int times )
{
	for( ; times > 0 ; times -= 2 )
	{
	}
}
main()
{
	int Tone = -1;
	char i = 0;
	SP 		= 0x50;
	TMOD 	= 0x01;
	TH0 	= 0xD8;
	TL0 	= 0xEF;
	IE  	= 0x82;
	while( 1 )
	{
		Tone++;
		if( Music[Tone] == 0 )
		{
			Tone = -1;
			Delay( 100 );
			continue;
		}
		if( Music[Tone] == 0xff )
		{
			TR0 = 0;
			Delay( 100 );
			continue;
		}
		TR0 = 1;
		while( T0_Times < Music[Tone+1] )
		{
			SPK = !SPK;
			Delay( Music[Tone] );
		}
		T0_Times = 0;
		Tone ++;
	}
}

⌨️ 快捷键说明

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