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

📄 lc72130.c

📁 用C语言写 C51控制的PLL(SANYO LC72131)收音
💻 C
字号:
/**********************************************************************
		公司名:		广州强智数码科技有限公司
		文件名:		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

/*************************************************************
			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;

	uchar	data	Radio_Data_Buf[4]	;
	uchar	data	CTRL_TMP[2]			;
	uchar	data	Radio_Ctrl_Buf[4]	;
	BYTE	data	Lock_Data			;
	WORD	data	IF_Data 			;
	uint	data	Fre_Disp_Buf	;

	/****************************************************
	LC72130的调试体会:
	LC72130是一个锁相环,最终会输出一个控制电压来控制FM\VCO
	或者AM\VCO的振荡频率,在调试时要特别注意这一点,如果它的
	输出电压在程序的控制之下程现0.01V左右的变化,说明程序是
	对的,而且分频系数也是对的,所以在此时会随着LC72130输出
	电压的变化出现不同的电台,倘若程序的时序是对的,但送分频
	系数不在规定的范围,LC72130的输出电压会保留在低电压0V或
	者高电压10V,在调试时千万别认为出不来声音就是程序时序部
	分有问题,当然首先必须保证硬件没问题.接着保证软件时序没
	有出错,然后用软件控制相关扩展口输出看是不是达到预定的
	效果,如果达到证明软件时序没问题.
	LC72130的调试关键在于晶振,分频系数与参考频率的设置,通
	过程序控制相应的IO口电平,以此来检验程序是不是正确.
	****************************************************/
	/****************************************************
	在自动调频时一定要先静音然后再读中频,否则读出的中频值
	不正确,我就吃了这个亏,让我浪费了一天的时间,另要注意在
	用仿真机调试收音头时干扰过大,只有可怜的一两个台,但用了
	单片机之后,收台效果就不错
	****************************************************/
	/****************************************************
	72130操作步骤:
	软件选择晶振,晶振分频比,本振分频比,初始化扩展IO
	工作原理如下:
	先确定本振大小,再读回中频值,如果中频值在误差的范围内,
	则证明收到电台,停止改变本振分频值,之后必须判断是否是
	立体声,本振大小等于步进值与本振分频值的乘积,也即是
	(FM/AM)VCO输出的频率值,
	****************************************************/

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

	//***************************************
	void	WByte_72130( BYTE DataTmp )
	{
		uchar	i;
		for	( i = 0; i < 8; i++ )
		{
			P_CLK72130=	False;
			Delay_10us()		;
			P_DI72130	=	(bit)(DataTmp&0x01);
			Delay_10us()		;
			P_CLK72130=	True;
			Delay_10us()		;
			DataTmp	>>=	1;
		}
	}

	//***************************************
	void	Read72130Rou( void )
	{
		uchar	i;

		for	( i=0; i<8; i++ )
		{
			Lock_Data		<<=	1;
			P_CLK72130=	True;
			Delay_10us()		;
			P_CLK72130=	False;
			Delay_10us()		;
			if	( P_DO72130 )
			{
				Lock_Data	|=	0x01;
			}
		}

		for	( i=0; i<16; i++ )
		{
			IF_Data		<<=	1;
			P_CLK72130=	True;
			Delay_10us()		;
			P_CLK72130=	False;
			Delay_10us()		;
			if	( P_DO72130 )
			{
				IF_Data	|=	0x01;
			}
		}
	}

	//****************************************
	void	Radio_Send_Data( uchar Array[] )
	{
		uchar	i;

		P_CE72130	=	False		;
		Delay_10us()				;
		WByte_72130(Array[0])		;
		Delay_10us()				;
		P_CE72130	=	True		;
		Delay_10us()				;
		for	( i=1; i<4; i++ )
		{
			WByte_72130(Array[i])	;
		}
		Delay_10us()				;
		P_CE72130	=	False		;
	}

	/************************************************
	i2 i1 - ul c19 c18 c17 c16 c15 c14 c13 c12 c11
	c10 c9 c8 c7 c6 c5 c4 c3 c2 c1 c0
	************************************************/
	void	Receive_Data(void)
	{
		P_CE72130	=	False;
		Delay_10us()		;
		WByte_72130(0x2a)	;
		Delay_10us()		;
		P_CE72130	=	True;

		Read72130Rou()	;
		F_Locked=OFF	;
		if	(Lock_Data&0x10)
		{
			F_Locked=ON	;
		}
		Delay_10us()		;
		P_CE72130		=	False;
	}

	/************************************************/
	void	Radio_SendData_IN1( void )
	{
		Radio_Data_Buf[ 0 ]	=	0x28		;
		Radio_Data_Buf[ 1 ]	=	EepFM_Fre[0]	;
		Radio_Data_Buf[ 2 ]	=	EepFM_Fre[1]	;
		Radio_Data_Buf[ 3 ]	=	CTRL_TMP[0]	;
		Radio_Send_Data( Radio_Data_Buf );
	}

	/************************************************/
	void	Radio_SendData_IN2( void )
	{
		Radio_Data_Buf[ 0 ]	=	0x29		;
		Radio_Data_Buf[ 1 ]	=	CTRL_TMP[1]	;
		Radio_Data_Buf[ 2 ]	=	B0001_0000	;
		Radio_Data_Buf[ 3 ]	=	B0001_0000	;	//	IFS=1  CT=4MS
		Radio_Send_Data( Radio_Data_Buf );
	}

	/************************************************
	;	FM频率范围: 	87.00MHZ -- 108MHZ
	;	F=10.7M 	S	=100K  = 2*50K
	;	10.7M/1S=IF/32MS  ==> IF=32MS*10.7M=342400
	;	10.7M/1S=IF/4MS  ==> IF=4MS*10.7M=42800
	/************************************************
	;	CTRL1_TMP
	;	R3-2-1-0 XS CTE DVS SNS
	;	CTRL2_TMP
	;	BO4-3-2-1 IO2-1 IOC2-1
	;	CTRL3_TMP
	;	DZ1 DZ0 UL1 UL0 DOC2-1-0 BO5
	;	CTRL4_TMP
	;	TEST2-1-0 IFS DLC TBC CT1 CT0
	/************************************************
	;	/BO3 - "1/0" - "MON/ST" CTRL --- BO3  - "0/1"
	;	/BO2 - "1/0" - OFF/IF&Mute   --- BO2  - "0/1"
	;	/BO1 - "1/0" - AM/FM   	  --- BO1  - "0/1"
	;	/IO2 - "1/0" - "ST/MON" IN   --- IO2  - "0/1"
	************************************************/

⌨️ 快捷键说明

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