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

📄 radio.c

📁 一个DVD组合机的MCU代码,FM,机芯出入仓,功放的控制及DVD数据通过通信来访问.
💻 C
字号:
/*-TAB=2-------------------------------------------------------------------*/
/**------------------------------------------------------------------------*
 *                                                                         *
 * NAME:radio.C                                                            *
 *                                                                         *
 *                                                                         *
 * UPDATE: 2002/8/15  YCD                                                  *
 *                                                                         *
 *                                                                         *
 *                                                                         *
 *-------------------------------------------------------------------------*/
#include "..\SRC\ZM.H"
#include "..\SRC\radio.h"
#include "..\SRC\KEY.h"
#include "..\SRC\display.h"


void DelayMs(BYTE aCount);
void HideIcon(BYTE aIcon);
void ShowIcon(BYTE aIcon);
void WriteRadio(void);
void RadioMonoProc(void);
void PopFmFrequency(void);
void PopAmFrequency(void);
void ClrRadioCLK(void);


BYTE 	gRadioBuf[4];  /*24 23...1 0 HIGH-->LOW */
bit	 	gboolOnlyMono;
extern BYTE Vw_FMBuf[3];
extern BYTE Vw_AMBuf[3];
bit  gboolFmEnter;
bit  gboolAmEnter;
BYTE gAsmToCRtnValue;
bit  gboolSt;
bit  gRadioStMo=P1.3;
bit  gRadioCLK=P1.2;

/**
 *@void InitRadio(void)
 *@update 2002/8/23
 */
void InitRadio(void)
{
	gboolFmEnter=0;
	gboolAmEnter=0;
	Lsb_InitRadio();
}

/**
 *@void RadioUpSearch(BYTE aBand)
 *@update 2002/8/23
 */
void RadioSearch(BYTE aBand,BYTE aUpOrDow)
{
	unionByteToWord Frq;
	WORD Begin,End,Level;

	aBand&=0x18;

	if(aBand==BAND_FM){
		Begin=FM_BEGIN_FREQUENCY;
		End=FM_END_FREQUENCY;
		Level=FM_LEVEL;
	}
	else{
		Begin=AM_BEGIN_FREQUENCY;
		End=AM_END_FREQUENCY;
		Level=AM_LEVEL;
	}

	gRadioBuf[0]=PRESET_MODE|aBand|PORT_0|SEARCH_LEVEL_0;

	Frq.mByte.mHi=gRadioBuf[1]&0X7f;
	Frq.mByte.mLow=gRadioBuf[2];

	if(aUpOrDow) Frq.mInt+=Level;
	else Frq.mInt-=Level;

	if(Frq.mInt>End) Frq.mInt=Begin;
	else if(Frq.mInt<Begin) Frq.mInt=End;

	gRadioBuf[1]=Frq.mByte.mHi;
	gRadioBuf[2]=Frq.mByte.mLow;

	WriteRadio();
}


/**
 *@void RadioUpSearch(BYTE aBand)
 *@update 2002/8/23
 */
void RadioUpSearch(BYTE aBand)
{
	RadioSearch(aBand,1);
}


/**
 *@void RadioDownSearch(BYTE aBand)
 *@update 2002/8/23
 */
void RadioDownSearch(BYTE aBand)
{
	RadioSearch(aBand,0);
}


/**
 *@void SaveDataFromAt24c(BYTE aAt24cAddr,BYTE aLen)
 *@default Buf: gRadioBuf
 *@update 2002/8/23
 */
void Lsb_WriteAt24c(WORD anAddrLen);
void SaveDataToAt24c(BYTE aAt24cAddr,BYTE aLen)
{
	WORD Addr_Len;
	if(aLen<5 && aLen>0){
		Addr_Len=aAt24cAddr;
		Addr_Len<<=8;
		Addr_Len|=aLen;
		Lsb_WriteAt24c(Addr_Len);
	}
}

/**
 *@void SaveDataFromAt24c(BYTE aAt24cAddr,BYTE aLen)
 *@default Buf: gRadioBuf
 *@update 2002/8/23
 */
void Lsb_ReadAt24c(WORD anAddrLen);
void LoadDataFromAt24c(BYTE aAt24cAddr,BYTE aLen)
{
	WORD Addr_Len;
	if(aLen<5 && aLen>0){
		Addr_Len=aAt24cAddr;
		Addr_Len<<=8;
		Addr_Len|=aLen;
		RadioMonoProc();
		Lsb_ReadAt24c(Addr_Len);
	}
}



/**
 *@void SaveRadioToFlash(BYTE aNumber)
 *@update 2002/8/23
 */
void SaveRadioToFlash(BYTE aNumber)
{
	aNumber<<=2;
	if(aNumber<FLASH_LEN){
		Lsb_ReadRadio();
		gRadioBuf[3]=0x55;
		SaveDataToAt24c(aNumber,4);
	}
}

/**
 *@void LoadRadioFromFlash(BYTE aNumber)
 *@update 2002/8/23
 */
void LoadRadioFromFlash(BYTE aNumber)
{
	aNumber<<=2;
	if(aNumber<FLASH_LEN){
		LoadDataFromAt24c(aNumber,4);
		if(gRadioBuf[3]==0x55){
			gRadioBuf[0]&=0x2f;
			WriteRadio();
		}
	}
}




/**
 *@void RadioFm(void)
 *@update 2002/9/8
 */
void LocalRadioFm(void)
{
	BYTE Addr=BAND_FM_BEGIN_ADDR*4;
	if(gboolFmEnter==1) PopFmFrequency();
	else {
		LoadDataFromAt24c(Addr,4);
		if(gRadioBuf[3]!=0x55){
			gRadioBuf[0]=0X00;
			gRadioBuf[1]=0X1e;
			gRadioBuf[2]=0Xc6;
		}
	}
	gRadioBuf[0]&=0x2f;
	gboolOnlyMono=0;
	WriteRadio();
	ClrRadioCLK();
}


/**
 *@void RadioFm(void)
 *@update 2002/9/8
 */
void LocalRadioAm(void)
{
	BYTE Addr=BAND_AM_BEGIN_ADDR*4;
	if(gboolAmEnter) PopAmFrequency();
	else{
		LoadDataFromAt24c(Addr,4);
		if(gRadioBuf[3]!=0x55){
			gRadioBuf[0]=PRESET_MODE|BAND_AM|PORT_0|SEARCH_LEVEL_0;
			gRadioBuf[1]=0x02;
			gRadioBuf[2]=0x12;
		}
	}
	gRadioBuf[0]&=0x2f;
	gboolOnlyMono=0;
	WriteRadio();
	ClrRadioCLK();
}


/**
 *@WORD GetRadioFrequency(void)
 *@update 2002/8/23
 */
WORD GetRadioFrequency(void)
{
	unionByteToWord Data;
	Data.mByte.mHi=gRadioBuf[1]&0x7f;
	Data.mByte.mLow=gRadioBuf[2];
	return(Data.mInt);
}


/**
 *@WORD GetRadioFrequency(void)
 *@update 2002/8/23
 */
WORD GetRadioCurValue(void)
{
	unionByteToWord Data;
	Data.mByte.mHi=gRadioBuf[1]&0x7f;
	Data.mByte.mLow=gRadioBuf[2];
	return(Data.mInt);
}


/**
 *@updte 2002/9/18
 *@void WriteRadio(void)
 */
void WriteRadio(void)
{
	RadioMonoProc();
	Lsb_WriteRadio();
}

/**
 *@void InitRadio(void)
 *@update 2002/8/23
 */
void RadioMonoProc(void)
{
	if(gboolOnlyMono)	gRadioBuf[0]|=0x20;
	else gRadioBuf[0]&=0xdf;
}


/**
 *@void PushFmFrequency(void)
 *@update 2002/8/23
 */
void PushFmFrequency(void)
{
	gboolFmEnter=1;
	Vw_FMBuf[0]=gRadioBuf[0];
	Vw_FMBuf[1]=gRadioBuf[1];
	Vw_FMBuf[2]=gRadioBuf[2];
}

/**
 *@void PopFmFrequency(void)
 *@update 2002/8/23
 */
void PopFmFrequency(void)
{
	gRadioBuf[0]=Vw_FMBuf[0];
	gRadioBuf[1]=Vw_FMBuf[1];
	gRadioBuf[2]=Vw_FMBuf[2];
}


/**
 *@void PushAmFrequency(void)
 *@update 2002/8/23
 */
void PushAmFrequency(void)
{
	gboolAmEnter=1;
	Vw_AMBuf[0]=gRadioBuf[0];
	Vw_AMBuf[1]=gRadioBuf[1];
	Vw_AMBuf[2]=gRadioBuf[2];
}

/**
 *@void PopAmFrequency(void)
 *@update 2002/8/23
 */
void PopAmFrequency(void)
{
	gRadioBuf[0]=Vw_AMBuf[0];
	gRadioBuf[1]=Vw_AMBuf[1];
	gRadioBuf[2]=Vw_AMBuf[2];
}


/**
 *@BYTE HaveBoundFrequency(void)
 *@update 2002/8/23
 */
BYTE HaveBoundFrequency(void)
{
	BYTE Result;
	Result=(gRadioBuf[3]==0x55)?1:0;
	return(Result);
}


void RadioMonoStereoShow(void)
{
	if( gRadioCLK==0 && gboolSt!=gRadioStMo ){
		if(gRadioStMo) HideIcon(ICON_ST);
		else ShowIcon(ICON_ST);
		gboolSt=gRadioStMo;
	}
}



/**
 *@void ClrRadioCLK(void)
 *@update 2002/9/8
 */
void ClrRadioCLK(void)
{
	gRadioCLK=0;
}

/**
 *@void RadioFm(void)
 *@update 2002/9/8
 */
void RadioMonoStereo(void)
{
	gboolOnlyMono=~gboolOnlyMono;
	if(gboolOnlyMono) HideIcon(ICON_ST);
	WriteRadio();
	ClrRadioCLK();
	DelayMs(250);
}


/**
 *@BYTE IsSaveFrequency(BYTE aBand)
 *@return 0xff:no other:have
 *@update 2002/11/5
 */
BYTE IsSaveFrequency(BYTE aBand)
{
	BYTE  	Buf[4];
	BYTE 		BeginAddr;
	BYTE 		n;
	BYTE 		i;
	BYTE  	Result=0xff;

	if(aBand==BAND_FM){
		n=BAND_FM_TOTAL;
		BeginAddr=BAND_FM_BEGIN_ADDR;
	}
	else {
		n=BAND_AM_TOTAL;
		BeginAddr=(BAND_AM_BEGIN_ADDR)<<2;
	}

	for(i=0;i<4;i++){
		Buf[i]=gRadioBuf[i];
	}

	for(i=0;i<n;i++){
		LoadDataFromAt24c(BeginAddr,4);
		if( (Buf[2]==gRadioBuf[2])&&( (Buf[1]&0x7f)==(gRadioBuf[1]&0x7f) ) ){
			Result=i;
			break;
		}
		BeginAddr+=4;
	}

	for(i=0;i<4;i++){
		gRadioBuf[i]=Buf[i];
	}

	return(Result);
}

⌨️ 快捷键说明

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