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

📄 vfd_simp.c

📁 是MTK公司新出来的DVD方案
💻 C
字号:
/**********************************************************************/
/***************           MTK CONFIDENTIAL            ****************/
/***************                                       ****************/
/***************   Description : Vfd Update State      ****************/
/***************                 Machine               ****************/
/***************                                       ****************/
/***************       Company : MediaTek Inc.         ****************/
/***************    Programmer : Sung-Ching Lin        ****************/
/**********************************************************************/
#pragma NOAREGS

#ifndef PC_EMULATION
  #include "8032api.h"
#else
  #include "emu_api.h"
#endif

#include ".\vfd\vfd.h"
#include VFD_DATA_H

#ifdef DISC_UPDATE_CODE

#if (!defined(PLAYER_NO_VFD) && defined(UPG_VFD_STATUS))

#include "vfd_simp.h"

// *********************************************************************
// NEC 16311/2 command set
// *********************************************************************
#define VFD_MODE                0x02
#define VFD_DUTY_CYCLE          0x8f
#define VFD_ADDRESS_INC         0x40
#define VFD_ADDRESS_FIX         0x44
#define VFD_ADDRESS_MASK        0xc0
#define VFD_READ_KEY            0x42
#define VFD_SW_KEY              0x43
#define VFD_READ_SW             0x43

// *********************************************************************
// VFD Basic Routine
// *********************************************************************
#define VfdClrStb() { VFD_STB = VFD_LOW; VFD_STB = VFD_LOW; }
#define VfdSetStb() { VFD_STB = VFD_HIGH; VFD_STB = VFD_HIGH; }

#define VfdClrClk() { VFD_CLK = VFD_LOW; VFD_CLK = VFD_LOW; }
#define VfdSetClk() { VFD_CLK = VFD_HIGH; VFD_CLK = VFD_HIGH; }

#define VfdClrDat() { VFD_DATA = VFD_LOW; VFD_DATA = VFD_LOW; }
#define VfdSetDat() { VFD_DATA = VFD_HIGH; VFD_DATA = VFD_HIGH; }

// *********************************************************************
// Macros
// *********************************************************************
#define VfdSend(bData) { BYTE i; BYTE bTmp = bData; \
for (i = 0; i < 8; i++) { VfdClrClk(); VFD_DATA = (bTmp & 0x1); bTmp >>= 1; VfdSetClk(); } \
VfdSetDat(); }

#define VfdStbSend(bData) { VfdClrStb(); VfdSend(bData); VfdSetStb(); }

#define VfdUpdateStartFix() \
{ VfdStbSend(VFD_MODE); VfdStbSend(VFD_DUTY_CYCLE); VfdStbSend(VFD_ADDRESS_FIX); }

#define VfdUpdateStartInc() \
{ VfdStbSend(VFD_MODE); VfdStbSend(VFD_ADDRESS_INC); VfdClrStb(); VfdSend(0 | VFD_ADDRESS_MASK); }


#define VfdUpdateByte(bAddr, bData) \
{ VfdClrStb(); VfdSend(bAddr | VFD_ADDRESS_MASK); VfdSend(bData); VfdSetStb(); }

#define VfdDelay() { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }

// *********************************************************************
// VfdClear
// *********************************************************************
#define VfdClear() { BYTE j; for (j = 0; j <= VFD_REFRESH_MAX; j++) { VfdDelay(); VfdSend(0); } VfdSetStb(); VfdStbSend(VFD_DUTY_CYCLE); }
#define VfdSet() { BYTE j; for (j = 0; j <= VFD_REFRESH_MAX; j++) { VfdDelay(); VfdSend(0xff); } VfdSetStb(); VfdStbSend(VFD_DUTY_CYCLE); }

/************************************************************************
     Function :
  Description :
    Parameter :
    Return    :
************************************************************************/
void VfdFlashStatus(BYTE bMode)
{
  if (bMode == 2)
  {
    /* clear VFD */
    VfdUpdateStartInc();
    VfdClear();
  }
  else
  {
    VfdUpdateStartFix();
    if (bMode == 0)
    {
      VfdSend0();
    }
    else if (bMode == 1)
    {
      VfdSend1();
    }
  }
}

#else /* dummy */

void VfdFlashStatus(BYTE bMode)
{
  return;
}

#endif /* PLAYER_NO_VFD */

#endif // DISC_UPDATE_CODE

⌨️ 快捷键说明

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