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

📄 e20_tun.c

📁 HSAV DR53E CF卡MP3录放板应用编程源代码
💻 C
字号:
#include "E20_main.h"           

void MTUN10msTimer(){      
    if (FTUNAutoTun && (gTUNAutoTunDelayTm == 0)){
        mTUN_AutoTuning();
    }
    if ((gTUNAutoTunDelayTm != 0) && (--gTUNAutoTunDelayTm == 0)){
        if (!FSeach_StopTuner) FTUNDirect = 1; 
        kTUN_Tuning();  //自动搜台
    }

    if (FTUNPLL_Enable && !FTUNPLL_Delay){
        FTUNPLL_Enable = 0;
        mTUNPLL_Data();      //收音声音
    }

    if (FTUNMuteChange){
        FTUNMuteChange = 0;                
        FAUDMute = 1;
        gAUDMuteTm = cAUDMuteTm1000;
        if (FTUNPLL_Delay) gAUDMuteTm = cAUDMuteTm0;
    }

    if (FTUNPLL_Delay && (gAUDMuteTm > cAUDMuteTm300) && (gAUDMuteTm < cAUDMuteTm360)){
        FTUNPLL_Delay = 0;
        FTUNPLL_Enable = 1;
//        FAUDMute = 1;
        gAUDMuteTm = cAUDMuteTm600;
    }
    return;
}



void mTUN_AutoTuning(){
    if (gTUNSearchTm == 0){
        kTUN_Tuning();
        FAUDMute = 1;
        gAUDMuteTm = cAUDMuteTm0;
    }
	if (!FTUNAutoTun) return;

    if (++gTUNSearchTm == 4){/*4 */
        FTUNCountStart = 1;
        mTUNPLL_Data();
        FTUNCountStart = 0;
    }
    else if (gTUNSearchTm > 14){	   /* 14 */
        gTUNSearchTm = 0;
        HTUNBiosIFIn();                                       
        gMain00 &= 0x0f;    

        if ((!FTUNBandMW                   
          && (gMain00==0x0a) && (gMain01>0x71) && (gMain01<0x77))
              || (FTUNBandMW
          && (gMain00 == 0) && (gMain01 >0x6d) && (gMain01<0x73))){     
            FTUNAutoTun = 1;     //搜台继续
            FTUNPLL_Enable = 1;
            MTUNAutoMemory();
        }
        else {
            mTUNPLL_Data();  
        }
    }
    return;
}


void MTUNAutoMemory(){
    BYTE gLocal_1;

    if (g2TUNEEPAddr < cEEPAddr_TUNStart+1000){
        if (FTUNDirect){
            if (!FTUNBandMW){
                gLocal_1 = 0x00;
                if (FFM_FreqLow5) gLocal_1 |= 0x02;
                if (!FNoAuto_StoreTuner) ++g2TUNEEPAddr;
                MEEP_ByteWrite(g2TUNEEPAddr,gTUN_FM_Freq); //记忆电台频率
                MEEP_ByteWrite(g2TUNEEPAddr+cEEPAddr_BandStart,gLocal_1);//记忆AM/FM
                
            }
            else {
                gLocal_1 = 0x01;
                if (!FNoAuto_StoreTuner) ++g2TUNEEPAddr;
                MEEP_ByteWrite(g2TUNEEPAddr,gTUN_MW_Freq);
                MEEP_ByteWrite(g2TUNEEPAddr+cEEPAddr_BandStart,gLocal_1);
            }

        }
        else {

            if (!FTUNBandMW){
                gLocal_1 = 0x00;
                if (FFM_FreqLow5) gLocal_1 |= 0x02;
                if (!FNoAuto_StoreTuner && (g2TUNEEPAddr > (cEEPAddr_TUNStart+1))) --g2TUNEEPAddr;
                MEEP_ByteWrite(g2TUNEEPAddr,gTUN_FM_Freq);
                MEEP_ByteWrite(g2TUNEEPAddr+cEEPAddr_BandStart,gLocal_1);
            }
            else {
                gLocal_1 = 0x01;
                if (!FNoAuto_StoreTuner && (g2TUNEEPAddr > (cEEPAddr_TUNStart+1))) --g2TUNEEPAddr;
                MEEP_ByteWrite(g2TUNEEPAddr,gTUN_MW_Freq);
                MEEP_ByteWrite(g2TUNEEPAddr+cEEPAddr_BandStart,gLocal_1);
            }
            MEEP_ByteWrite(cEEPAddr_TUNBand,FTUNBandMW);
MDEBUG(0x32);
MDEBUG(FTUNBandMW);
        }

        if (FSeach_StopTuner) {
            gTUNAutoTunDelayTm = 0;
            FTUN_AutoTm = 0;
            FTUNAutoTun = 0;
        }
        FSeach_StopTuner = 0; 
        g2TUNAddrRead = g2TUNEEPAddr;
    }
    else {
        MTUN_AutoTunCancel();
    }
    MDIP_TUNNumber(gCursorMove-1);
    MEEP_ByteWrite(cEEPAddr_TUNBand,FTUNBandMW);
MDEBUG(0x42);
MDEBUG(FTUNBandMW);
    return;
}


void kTUN_Tuning(){

    if (FTUNBandMW) mTUNTuning_MW();  //调频
    else mTUNTuning_FM();

    MDIP_TUNShow(gCursorMove-2);
    MDIP_TUNNumber(gCursorMove-1);
    if (!FTUNAutoTun){
        FTUNMuteChange = 1;
    	FTUNPLL_Delay = 1;
    }
    else {
    	FTUNPLL_Enable = 1;
    	FTUNPLL_Delay = 0;
	}
    return;
}

void mTUNTuning_FM(){

    if (FTUNDirect){
        if (FFM_FreqLow5) FFM_FreqLow5 = 0;
        else FFM_FreqLow5 = 1;
        if (!FFM_FreqLow5) ++gTUN_FM_Freq;
        if ((gTUN_FM_Freq > cTUN_FM_USA_Max2) 
         || (FFM_FreqLow5 && (gTUN_FM_Freq == cTUN_FM_USA_Max2))){
            if (gTUN_FM_Freq >= cTUN_FM_USA_Max2) {
                gTUN_FM_Freq = 0;
                if (!FSeach_StopTuner && !FNoAuto_StoreTuner) {  //只有自动才返回
                    g2TUNEEPAddr = cEEPAddr_TUNStart+1;
                    gTUN_FM_Freq = 3;
                }
            }
            g2TUNAddrRead = g2TUNEEPAddr;

            FFM_FreqLow5 = 0;
            gTUN_MW_Freq = 0;
            MDIP_TUNShow(gCursorMove-2);
            MDIP_TUNNumber(gCursorMove-1);
            FHandToAutoTuner = 0;
            gTUNAutoTunDelayTm = 0;
            FAUDMuteStaChange = 1;
            FTUNAutoTun = 0;
            gAUDMuteTm = cAUDMuteTm0;
            FAUDMute = 1;
        }
    }
    else {
        if ((gTUN_FM_Freq == 0) && !FFM_FreqLow5) {
            gTUN_FM_Freq = cTUN_FM_USA_Max2 + 1;
        }
        else {
            if (FFM_FreqLow5) FFM_FreqLow5 = 0;
            else FFM_FreqLow5 = 1;
            if (FFM_FreqLow5) --gTUN_FM_Freq;
        }
    }
    return;
}

void mTUNTuning_MW(){

    if (FTUNDirect){   //向前搜台
        if (!FHandToAutoTuner) ++gTUN_MW_Freq;
        if (FTUN_AMSTEP9k){
            if (gTUN_MW_Freq > cTUN_MW_Europe_Max) {
                gTUN_MW_Freq = 0;
                MTUN_AutoTunCancel();
                g2TUNEEPAddr = cEEPAddr_TUNStart+1;
                g2TUNAddrRead = g2TUNEEPAddr;
                FTUNBandMW = 0;
                gTUN_FM_Freq = MEEP_ByteRead(g2TUNEEPAddr);
                FTUNAutoTun = 0;	                                   													   
                FPress_Enter_Modify = 0;
                mTUNPLL_Data();

                MDIP_TUNShow(gCursorMove-2);
                MDIP_TUNNumber(gCursorMove-1);
            }
        }
        else {
            if (gTUN_MW_Freq > cTUN_MW_USA_Max) {
                gTUN_MW_Freq = 0;
                MTUN_AutoTunCancel();
                MDIP_TUNShow(gCursorMove-2);
                MDIP_TUNNumber(gCursorMove-1);

                FTUNBandMW = 0;
                g2TUNAddrRead = cEEPAddr_TUNStart+1;
                gTUN_FM_Freq = MEEP_ByteRead(g2TUNAddrRead);
                FTUNAutoTun = 0;	                                   													   
                mTUNPLL_Data();
            }
        }
    }
    else {            //向后搜台
        if (gTUN_MW_Freq == 0){
            if (FTUN_AMSTEP9k) gTUN_MW_Freq = cTUN_MW_Europe_Max + 1; 
            else gTUN_MW_Freq = cTUN_MW_USA_Max + 1;  
        }
        --gTUN_MW_Freq;
    }
    return;
}
void MTUN_AutoTunCancel(){ //stop search tuning
    if (FTUNAutoTun){
        FTUNAutoTun = 0;         
//        FTUNMute = 0;
        gTUNSearchTm = 0;
        FTUNMuteChange = 1;
        FTUNPLL_Delay = 1;
    }
    return;
}


/*======================================================================================*/
/*--------------------------------------------------------------------------------------*/
/*                LC72131 Hardware Program Unit                                         */
/*--------------------------------------------------------------------------------------*/
/*======================================================================================*/

void mTUNPLL_Data(){
    BYTE gLocal_0;

    if (!FTUNBandMW){ 
        g2Main00 = gTUN_FM_Freq * 2;
        g2Main00 += 1964;  
        if (FFM_FreqLow5) g2Main00 += 1;
        HTUNLC7213xStart();
        HTUNLC7213xByteWrite(cTUNAddressIN1);
        HTUNLC7213xData();
        HTUNLC7213xByteWrite(g2Main00);
        HTUNLC7213xByteWrite(g2Main00 >> 8);          
        gLocal_0 = cTUNPLL25k; 
        if (FTUNCountStart) gLocal_0 |= 0x04;				   
        HTUNLC7213xByteWrite(gLocal_0);
        HTUNLC7213xStop();

        HTUNLC7213xStart();
        HTUNLC7213xByteWrite(cTUNAddressIN2);
        HTUNLC7213xData();

/* BO4, BO3, BO2, BO1,    IO2, IO1, IOC2, IOC1  */
/* BO1 = AM/FM;   FM    = 0;                    */
/* BO2 = SEEK;    SEEK  = 1;                   	*/
/* BO3 = ST/MONO; ST    = 0;  	 	            */
/* BO4 =   						            	*/ 
/* IO1 = TUIN;    TU ON = 0;   	            	*/
/* IO2 = STIN;    ST ON = 0;   	               	*/
		
        gLocal_0 = cTUNFmCounterCtrl;
        if (FTUNAutoTun) gLocal_0 &= ~0x20;     //改输入脚
        if (FTUNStereoCTRL) gLocal_0 &= ~0x40; 
        HTUNLC7213xByteWrite(gLocal_0);
        HTUNLC7213xByteWrite(cTUNFmDoControl);
        HTUNLC7213xByteWrite(0x13);
        HTUNLC7213xStop();
    } 
    else {
        g2Main00 = gTUN_MW_Freq + 97;
        if (FTUN_AMSTEP9k) g2Main00 = gTUN_MW_Freq + 108;

        g2Main00 <<= 4;
        HTUNLC7213xStart();
        HTUNLC7213xByteWrite(cTUNAddressIN1);
        HTUNLC7213xData();									   
        HTUNLC7213xByteWrite(g2Main00 & 0x00ff);
        HTUNLC7213xByteWrite(g2Main00 >> 8);                     
        
        gLocal_0 = cTUNPLL10k;
        if (FTUN_AMSTEP9k) gLocal_0 = cTUNPLL09k;
        if (FTUNCountStart) gLocal_0 |= 0x04;
        HTUNLC7213xByteWrite(gLocal_0);
        HTUNLC7213xStop();
         
        HTUNLC7213xStart();
        HTUNLC7213xByteWrite(cTUNAddressIN2);
        HTUNLC7213xData();
        gLocal_0 = cTUNAmCounterCtrl;
        if (FTUNAutoTun) gLocal_0 &= ~0x20; 
        HTUNLC7213xByteWrite(gLocal_0);
        HTUNLC7213xByteWrite(cTUNAwDoControl);
        HTUNLC7213xByteWrite(0x13);
        HTUNLC7213xStop();
    }

    return;
}

void HTUNBiosIFIn(){
    BYTE gLocal_1;

    HTUNLC7213xStart();
    HTUNLC7213xByteWrite(cTUNAddressOUT);
    MUSDELAY();
    HTUNLC7213xData();
    MUSDELAY();
					  
    pPLL_CK(0);
    MUSDELAY();
    gMain00 = HTUNLC7213xByteRead();
    gMain01 = HTUNLC7213xByteRead(); 
    gLocal_1 = HTUNLC7213xByteRead();  
    HTUNLC7213xStop();                   
    FpTUNInputIF = 0;
    if ((gMain00 & 0x40) != 0)FpTUNInputIF = 1;
    FpTUNMonoIN = 0;
    if ((gMain00 & 0x80) != 0) FpTUNMonoIN = 1;

    return;
}

void HTUNLC7213xByteWrite(BYTE gLocal_1){
    BYTE gLocal_0;

    gLocal_0 = 8;
    do {
        pPLL_CK(0);
        if (gLocal_1 & 0x01){
            pPLL_DA(1);
        }
        else {
            pPLL_DA(0);
        }
        gLocal_1 >>= 1;
        pPLL_CK(1);
    } while (--gLocal_0 != 0);
    return;
}

BYTE HTUNLC7213xByteRead(){      
    BYTE gLocal_0;
    BYTE gLocal_1;

    pPLL_DA(1);
    gLocal_0 = 8;      
    do {      
        pPLL_CK(1);
        gLocal_1 <<= 1;
        if (pPLL_DIN_HIGH) gLocal_1 |= 0x01;
        pPLL_CK(0);
    } while(--gLocal_0 != 0);
    return gLocal_1;
}

void HTUNLC7213xStart(){
    pPLL_CK(1);
    pPLLCE = 0;
    return;
}

void HTUNLC7213xData(){
    pPLLCE = 1;
    return;
}

void HTUNLC7213xStop(){
    pPLL_CK(1);
    pPLLCE = 0;
    pPLL_DA(1);
    return;
}

void MEEPInitialize(){

    BYTE gLocal_1;
    BYTE gLocal_2;

    FTUNBandMW = MEEP_ByteRead(cEEPAddr_TUNBand);          
    gLocal_1 = MEEP_ByteRead(cEEPAddr_TunChannelLow);
    gLocal_2 = MEEP_ByteRead(cEEPAddr_TunChannelHigh);
    g2TUNAddrRead = (gLocal_2 << 8) | gLocal_1;
    g2TUNEEPAddr = g2TUNAddrRead;
//g2TUNAddrRead - cEEPAddr_TUNStart
//MDEBUG(0x98);
//MDEBUG(FTUNBandMW);
    if (!FTUNBandMW) {
         gTUN_FM_Freq = MEEP_ByteRead(g2TUNAddrRead);
    }
    else gTUN_MW_Freq = MEEP_ByteRead(g2TUNAddrRead);
 
    FTUNAutoTun = 0;	                                   													   
    FTUNMuteChange = 1;
    FTUNPLL_Delay = 1;

    gBell_BottomTime = MEEP_ByteRead(cEEPAddr_BellLong);
    gDIP_Lind[0] = MEEP_ByteRead(cEEPAddr_YundTime);
    gDIP_Lind[1] = MEEP_ByteRead(cEEPAddr_YundTimeClose);

    MDELAY(6);
    gAUD_Volume = 50;
    gLocal_1 = MEEP_ByteRead(cEEP_Volume);
    if (gLocal_1 < (cVOL_Volume_Max+1)) gAUD_Volume = gLocal_1;
    MDELAY(6);
    return;
}

⌨️ 快捷键说明

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