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

📄 music.c

📁 c51 驱动风鸣器使发出动人音乐
💻 C
📖 第 1 页 / 共 2 页
字号:
		    {
		    	P_Dat1621 = High	;
		    }
		    else
		    {
		    	P_Dat1621 = Low	;
		    }
		    P_Clk1621 = High	;
		    Data_Tmp	>>= 1	;
		}
		P_Cs1621 = High	;
	}

	/************************************************/
	void	Update_Disp( void )
	{
		uchar	i;
		for	( i=0;i<8;i++ )
		{
			WriteHt1621( (15+i*2),Disp_Buf0[i] );
			Disp_Buf0[i] = 0	;
		}
	}

	/************************************************/
	void	Lcd_Initial( void)
	{
		Lcd_Command( Lcd_On )	;
		Lcd_Command( Sys_En )	;
		Lcd_Command( Bais_4 )	;
		Update_Disp()			;
	}

	/************************************************/
	void	Make_Flag_Data( uchar LCD_Flag )
	{
		Disp_Buf0[ Lcd_Flag_Tab[(LCD_Flag)][0] ]	|=	Lcd_Flag_Tab[(LCD_Flag)][1]	;
	}

	/************************************************/
	void	Make_Char_Data( void )
	{
		uchar	i,Tmp;
		for	( i = 0; i < 4; i++ )
		{
			Tmp	=	Disp_Char_Buf[i];
			if	( i )
			{
				Disp_Buf0[i+1]	=	Char_Byte_Tab[Tmp]	;
			}
			else
			{
				Tmp	<<=	1;
				Disp_Buf0[0]	=	Char_Word_Tab[Tmp]	;
				Disp_Buf0[1]	=	Char_Word_Tab[Tmp+1];
			}
		}
	}

	/******************************************
		; Delay
	******************************************/
	void	Delay_10us(void)
	{
			nop	;
			nop	;
			nop	;
			nop	;
			nop	;
			nop	;
	}

//-----------------------------------------
	void	Delay_ms(uchar count)
	{
		uchar	i=0	;
		uchar	j=0	;
		for	(i=0;i<count;i++)
		{
			for	(j=0;j<78;j++)
			{
				Delay_10us()	;
			}
		}
	}

	//===================================================
 	uchar	code	ZNPA_Tab[]=
 	{//	频率,节拍,频率,节拍,
		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,
 	};

 	uchar	code	BYGH_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	Music_Pro( BYTE Music_Tab[] )
 	{
 		uchar	i,j;

 		for	( i=0;Music_Tab[i]>0;i++ )
 		{
 			if	( Music_Tab[i]==0xff )
 			{
 	 			P_Buzz	=	True;
 	 			Delay_ms( 100 );
 			}
 			else
 			{
				Music10ms_Cnt	=	0;
	 			Pulse1WideTmp	=	Music_Tab[i];
				Pulse2WideTmp	=	Music_Tab[++i];
				while( Music10ms_Cnt<Pulse2WideTmp )
				{
 					P_Buzz	=	~P_Buzz;
 					for	( j=0;j<Pulse1WideTmp;j++ )
 					{
	 					nop;
 					}
 				}
 			}
 		}
		P_Buzz	= True	;
 	}


	/************************************************/
	void	CharDisplay( void )
	{
		Disp_Char_Buf[0]	=	LCD_M	;
		Disp_Char_Buf[1]	=	LCD_V	;
		Disp_Char_Buf[2]	=	LCD_5	;
		Disp_Char_Buf[3]	=	EepLed_Mode+1	;
		Make_Char_Data();
		Make_Flag_Data(F_Lcd_X1)		;
	}

	/*===============================================================
		; Time = 100us
	===============================================================*/
	void	T1_INT(void)		interrupt     T1_Seq
	{
		TF1	= OFF	;
		TH1	=	TH_10MS		;
		TL1	=	TL_10MS		;
		Music10ms_Cnt++		;
	}

/************************************************/
	void	Lcd_Led( void )
	{
		switch	(EepLed_Mode)
		{
			case	0:
					P_RedLed		=	Low	;
					P_GreenLed		=	High;
					P_BlueLed		=	High;
				break	;
			case	1:
					P_RedLed		=	Low	;
					P_GreenLed		=	Low;
					P_BlueLed		=	High;
				break	;
			case	2:
					P_RedLed		=	High;
					P_GreenLed		=	Low	;
					P_BlueLed		=	High;
				break	;
			case	3:
					P_RedLed		=	High;
					P_GreenLed		=	Low	;
					P_BlueLed		=	Low	;
				break	;
			case	4:
					P_RedLed		=	High;
					P_GreenLed		=	High;
					P_BlueLed		=	Low	;
				break	;
			case	5:
					P_RedLed		=	Low	;
					P_GreenLed		=	High;
					P_BlueLed		=	Low	;
				break	;
			case	6:
					P_RedLed		=	Low	;
					P_GreenLed		=	Low	;
					P_BlueLed		=	Low	;
				break	;
		}
	}

	/************************************************/
	void	main( void )
	{
		TMOD=	0x11		;
		TH1	=	TH_10MS		;
		TL1	=	TL_10MS		;
		TR1	=	ON	;
		ET1	=	ON	;
		EA	= 	ON	;

		Lcd_Initial();

		while( 1 )
		{
			Lcd_Led()		;
			CharDisplay()	;
			Update_Disp()	;
			Delay_ms(250)	;
			Delay_ms(250)	;
			Delay_ms(250)	;
			Delay_ms(250)	;

			if	(EepLed_Mode&0x01)
			{
				Music_Pro(BYGH_Tab);
			}
			else
			{
				Music_Pro(ZNPA_Tab)	;
			}
			++EepLed_Mode		;
			if	(EepLed_Mode>6)
			{
				EepLed_Mode=0	;
			}
		}
	}

⌨️ 快捷键说明

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