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

📄 music.c

📁 c51 驱动风鸣器使发出动人音乐
💻 C
📖 第 1 页 / 共 2 页
字号:
/**********************************************************************
		公司名:		广州强智数码科技有限公司
		文件名:		FM100.c
		设计者:		王健强
		开始日:		2005-12-20 12:19
		完成日:		2006-2-7 11:49
----------------------------------------------------------------------
		MCU                       	stc89c51
		Crycle                    	12MHz
		Audio input selector		PT2314	;	FM	PC	MP
		2CH Audio Processor       	PT2314	;	Volume & Tone & Loud
		LCD Drive 					HT1621	;
		A/D 						LM324	;
		Template					DS18B20	;
		Remote transmit         	HT6222
**********************************************************************/

	#define		X0_Seq			0
	#define		T0_Seq			1
	#define		X1_Seq			2
	#define		T1_Seq			3
	#define		T2_Seq			5

	#include	< reg51.h >
	#include	< intrins.h >
	#include	"b.h"

/*************************************************************
           		Data Define
*************************************************************/
	#define		uchar	unsigned char
	#define		uint	unsigned int
	#define		BYTE	unsigned	char
	#define		WORD	unsigned	int

	#define		nop		_nop_()
	#define		True			1
	#define		False			0
	#define		High			1
	#define		Low				0
	#define		ON				1
	#define		OFF				0

	#define		Colck			12								//	clock
	#define		Xtal			12								//	mhz
	#define		Time_Base		(Xtal/Colck)
	#define		TH_10MS			(0xffff-10000*Time_Base/256)		//	定时时间(US)/时基/256
	#define		TL_10MS			(0xffff-10000*Time_Base)%256		//	定时时间(US)/时基%256

	#define		Lcd_On		0x8060
	#define		Lcd_Off		0x8040
	#define		Sys_En		0x8020
	#define		Bais_4		0x8520

	#define		F_Lcd_X1	0
	#define		F_Lcd_X2	1
	#define		F_Lcd_Bal	2
	#define		F_Lcd_FAD	3
	#define		F_Lcd_A		4
	#define		F_Lcd_MP	5
	#define		F_Lcd_X		6
	#define		F_Lcd_AM	7
	#define		F_Lcd_FM	8
	#define		F_Lcd_P1	9
	#define		F_Lcd_T		10
	#define		F_Lcd_X3	11
	#define		F_Lcd_X4	12
	#define		F_Lcd_MHZ	13
	#define		F_Lcd_KHZ	14
	#define		F_Lcd_AUX	15
	#define		F_Lcd_COL	16
	#define		F_Lcd_PC	17

	#define		LCD_0		0
	#define		LCD_1		1
	#define		LCD_2		2
	#define		LCD_3		3
	#define		LCD_4		4
	#define		LCD_5		5
	#define		LCD_6		6
	#define		LCD_7		7
	#define		LCD_8		8
	#define		LCD_9		9
	#define		LCD_A		10
	#define		LCD_B		11
	#define		LCD_C		12
	#define		LCD_d		13
	#define		LCD_E		14
	#define		LCD_F		15

	#define		LCD_Space	16
	#define		LCD_V		17
	#define		LCD_n		18
	#define		LCD_o		19
	#define		LCD_T		20
	#define		LCD_M		21
	#define		LCD_P		22
	#define		LCD_L		23
	#define		LCD_c		24

	#define		Dot_A		25
	#define		Dot_B		26
	#define		Dot_C		27
	#define		Dot_D		28
	#define		Dot_E		29
	#define		Dot_F		30
	#define		Dot_G		31

/*************************************************************
			P0
*************************************************************/
	sbit	P_DO72130		=	P0^0;
	sbit	P_CLK72130		=	P0^1;
	sbit	P_DI72130		=	P0^2;
	sbit	P_CE72130		=	P0^3;
	sbit	P_SDA			=	P0^4;
	sbit	P_SCK			=	P0^5;
	sbit	P_AD_Ctrl		=	P0^6;
	sbit	P_LoudLed		=	P0^7;

/*************************************************************
			P2
*************************************************************/
	sbit	P_RedLed		=	P2^7;
	sbit	P_GreenLed		=	P2^6;
	sbit	P_BlueLed		=	P2^5;

/*************************************************************
			P1
*************************************************************/
	sbit	P_18B20			=	P1^4;

/*************************************************************
			P3
*************************************************************/
	sbit	P_ADIn			=	P3^2;
	sbit	P_Remote		=	P3^3;
	sbit	P_Cs1621		=	P3^4;
	sbit	P_Clk1621		=	P3^5;
	sbit	P_Dat1621		=	P3^6;
	sbit	P_Buzz			=	P3^7;

/*************************************************************
		bdata max16 bytes ( 20h-3fh )
*************************************************************/

/*************************************************************
		data max24+80=104 bytes ( 08h-1fh & 30h-7fh )
*************************************************************/
	uchar	data	Disp_Buf0[8]	;
	uchar	data	Disp_Char_Buf[4];
	uchar	data	Temp_Result[2]	;
 	uchar	data	Music10ms_Cnt	;

 	uchar	data	Pulse2WideTmp	;//节拍
 	uchar	data	Pulse1WideTmp	;//音符

	uchar	data	EepLed_Mode		;


	uchar	code	Char_Word_Tab[]=
	{
	/*BAegf_xxxx,Bdcba_xxXx,*/
	  B0101_0000,B1111_0000,//0		LCD_0		0
	  B0000_0000,B0110_0000,//1     LCD_1		1
	  B0110_0000,B1011_0000,//2     LCD_2		2
	  B0010_0000,B1111_0000,//3     LCD_3		3
	  B0011_0000,B0110_0000,//4     LCD_4		4
	  B0011_0000,B1101_0000,//5     LCD_5		5
	  B0111_0000,B1101_0000,//6     LCD_6		6
	  B0000_0000,B0111_0000,//7     LCD_7		7
	  B0111_0000,B1111_0000,//8     LCD_8		8
	  B0011_0000,B1111_0000,//9     LCD_9		9
	  B0111_0000,B0111_0000,//A     LCD_A		10
	  B0010_0000,B1111_0010,//B     LCD_B		11
	  B0101_0000,B1001_0000,//C     LCD_C		12
	  B0110_0000,B1110_0000,//D     LCD_D		13
	  B0111_0000,B1001_0000,//E     LCD_E		14
	  B0111_0000,B0001_0000,//F     LCD_F		15
	/*BAegf_xxxx,Bdcba_xxXx,*/
	  B0000_0000,B0000_0000,//space LCD_Space	16
	  B0101_0000,B1110_0000,//U/V   LCD_V		17
	  B0101_0000,B0111_0000,//-     LCD_n		18
	  B0110_0000,B1100_0000,//o     LCD_o		19
	  B0000_0000,B0001_0010,//T     LCD_T		20
	  B0101_0000,B0111_0010,//M     LCD_M		21
	  B0111_0000,B0011_0000,//P     LCD_P		22
	  B0101_0000,B1000_0000,//L     LCD_L		23
	  B0110_0000,B1000_0000,//c     LCD_c		24
	/*BAegf_xxxx,Bdcba_xxXx,*/
	  B0000_0000,B0001_0000,//-     Dot_A		25
	  B0000_0000,B0010_0000,//-     Dot_B		26
	  B0000_0000,B0100_0000,//-     Dot_C		27
	  B0000_0000,B1000_0000,//-     Dot_D		28
	  B0100_0000,B0000_0000,//-     Dot_E		29
	  B0001_0000,B0000_0000,//-     Dot_F		30
	  B0010_0000,B0000_0000,//-     Dot_G		31
	};

	uchar	code	Char_Byte_Tab[]=
	{
	  /*Bdcba_xegf*/
	    B1111_0101,//0		LCD_0		0
	    B0110_0000,//1      LCD_1		1
	    B1011_0110,//2      LCD_2		2
	    B1111_0010,//3      LCD_3		3
	    B0110_0011,//4      LCD_4		4
	    B1101_0011,//5      LCD_5		5
	    B1101_0111,//6      LCD_6		6
	    B0111_0000,//7      LCD_7		7
	    B1111_0111,//8      LCD_8		8
	    B1111_0011,//9      LCD_9		9
	    B0111_0111,//A      LCD_A		10
	    B1100_0111,//b      LCD_B		11
	    B1001_0101,//C      LCD_C		12
	    B1110_0110,//d      LCD_d		13
	    B1001_0111,//e      LCD_E		14
	    B0001_0111,//f      LCD_F		15
	  /*Bdcba_xegf*/
	    B0000_0000,//space  LCD_Space	16
	    B1110_0101,//U/V    LCD_V		17
	    B0111_0101,//-      LCD_n		18
	    B1100_0110,//b      LCD_b		19
	    B0000_0010,//-      LCD_T		20
	    B0000_0010,//-      LCD_M		21
		B0011_0111,//P      LCD_P		22
		B1000_0101,//u      LCD_L		23
	    B1000_0110,//c      LCD_c		24
	  /*Bdcba_xegf*/
	    B0001_0000,//-      Dot_A		25
	    B0010_0000,//-      Dot_B		26
	    B0100_0000,//-      Dot_C		27
	    B1000_0000,//-      Dot_D		28
	    B0000_0100,//-      Dot_E		29
	    B0000_0001,//-      Dot_F		30
	    B0000_0010,//-      Dot_G		31
	};

	uchar	code	Lcd_Flag_Tab[][2]=
	{//	Buf(n),dot
		0,	B0000_0001,	//	LCD_Flag_X1		0
		0,	B0000_0010,	//	LCD_Flag_X2		1
		0,	B0000_0100,	//	LCD_Flag_Bal	2
		0,	B0000_1000,	//	LCD_Flag_FAD	3
		0,	B1000_0000,	//	LCD_Flag_A		4
		1,	B0000_0001,	//	LCD_Flag_MP		5
		1,	B0000_0010,	//	LCD_Flag_X		6
		1,	B0000_0100,	//	LCD_Flag_AM		7
		1,	B0000_1000,	//	LCD_Flag_FM		8
		3,	B0000_1000,	//	LCD_Flag_P1		9
		4,	B0000_1000,	//	LCD_Flag_T		10
		5,	B0000_0001,	//	LCD_Flag_X3		11
		5,	B0000_0010,	//	LCD_Flag_X4		12
		5,	B0000_0100,	//	LCD_Flag_MHZ	13
		5,	B0000_1000,	//	LCD_Flag_KHZ	14
		6,	B0001_0000,	//	LCD_Flag_AUX	15
		6,	B0010_0000,	//	LCD_Flag_COL	16
		6,	B0100_0000,	//	LCD_Flag_PC		17
	};

	/************************************************
			Ht1621驱动程序(24C128/PTC2323/Pt2314)
	************************************************/
	void	Lcd_Command( uint	Command )
	{
		uchar	i;

		P_Cs1621 = Low	;
		for	( i=0; i<12; i++ )
		{
			P_Clk1621 = Low	;
			if	(Command&0x8000)
			{
				P_Dat1621 = High	;
			}
			else
			{
				P_Dat1621 = Low	;
			}
			P_Clk1621 = High	;
			Command		<<=	1;
		}
		P_Cs1621 = High	;
	}

	/************************************************/
	void	Lcd_Write_Head(void)
	{
		P_Dat1621 = High	;
		nop	;
		P_Clk1621 = Low		;
		nop	;
		P_Clk1621 = High	;
		nop	;
		P_Dat1621 = Low		;
		nop	;
		P_Clk1621 = Low		;
		nop	;
		P_Clk1621 = High	;
		nop	;
		P_Dat1621 = High	;
		nop	;
		P_Clk1621 = Low		;
		nop	;
		P_Clk1621 = High	;
	}

	/************************************************/
	void	WriteHt1621( uchar	Addr_Tmp,uchar Data_Tmp )
	{
		uchar	i	;
		P_Cs1621 = Low	;
		Lcd_Write_Head()	;
		for (i=0;i<6;i++)
		{	//	set offset address
		    P_Clk1621 = Low	;
		    if (Addr_Tmp&0x20)
		    {
		    	P_Dat1621 = High	;
		    }
		    else
		    {
		    	P_Dat1621 = Low;
		    }
		    P_Clk1621 = High;
		    Addr_Tmp	<<= 1	;
		}

		for (i=0;i<8;i++)
		{	//	data output
		    P_Clk1621 = Low	;
		    if ( Data_Tmp&0x01 )

⌨️ 快捷键说明

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