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

📄 h612_sub.c

📁 一个不错的硬盘播放器程序,包含VFD显示程序,红外线遥控程序,硬盘读写程序,及解码程序等.
💻 C
字号:
/* http://www.HSAV.com */

#include "dsc.h"           
#include "dsa.h"           
#include "fsosd.h"
#include "ir.h"
#include "Hm612ndi.h"



#if (DISPLAY_TYPE == DIP_NONE)
    void MPKeyScan(){
        BYTE Local_0;
        BYTE Local_1 = 0xf0;
        switch (gPKeyScan){
            case 0: pKEY0(0); break;
            case 1: pKEY1(0); break;
            case 2: pKEY2(0); break;
            case 3: pKEY3(0);  
            default : break;
        }

        if (!pK1_HIGH && (gPKeyScan < 1)) Local_1 &= 0xdf;
        if (!pK2_HIGH && (gPKeyScan < 2)) Local_1 &= 0xbf;
        if (!pK3_HIGH && (gPKeyScan < 3)) Local_1 &= 0x7f;


        Local_0 = Local_1 | gPKeyScan;
        if (Local_1 != 0xf0){
            GPKeyData = Local_0;   
            FPKeyDetect = 1;
        } 
        if (FPKeyDetect){
            if (!FPKeyStep){
                if (++gPKeyConfirmTm > 6){
                    gPKeyConfirmTm = 0;
                    if (GPKeyData == Local_0){
                         FPKeyDecodeOk = 1;
                    }
                    else {
                        FPKeyDetect = 0;
                    }      
                }
            }    
            else{ 
                if (Local_1 == 0xf0){
                   if (++gPKeyConfirmTm > 6){
                       gPKeyConfirmTm = 0;  
                       FPKeyStep = 0;
                       FPKeyDetect = 0;     
                    }
                }
                else gPKeyConfirmTm = 0;   
            }
        }
        else{    
            if (++gPKeyScan > 4) gPKeyScan = 0;
        }     
        pKEY0(1);
        pKEY1(1);
        pKEY2(1);
        pKEY3(1);
        
        return;
    }
#endif

/* ///////////////////////////////////////////////////////////////////////////////////// */
/* ///////////////////////////////////////////////////////////////////////////////////// */
/* ///////////////////////////////////////////////////////////////////////////////////// */
/* ///////////////////////////////////////////////////////////////////////////////////// */
/* ///////////////////////////////////////////////////////////////////////////////////// */
/* ///////////////////////////////////////////////////////////////////////////////////// */

void MHOSTBusRead(){  
    pHINT(1);
    pHCLK(1);   
    pHCS(0);
    NOP(40);
    gHOSTBuffer[1] = HHOSTBusRead();
    gHOSTBuffer[2] = HHOSTBusRead();
    gHOSTBuffer[3] = HHOSTBusRead();

    pHCS(1);
    pHCLK(1);
    pHINT(1);
    
    return;
    
}

void MHOSTBusWrite(){  
    pHCLK(0);   
    pHINT(1);
    pHCS(0);

	NOP(40);
    HHOSTBusWrite(gHOSTBuffer[0]);
    HHOSTBusWrite(gHOSTBuffer[1]);
    HHOSTBusWrite(gHOSTBuffer[2]);
    HHOSTBusWrite(gHOSTBuffer[3]);
    pHCS(1);
    pHINT(1); 
    pHCLK(1);   
    return;
}


void HHOSTBusWrite(BYTE Local_1){  
    BYTE Local_2 = 8;
    do{
        if (Local_1 & 0x80){
            pHINT(1);
        }
        else{
            pHINT(0);
        }
        Local_1 <<= 1;
        pHCLK(1);
        NOP(1);
        pHCLK(0);
        NOP(1);
    } while (--Local_2 != 0);
    return;
}

BYTE HHOSTBusRead(){  
    BYTE Local_1 = 0;
    BYTE Local_2 = 8;
    NOP(40);
    do{
        pHCLK(0);
        NOP(1);
        pHCLK(1);
        Local_1 <<= 1;
        if (pHINT_HIGH) Local_1 |= 0x01;
        NOP(1);
    } while (--Local_2 != 0);
    return Local_1;
}
void NOP(BYTE Local_1){
    while (--Local_1);
    return;
}

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



PRIVATE unsigned int reverse_data(unsigned int data)
{
    unsigned int tmp = 0,i;
    for(i=0;i<4;i++){
        tmp <<= 8;
        tmp |= data&0xff;
        data >>=8;
    }
    return tmp;
}


char osdbuf[21] = "                    ";
void debug_osd(char *string, unsigned int data, int region)
{
    char *ptr;
    int i = 0, j, cmd;
    
    ptr = string;
    while (*ptr)
	osdbuf[i++] = *ptr++;
    
    data = reverse_data(data);
    
    for (j = 0; j < 4; j++) {
	cmd = data & 0xff;
	data >>= 8;
	osdbuf[i] = (char)('0' + (cmd >> 4));
	if (osdbuf[i] > '9' ) 
	    osdbuf[i] += 7;
	osdbuf[i+1] = (char)('0' + (cmd & 0xf));
	if (osdbuf[i+1] > '9' ) 
	    osdbuf[i+1] += 7;
	i += 2;
    }
    osdbuf[i] = '\0';
    OUTOSD(region, osdbuf, osdbuf, 5);
}




/*=======================================================================================*/
/*=======================================================================================*/
/*=====================  OSD Program =+++++++++++++++++++================================*/
/*=======================================================================================*/
/*=======================================================================================*/

void MOSD_Show(){
    int i = 0;
    osdbuf[i++] = 'A' + gPlay_Disk - 1;
    osdbuf[i++] = '0' + mCount_VIM(gPlay_DIR, 10);
    osdbuf[i++] = '0' + gMain00;
    osdbuf[i++] = '-';
    osdbuf[i++] = '0' + mCount_VIM(gPlay_Track, 10);
    osdbuf[i++] = '0' + gMain00;
    osdbuf[i++] = '\0';
    OUTOSD(5, osdbuf, osdbuf, 5);
    return;
}


int mCount_VIM(int Local_0, int Local_1){
    int i = 0;
     
    while (1){
        if (Local_1 > Local_0){
            gMain00 = Local_0;
            break;
        }
        ++i;
        Local_0 -= Local_1;
        if (Local_0 == 0){
            gMain00 = 0;
            break;
        }
    }
    return i;
}







void MDIPHostDataRead(){
/*debug_osd("CODE:",gHOSTBuffer[1],13); */
    if ((gHOSTBuffer[1] & cUserBuffer) != cUserBuffer){
        MDIPHostDataProcs();   
       
    } 
    else {

    }  
    return;
}

/*=====================================================================*/
/*=================  VFD Display Program ==============================*/
/*=====================================================================*/


⌨️ 快捷键说明

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