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

📄 e20_main.c

📁 HSAV DR53E CF卡MP3录放板应用编程源代码
💻 C
字号:

#define ROOT     
#include "E20_main.h"           
sfr   CHPCON                   = 0xbf;

main(){
    CHPCON = 0x10;                                      

MDEBUG(0x01);
    TMOD = TMODE_8bitAutoTimer0; 
    TH0 = cTBT125uS; 
    TCON = TCON_TR0 | TCON_IT0; 
    IP = IP_PX0;
    IE = IE_EA | IE_EX0 | IE_ET0;

    MRAMClear();
    g4094Output = 0;
    M4094Output();//关掉所有外控
    pBuzzer = 0;
    FBuzzerTm = 0;
    MDIPClearALL();//清屏  
    MDIPInitialize();
    MDIPLogoShow();   

    FPress_Enter_Modify = 0;

// 单曲单次播 gPlayTYPE = 1;
// 单曲循环播 gPlayTYPE = 2;
// 全部单次播 gPlayTYPE = 3;
// 全部循环播 gPlayTYPE = 4;
    gPlayTYPE = 4;
    FInitiaizeOK = 1;

    FTUNStereoCTRL = 1;
    FTUN_AMSTEP9k = 1;

    FCONCTRL1 = 0;
    FCONCTRL2 = 0;
    FCONCTRL3 = 0;
    FCON_AMP = 0;
    FCON_RING = 0;     //小功放用
    
    FTaskNowing = 0;
    FCurrWordStaus = 0;
    gOption_group = 1;
    MTUN_AutoTunCancel();

    gMenuSelect = cMenu_Exit;
    MDIP_Main_Logo();
    MEEPInitialize();
    gCurrOutComctrl = 0;
    FDIPSimble_ROOD(1);
//此在显示之后
    Mplay_Stop(cCTB_STOP);

    gLED_NewBuffer[0]=0xff;
    gLED_NewBuffer[1]=0xff;
    pMIC_SW = 1;

    while (1){ 
        if (!pHINT){ 
            if (!MCTBCommandRead()){
                MDIPHostDataProcs();
            }
        }
        if (F10msTimer){
            F10msTimer = 0;
            if (++g100msTimer > 9){     
                g100msTimer = 0;
                F100msTimer = 1;
                MRTCRead(); 

                if (FRTCSecond){
                    FRTCSecond = 0;
                    FTwinklingTm = ~FTwinklingTm;
                    MDIP1000msTimer();
                    FReadNextTask = 1;
                    MEEPAddr_NextTask();
                    MDIPTrack_Name();
                }

                if (gStartTime && !FErase_UpData){
                    --gStartTime;
                    if (gStartTime == 4){
            			#ifdef OTG_MODE
                            gCTBCommandBuffer[0] = cCTB_CommandA03;
                            gCTBCommandBuffer[1] = cCTB_REARD_INFO;
                            gCTBCommandBuffer[2] = cCTB_ReadTrack_Max;
                            MCTBCommandWrite();
                        #else
                            gCTBCommandBuffer[0] = cCTB_CommandA04;
                            gCTBCommandBuffer[1] = cCTB_REARD_INFO;
                            gCTBCommandBuffer[2] = cCTB_ReadTrack_Max;
                            gCTBCommandBuffer[3] = 0x00;
                            MCTBCommandWrite();
                        #endif
                    }
                    else if (!gStartTime) {
                        FControlManual = MEEP_ByteRead(cEEPAddr_AUTO_MAN);//记忆手动/自动
                        FNoMission_Staus = 0;
                        mLED_Sture();
                        MLED_Release();
                        gMain00 = MEEP_ByteRead(cEEPAddr_OutComctrl);
                        if (gMain00 != 0xff){
                            gCurrOutComctrl = gMain00;
                        }
                        else gCurrOutComctrl = 0;
                        if (FControlManual){
                            MDIPClearALL();//清屏  
                            gControlManualStatus = cControlAutoStatus;
                            gCursorMove = 1;
                            gMenuSelect = cMenu_Main02_Start_up_TimerList;
                            MDIP_Start_up_TimerList(gCursorMove);
                            FAUDMuteEnl = 1; //静音
                        }
                        else { 
                            gControlManualStatus = cControlManualStatus;
                            gInputType = MEEP_ByteRead(cEEPAddr_WorkRest)&0x07;
                            mInputSwitch();
                            gReturnMenuBuffer = (MEEP_ByteRead(cEEPAddr_WorkRest)>>3)&0x1f;
                            MenuBuffer();
                            MReturnMenu();
                        }
                        MPowerComctrl(gCurrOutComctrl);
                        MLine1Conctrl();
                        gMain00 = 1;
                        gMain00 = MEEP_ByteRead(cEEPAddr_PlayTrack); //开机播放记忆曲目
                        if ((gMain00 != 0xff)&&(gMain00 != gTrackNumber)) MSpecify_Play(gMain00);
                    }
                       
                }    
                                   //4
                if (++g500msTimer > 4){  
                    g500msTimer = 0;
                    F500msTimer = 1;
                }
            }

            MSUB10msTimer();
            MTUN10msTimer();
            MDIP10msTimer();
            MAUD10msTimer();  // 500us

            if ((gRmKeyContinCanclTm != 0) && (++gRmKeyContinCanclTm > 18)){
                gRmKeyContinCanclTm = 0;
				gKeyCancelTm = 0;
            }
        }
        F100msTimer = 0;
    }
}

CONST_CHAR TabLED_Scan[] = {
    0x71,0xb1,0xd1,0xe1,
};



void MLED_Release(){
    M4094DataWrite(gLED_NewBuffer[0] & 0x7f);
    M4094DataWrite(gLED_NewBuffer[1]);

    if ((gMenuSelect == cMenu_Main02_Start_up_TimerList)||(gMenuSelect == cMenu_Exit)){
        if (!FAUDMuteEnl){
            M4094DataWrite(gLED_NewBuffer[0]);
            M4094DataWrite(gLED_NewBuffer[1]);
        }
    }
    
    p4094_HighSTB = 1;
    p4094_HighSTB = 0;
    return;
}


/*========================================================================================*/
/*  龙珠科技CTB总线用户主机端程序V2.02版本(2005年3月20日)    技术支持 support@HSAV.com	*/
/*========================================================================================*/
BYTE MCTBCommandWrite(){ 							/*从gCTBCommandBuffer[]中发送*/
	BYTE gLocal_1;									/*发送字节暂存器*/
	BYTE gLocal_2;									/*发送位长度暂存器*/
	BYTE gLocal_3;									/*发送字节长度暂存器*/
	BYTE gLocal_4;									/*发送失败重试暂存器*/

	gLocal_4 = cCTBRetry;			            	/*设置重复发送初值*/
	pHDAT = 0;
	do {
		gLocal_3 = 0;								/*发送字节长度计数器*/
		do{
			gLocal_1 = gCTBCommandBuffer[gLocal_3];
			gLocal_2 = 8;							/*位长度计数器*/
		    do{
				if (gLocal_1 & 0x80) pHDAT = 1;
				else pHDAT = 0;
		        gLocal_1 <<= 1;						/*数据高位先出*/
				mCTB_01_Pulse();					/*HCLK 0 -> 1 脉冲*/
		    } while (--gLocal_2 != 0);
        	pHINT = 0;								/*变低HINT发送指令/数据字节*/
		} while (++gLocal_3 < gCTBCommandBuffer[0]);
		mCTB_01_Pulse();
		pHDAT = 1;
		if (!pHDAT){
			mCTB_01_Pulse();						/*HCLK 0 -> 1 脉冲*/
			break;									/*接收到ACK位正确退出*/
		}	
		mCTB_01_Pulse();
	} while (--gLocal_4 != 0);						/*ACK接收不正确则重试*/
	pHINT = 1;
	pHDAT = 1;
	if (gLocal_4 == 0) return 1;					/*正常发送回传0,否则为1*/
	return 0;
}

BYTE MCTBCommandRead(){  							/*接收到gCTBCommandBuffer[]中*/
	BYTE gLocal_1;									/*接收字节暂存器*/
	BYTE gLocal_2;									/*接收位长度暂存器*/
	BYTE gLocal_3;									/*接收字节长度暂存器*/
	BYTE gLocal_4;									/*接收返回标志暂存器*/
	BYTE gLocal_5;									/*接收缓存指针暂存器*/
    pHDAT = 1;   									/*用户主机读指令,读/写位为1*/
	mCTB_01_Pulse();							
	mCTB_01_Pulse();							
	gLocal_5 = 0;
	gLocal_3 = 0;									/*接收字节长度计数器*/
	do{
		gLocal_2 = 8;								/*接收8位数据*/
	    do{
	        gLocal_1 <<= 1;
			if (pHDAT) gLocal_1 |= 0x01;
			mCTB_01_Pulse();						/*HCLK 0 -> 1 脉冲*/
	    } while (--gLocal_2 != 0);
    	pHINT = 0;									/*变低HINT接收指令/数据字节*/
		gCTBCommandBuffer[gLocal_5++] = gLocal_1;	/*将数据移入接收缓存*/
		if (gLocal_3 == 0){
			gLocal_3 = 1;
			gLocal_4 = gLocal_1;

			if (gLocal_4 < 2 || gLocal_4 > cCTBMaxByte){
				gLocal_4 = 1;						/*如果数据长度超出范围*/
				mCTB_01_Pulse();					/*出错退出*/
				break;
			}
		}
	} while (--gLocal_4 != 0);	
	pHINT = 1;
	return gLocal_4;								/*正常接收回传0,否则为1*/
}
void mCTB_01_Pulse(){   							/*发送HCLK变低 -> 变高脉冲*/
	BYTE gLocal_1;
    pHCLK = 0; 
	gLocal_1 = cCTBDelay10us;						/*延时15微秒左右*/
	while (--gLocal_1 != 0);
    pHCLK = 1;   
	gLocal_1 = cCTBDelay10us;
	while (--gLocal_1 != 0);
    return;
}


void MRAMClear(){

    gCursorMove = 0; 
    gTUNAutoTunDelayTm = 0;
    gTrackNameLength = 0;
    gCursor_WorkTypeList = 0;
    gTrack_Name[0] = 0;
    gTrack_Name[1] = 0;
    gTrack_Name[2] = 0;
    gTrack_Name[3] = 0;
    gTrack_Name[4] = 0;
    gTrack_Name[5] = 0;
    gTrack_Name[6] = 0;
    gTrack_Name[7] = 0;

    gTAB_YearWeekDay[0] = 0;
    gTAB_YearWeekDay[1] = 0;
    gTAB_YearWeekDay[2] = 0;

    gTAB_HourMinsecond[0] = 0;
    gTAB_HourMinsecond[1] = 0;
    gTAB_HourMinsecond[2] = 0;
     
    g2TUNAddrRead = 0;
    g2TUNEEPAddr = 0;
    gReturnMenuBuffer = 0;
    gMenuSelectBuffer = 0;
    gMenuBroadcastBuffer = 0;
    gOption_groupBuffer = 0;
    gTUNAutoTunDelayTm = 0;

    gTrack_Max = 0;
    gEEP_TrackNumber = 0;
    gTrackNumber = 0;

    gPlay_Hour = 0;
    gPlay_Second = 0;
    gPlay_Minute = 0;

    MRTCWrite(cRTC_CRTL1, 0x20);
    gStartTime = 8;
    gCOL_Week = 0;
    gHoure_Next = 0xff;
    gMinuteNext = 0xff;
    gSecondNext = 0xff;
    gBuzzerTm = 0;  
    gDIPTrack_Name=0;
    gDIP_Number = 0;
    gTrackNameLength = 0;
    gMain01 = 0;
    do {
        gTrack_Name[gMain01]=' ';
    } while (++gMain01 < 60);
    MBroadcastClear();

    return;
}


void MUSDELAY(){
    BYTE gLocal_1;
    gLocal_1 = 8; 
    while (--gLocal_1 != 0);
    return;
} 

void MDELAY(BYTE ms){
    WORD g2Local_1;
    do {        
        g2Local_1 = 190; while (--g2Local_1 != 0);
   } while (--ms != 0);
   return;
}

void EX0_int (void) interrupt 0 using 1 {
/*
    if (!FRmError){
        ++gRmStatus;  
        FRmDecodOK = 0;
        if (gRmStatus == 2){    
            if (gRmTimer > 130) FRmError = 1;
            if (gRmTimer < 99){
                FRmError = 1;    
                if ((gRmKeyContinCanclTm != 0) && (gRmTimer > 70)){
                    FRmDecodOK = 1;
                    FRmError = 0;
                }
            }
        }
        else{
            gRmBuffer >>= 1;
            if (gRmTimer > 13) gRmBuffer |= 0x80;
            if ((gRmStatus == 2+8) || (gRmStatus == 2+24)) GRmCodeData = gRmBuffer;
            else if (gRmStatus == 2+16){
                if ((gRmBuffer != cRmNCustom) || (GRmCodeData != cRmCustom)){
                    gRmKeyContinCanclTm = 0;
                    FRmError = 1;
                }
            }
            else if (gRmStatus == 2+32){ 
                FRmDecodOK = 1;

                if ((gRmBuffer ^ 0xff) != GRmCodeData){
                    FRmDecodOK = 0; 
                    FRmError = 1;
                }
            }
        }
    }
    gRmTimer = 1; 
  */
    return;
}
void TBascTimer(void) interrupt 1 using 2 {

    if (++gTBascTimer > 79){
        gTBascTimer = 0;
        F10msTimer = 1;
        if (gBuzzerTm > 0){
            UBuzzerOn;
            if (--gBuzzerTm == 0) UBuzzerOff;
        }
    }
    if (gRmTimer != 0 && ++gRmTimer > 159){
        gRmStatus = 0;
        FRmError = 0; 
        gRmTimer = 0;
    }

    if (!FKeyJopInputEnl_A){
        if (pJOGA_P1 && pJOGA_P2 && (++gKeyJopInputTm_A > 3)){
            gKeyJopInputTm_A = 0; 
            FKeyJopInputEnl_A = 1;
        }
        FKeyJopSta00_A = 0;
        FKeyJopSta01_A = 0;
    }
    else if (pJOGA_P1 != pJOGA_P2){
        if (FKeyJopInputEnl_A){
            FKeyJogUp_A = pJOGA_P2;
            if ((FKeyJogUp_A==FKeyJogUpSave_A) || (gKeyJopLockTm_A==0)){
                FKeyJogSwOK_A = 1;
            }
            FKeyJogUpSave_A = FKeyJogUp_A;
            gKeyJopLockTm_A = 3;
            gKeyJopInputTm_A = 0;
            FKeyJopInputEnl_A = 0;
            FKeyJopSta01_A = 0;
        }
        else {
            if (FKeyJopSta01_A){
                gKeyJopLockTm_A = 3;
                gKeyJopInputTm_A = 0;                          
                FKeyJopInputEnl_A = 0;
            }
            FKeyJopSta01_A = 1;
        }
        FKeyJopSta00_A = 0;
    }
    else if (!pJOGA_P1 && !pJOGA_P2){ 
        if (FKeyJopSta00_A){
            gKeyJopLockTm_A = 3;
            gKeyJopInputTm_A = 0; 
            FKeyJopInputEnl_A = 0;
        }
        FKeyJopSta00_A = 1;
        FKeyJopSta01_A = 0;
    }
    return;
}


⌨️ 快捷键说明

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