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

📄 dual_key.c

📁 realtek LCD monitor, TV开发源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
                    if(ucOsdState == _MenuNoneBenq)
                        COsdEnterNoneBenq();
                    else
                        COsdEnterFastInputBenq();
                }
                else if(ucCurrState == _SLEEP_STATE)
                {
                    if(ucOsdState == _MenuNoneBenq)
                    {
#if(_MCU_TYPE == _REALTEK_EMBEDDED)
                        CMcuSelectFlashClk(_FLASH_CLK);
#endif
                        LEDG_ON();
                        LEDO_OFF();
#if(_TOUCH_SENSOR == _ON)
                        CKeyBuzzerBeep();
                        CKeyOneTouchSensorLedOn();
#endif
                        CModeResetMode();
                        ucCurrState = _SLEEP_STATE;

                        CPowerPanelOn();
                        CAdjustBackgroundColor(0x00, 0x00, 0x00);
                        COsdEnterNoneBenq();
                    }
                    else
                    {
#if(_TOUCH_SENSOR == _ON)
                        CKeyBuzzerBeep();
#endif
                        COsdEnterFastInputBenq();
                    }
                }
                else
                    CKeyMessageConvert(_ENTER_KEY_MASK, _ENTER_KEY_MESSAGE);
            }
            else
#endif//End of #if(_OSD_TYPE == _BENQ_OSD)
                CKeyMessageConvert(_ENTER_KEY_MASK, _ENTER_KEY_MESSAGE);
        break;
        case(_AUTO_KEY_MASK):
            CKeyMessageConvert(_AUTO_KEY_MASK, _AUTO_KEY_MESSAGE);
        break;
        case(_RIGHT_KEY_MASK):
            CKeyMessageConvert(_RIGHT_KEY_MASK, _RIGHT_KEY_MESSAGE);
        break;
        case(_LEFT_KEY_MASK):
            CKeyMessageConvert(_LEFT_KEY_MASK, _LEFT_KEY_MESSAGE);
        break;
        case(_EXIT_KEY_MASK):
            //CLR_KEYSCANSTART();
            //CLR_KEYSCANREADY();
            if(ucCurrState == _ACTIVE_STATE)
            {
#if(_OSD_TYPE == _BENQ_OSD)
                if(ucOsdState==_MenuShowNonPresetModeBenq)
                {
                    COsdFxOsdTimerBenq();
                }
#else
                if(ucOsdState==_MenuShowNonPresetModeGeneric)
                {
                    COsdFxOsdTimerGeneric();
                }
#endif
                else
                {
                    CKeyMessageConvert(_EXIT_KEY_MASK, _EXIT_KEY_MESSAGE);
                }
            }
#if(_OSD_TYPE == _GENERIC_OSD)
        /*//ryan
            else if(ucKeyStatePrev ^ ucKeyStateCurr)
            {
                if(((ucCurrState == _NOSIGNAL_STATE) || (ucCurrState == _NOSUPPORT_STATE)) && (bPressAnyKeytoWakeUp))
                {
                    CTimerCancelTimerEvent(DisplayBurnInPatternGeneric);
                    CTimerCancelTimerEvent(CModePowerSavingEvent);

                    if(ucOsdState == _MenuNoneGeneric)
                    {
                        COsdFxOsdTimerGeneric();
                        COsdExitNoneGeneric();
                    }
                    else
                        COsdExitFastInputGeneric();
                }
                else if(ucCurrState == _SLEEP_STATE)
                {
                    if(ucOsdState == _MenuNoneGeneric)
                    {
                        bLED1 = _LED_ON;
                        bLED2 = _LED_OFF;
                        CModeResetMode();
                        ucCurrState = _SLEEP_STATE;

                        CPowerPanelOn();
                        CAdjustBackgroundColor(0x00, 0x00, 0x00);
                        COsdExitNoneGeneric();
                    }
                    else
                        COsdExitFastInputGeneric();
                }
                else
                    CKeyMessageConvert(_EXIT_KEY_MASK, _EXIT_KEY_MESSAGE);
            }*/
#endif//End of #if(_OSD_TYPE == _GENERIC_OSD)

            else
                CKeyMessageConvert(_EXIT_KEY_MASK, _EXIT_KEY_MESSAGE);
        break;
        case(_FACTORY_KEY_MASK):
            if(ucCurrState==_PWOFF_STATE)
            {
                SET_POWERSWITCH();
                SET_FACTORY_MODE(_ON);
                CLR_KEYSCANSTART();
                CLR_KEYSCANREADY();
            }
        break;
#if(_SERVICE_PAGE == _ON)
        case(_SERVICE_KEY_MASK):
            if(ucCurrState==_PWOFF_STATE)
            {
                bServiceMode=_TRUE;
                if(ucCurrState==_PWOFF_STATE)
                {
                    if(stGlobalData4.BurnIn==_BURNIN_ON)
                        SET_FACTORY_MODE(_ON);
                    else
                        SET_FACTORY_MODE(_OFF);
                }
                SET_POWERSWITCH();
                CLR_KEYSCANSTART();
                CLR_KEYSCANREADY();
            }
        break;
#endif
        case(_BURNINOFF_KEY_MASK):
            if((ucCurrState==_NOSIGNAL_STATE)&&(stGlobalData4.BurnIn==_BURNIN_ON))
            {
                stGlobalData4.BurnIn=_BURNIN_OFF;
                CModeResetMode();
#if(_OSD_TYPE == _BENQ_OSD)
                CTimerCancelTimerEvent(DisplayBurnInPatternBenq); // Clear Burn _In OSD
#else
                CTimerCancelTimerEvent(DisplayBurnInPatternGeneric); // Clear Burn _In OSD
#endif
                CEepromSaveGlobalData4();
                CLR_KEYSCANSTART();
                CLR_KEYSCANREADY();
            }
        break;
        case(_POWER_KEY_MASK):
            if((ucKeyStatePrev ^ ucKeyStateCurr) & _POWER_KEY_MASK)
            {
                CTimerDelayXms(20);             //double check power key for ESD
                if(CKeyScan()==_POWER_KEY_MASK) //double check power key for ESD
                {
                    if(ucCurrState==_PWOFF_STATE)
                    {
                        if(stGlobalData4.BurnIn==_BURNIN_ON)
                            SET_FACTORY_MODE(_ON);
                        else
                            SET_FACTORY_MODE(_OFF);
                    }
#if(_SERVICE_PAGE == _ON)
                    bServiceMode=_FALSE;
#endif
                    SET_POWERSWITCH();
                    CLR_KEYSCANSTART();
                    CLR_KEYSCANREADY();
                }
            }
        break;
        default:
            CLR_KEYREPEATSTART();
            CTimerCancelTimerEvent(CKeyRepeatEnableTimerEvent);
#if(_OSD_TYPE == _BENQ_OSD)
                CTimerCancelTimerEvent(DisplayMenuWhenOsdLock15SecBenq);
                if(bStoreMenuKeyMessage==_TRUE)
                {
                    bStoreMenuKeyMessage=_FALSE;
                    ucKeyMessage = _EXIT_KEY_MESSAGE;
                }
#endif
        break;
    }
}

//--------------------------------------------------
// Description  : Get key status
// Input Value  : None
// Output Value : Return Key status
//--------------------------------------------------

BYTE CKeyScan(void)
{
#if(_TOUCH_SENSOR == _ON)

    BYTE keystate=0;
    if(CKeyOneTouchSensorRead(_ONE_TOUCH_SENSOR_DR_0109,&pData[0])==_SUCCESS)
    {
        if(pData[1] &_BIT3)  keystate=keystate|_RIGHT_KEY_MASK;
        if(pData[1] &_BIT2)  keystate=keystate|_LEFT_KEY_MASK;
        if(pData[1] &_BIT0)  keystate=keystate|_AUTO_KEY_MASK;
        if(pData[1] &_BIT5)  keystate=keystate|_POWER_KEY_MASK;
        if(pData[1] &_BIT4)  keystate=keystate|_ENTER_KEY_MASK;
        if(pData[1] &_BIT1)  keystate=keystate|_EXIT_KEY_MASK;
    }
    else //IF ONE-TOUCH KEY FAIL,INITIAL AGAIN...
    {
        CKeyInitial();
    }

#else

BYTE code ADC_SCAN_TABLE[][3]=
{
#if(_PROJECT == _W2408)
    {_ADC_PORT_2,_ENTER_KEY_MASK ,_LEFT_KEY_MASK},
    {_ADC_PORT_1,_EXIT_KEY_MASK  ,_AUTO_KEY_MASK},
    {_ADC_PORT_3,_POWER_KEY_MASK ,_RIGHT_KEY_MASK},
#else
  /*  {_ADC_PORT_2,_ENTER_KEY_MASK ,_AUTO_KEY_MASK},
    {_ADC_PORT_1,_EXIT_KEY_MASK  ,_LEFT_KEY_MASK},
    {_ADC_PORT_3,_RIGHT_KEY_MASK, _POWER_KEY_MASK}, */
    //ryan modified key arrange
    {_ADC_PORT_3,_EXIT_KEY_MASK  ,_AUTO_KEY_MASK},
    {_ADC_PORT_2,_ENTER_KEY_MASK,_LEFT_KEY_MASK},
    {_ADC_PORT_1,_RIGHT_KEY_MASK, _POWER_KEY_MASK},
#endif
};
    BYTE keystate=0;
    BYTE i;
    for(i=0;i<(sizeof(ADC_SCAN_TABLE)/3);i++)
    {
        if(CKeySacnAdc(ADC_SCAN_TABLE[i][0])==_ADC_KEY_0)
            keystate   = keystate | ADC_SCAN_TABLE[i][1];
        else if(CKeySacnAdc(ADC_SCAN_TABLE[i][0])==_ADC_KEY_1)
            keystate   = keystate | ADC_SCAN_TABLE[i][2];
    }
#endif
    return keystate;
}

#if(_TOUCH_SENSOR == _ON)
bit CKeyOneTouchSensorWrite(WORD usAddr, WORD Value)//ONCE FOR 1 WORD
{
    BYTE timeoutcnt;
    SET_I2C_TOUCH_KEY();
    timeoutcnt  = _I2C_TIMEOUT_LIMIT;
    while(CI2cStart(_KEY_TOURCH_SENSOR_SLAVE_ADDRESS | _I2C_WR) != _I2C_OK)
    {
       timeoutcnt--;
       if(!timeoutcnt)
           return _FAIL;
    }
    if(CI2cSendByte(HIBYTE(usAddr)) != _I2C_OK)
       return _FAIL;
    if(CI2cSendByte(LOBYTE(usAddr)) != _I2C_OK)
       return _FAIL;
    if(CI2cSendByte(HIBYTE(Value)) != _I2C_OK)
             return _FAIL;
    if(CI2cSendByte(LOBYTE(Value)) != _I2C_OK)
             return _FAIL;
    CI2cStop();
    return _SUCCESS;
}

bit CKeyOneTouchSensorRead(WORD usAddr,  BYTE *pReadArray) //ONCE READ 1 WORD
{
    BYTE timeoutcnt;
    SET_I2C_TOUCH_KEY();
    timeoutcnt  = _I2C_TIMEOUT_LIMIT;
    while(CI2cStart(_KEY_TOURCH_SENSOR_SLAVE_ADDRESS | _I2C_WR) != _I2C_OK)
    {
        timeoutcnt--;
        if(!timeoutcnt)
        return _FAIL;
    }
    if(CI2cSendByte(HIBYTE(usAddr)) != _I2C_OK)
        return _FAIL;
    if(CI2cSendByte(LOBYTE(usAddr)) != _I2C_OK)
        return _FAIL;
    //SPEC 弧璶,I2C FORMAT 琌ぃ璶

⌨️ 快捷键说明

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