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

📄 fm_mdfm1_803a.c

📁 车载 液晶显示器的主控程序(主要使用芯片为 MYSON MTV512 单片机、RealTek 2323 Scare 芯片、TVP5147(视频解码)。配Sharp 8寸液晶显示器 )。
💻 C
字号:
//x.hu, for FM


#include "..\Header\Include.h"
#if (_CUSTOM_TYPE == _CUSTOM_HAOZHEN)

#if (_FM_MODULATION == _ENABLE)

void CAdjustMute(void)
{
	if (stAudioData.audioFlag & _BIT7) {
		CAudioFmMuteClear();
	}
	else {
		CAudioFmMuteSet();
	}
}
void CAudioFmMuteSet(void)
{
	// here, switch to unused audion chanel to implement mute function
	stAudioData.audioFlag |= _BIT7;
	CAudioSelChannel(_AUDIO_CHANNEL_NC);
	#if (_MUTE_SAVE == _ENABLE)
	CEepromSaveAudioData();
	#endif

}
void CAudioFmMuteClear(void)
{
	stAudioData.audioFlag &= (~_BIT7);
	#if (_MUTE_SAVE == _ENABLE)
	CEepromSaveAudioData();
	#endif
	if (GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_AV_PORT) {
		CAudioSelChannel(_AUDIO_CHANNEL_AV1);
	}
	else if (GET_INPUTPORT_TYPE(stSystemData.InputSource) == _VIDEO_AV2_PORT) {
		CAudioSelChannel(_AUDIO_CHANNEL_AV2);
	}
	else {
		CAudioSelChannel(_AUDIO_CHANNEL_NC);
	}
}

BYTE CAudio2FM(void)
{
	BYTE len, n;
	BYTE error=_I2C_OK;
	
	pData[0] = 6;
	pData[1] = _FM_ADDRESS;
	pData[2] = ((stAudioData.audioFmOffset * 2+_AUDIO_FM_BASE)>>8)&0x7f;	// offset X 2: FM step is 0.1MHz,
	pData[3] = (stAudioData.audioFmOffset * 2+_AUDIO_FM_BASE)&0xff;			// 50KHz per step
	pData[4] = _FM_CBYTE;
	pData[5] = _FM_BBYTE;

    if (3 <= pData[0])
    {
        len     = pData[0];
        //I2CSendAddr(pData[1], pData[2], 0);   
		error = CI2cStart(pData[1]);
		if (error == _I2C_BUSY)
			return error;	
		
        for (n = 2; n < len; n++) 
			//I2CSendByte(pData[n]);
			error = CI2cSendByte(pData[n]);
			if (error == _I2C_BUSY)
				return error;

        //I2CSendStop();
        CI2cStop();
    }
	// wait for statable
	CTimerDelayXms(10);
	return error;
}

//--------------------------------------------------
// show fm frequency
// format is: 88.0MHz
// fm range is 88.0-89.2
//--------------------------------------------------
void CAudioShowFMFreq(void)
{
	#define _FM_FREQ_COL	(25-1)
	if (stAudioData.audioFmOffset > _AUDIO_FM_OFFSET_MAX) {
		stAudioData.audioFmOffset = 0;
	}
	//COsdFxChange1bitColor(ROW(0), COL(_FM_FREQ_COL + 0), WIDTH(7), HEIGHT(1), _CP_WHITE, _MUCP_TEXTBG);
	COsdFxHLine(ROW(0), COL(_FM_FREQ_COL + 0), LENGTH(1), _8_, _WRITE_BYTE1);
	if (stAudioData.audioFmOffset < 10) {
		COsdFxHLine(ROW(0), COL(_FM_FREQ_COL + 1), LENGTH(1), _8_, _WRITE_BYTE1);
		COsdFxHLine(ROW(0), COL(_FM_FREQ_COL + 2), LENGTH(1), _DOT_, _WRITE_BYTE1);
		COsdFxHLine(ROW(0), COL(_FM_FREQ_COL + 3), LENGTH(1), (_0_+stAudioData.audioFmOffset), _WRITE_BYTE1);
	}
	else {
		COsdFxHLine(ROW(0), COL(_FM_FREQ_COL + 1), LENGTH(1), _9_, _WRITE_BYTE1);
		COsdFxHLine(ROW(0), COL(_FM_FREQ_COL + 2), LENGTH(1), _DOT_, _WRITE_BYTE1);
		COsdFxHLine(ROW(0), COL(_FM_FREQ_COL + 3), LENGTH(1), (_0_+stAudioData.audioFmOffset-10), _WRITE_BYTE1);
	}
	COsdFxHLine(ROW(0), COL(_FM_FREQ_COL + 5), LENGTH(1), _M_, _WRITE_BYTE1);
	COsdFxHLine(ROW(0), COL(_FM_FREQ_COL + 6), LENGTH(1), _H_, _WRITE_BYTE1);
	COsdFxHLine(ROW(0), COL(_FM_FREQ_COL + 7), LENGTH(1), _Z_, _WRITE_BYTE1);
	#undef _FM_FREQ_COL
}

//--------------------------------------------------
// dir ---  0: 		step down
//			1: 		step up
//			else:	no step down or up, only write Freq
//--------------------------------------------------
void CAdjustFMFreq(BYTE ucDir)
{
	BYTE result;
	if (ucDir == _FM_STEP_UP){
		stAudioData.audioFmOffset++;
		if (stAudioData.audioFmOffset > _AUDIO_FM_OFFSET_MAX) {
			stAudioData.audioFmOffset = 0;
		}
	}
	else if (ucDir == _FM_STEP_DOWN){
		if (stAudioData.audioFmOffset<=0) {
			stAudioData.audioFmOffset = _AUDIO_FM_OFFSET_MAX;
		}
		stAudioData.audioFmOffset--;
	}
	else if (ucDir == _FM_STEP_NONE) {
		if (stAudioData.audioFmOffset > _AUDIO_FM_OFFSET_MAX) {
			stAudioData.audioFmOffset = _AUDIO_FM_OFFSET_DEFAULT;
		}
	}
	result = CAudio2FM();
	//CAudioShowFMFreq();
}
#endif	//end of #if (_FM_MODULATION == _ENABLE)

#endif

⌨️ 快捷键说明

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