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

📄 vfd_dbg.c

📁 mtkDVD源代码程序4*16 很好玩的内置5.1环绕音效 大家可以玩一下
💻 C
字号:
/**********************************************************************/
/***************           MTK CONFIDENTIAL            ****************/
/***************                                       ****************/
/***************   Description : Vfd Debug Tool        ****************/
/***************                                       ****************/
/***************       Company : MediaTek Inc.         ****************/
/***************    Programmer : Sung-Ching Lin        ****************/
/**********************************************************************/
#include ".\vfd\vfd_comm.h"

#include VFD_DATA_C
// *********************************************************************
// NEC 16311/2 command set
// *********************************************************************
#define VFD_DUTY_CYCLE          0x8f
#define VFD_DISPLAY_OFF         0x87
#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

// *********************************************************************
// Local Variables
// *********************************************************************
static xdata BYTE _pbVfdShadow[VFD_SHADOW_LEN];

// *********************************************************************
// Local Defines
// *********************************************************************
#define VFD_LIST_END    0xff

#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; }

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

// *********************************************************************
// VFD Basic Routine
// *********************************************************************
static void VfdSend(BYTE bTmp) large
{
  BYTE i;

  for (i = 0; i < 8; i++)
  {
    VfdClrClk();

    VFD_DATA = (bTmp & 0x1);
    bTmp >>= 1;

    VfdSetClk();
  }

  VfdSetDat();
}

static BYTE VfdRecv(void) large
{
  BYTE i, bKeyData;

  bKeyData = 0;

  for(i = 0; i < 8; i++)
  {
    VfdSetClk();
    bKeyData <<= 1;
    VfdClrClk();

    /* delay for data output ready */
    _nop_(); _nop_(); _nop_();

    if (VFD_DATA)
    {
      bKeyData |= 1;
    }
  }

  return (bKeyData);
}

// *********************************************************************
// VFD Debug Local Functions
// *********************************************************************
static void VfdSetChar(BYTE bSeg, BYTE bCode) large
{
  BYTE *pbChar;

  for (pbChar = ppbVfdCharNum[bSeg][bCode];*pbChar != VFD_LIST_END;pbChar += 3)
  {
    VfdClrStb();
    _pbVfdShadow[*pbChar] |= *(pbChar + 1);
    _pbVfdShadow[*pbChar] &= *(pbChar + 2);
    VfdSend(_pbVfdRefresh[*pbChar] | VFD_ADDRESS_MASK);
    VfdSend(_pbVfdShadow[*pbChar]);
    VfdSetStb();
  }
}

static BOOL fgVfdKeyPressed(void) large
{
  BYTE j;
  BOOL fgRet = FALSE;
  
  VfdClrStb();
  VfdSend(VFD_READ_KEY);

  for (j=VFD_KEY_LEN;j>0;j--)
  {
    if (VfdRecv() != 0)
    {
      fgRet = TRUE;
    }
  }

  VfdSetStb();

  return(fgRet);
}

// *********************************************************************
// VFD Debug Export Functions
// *********************************************************************
void VfdDebugFlag(BYTE bFlag) large
{
  BYTE bIdx;
  
  for (bIdx = 0; bIdx < VFD_SHADOW_LEN; bIdx++)
  {
    _pbVfdShadow[bIdx] = 0;
  }

  VfdStbSend(VFD_MODE);
  VfdStbSend(VFD_DUTY_CYCLE);
  VfdStbSend(VFD_ADDRESS_FIX);

  /* set low number first */
  VfdSetChar(1, bFlag & 0x0f);

  /* set high number */
  bFlag >>= 4;
  VfdSetChar(0, bFlag);
}

void VfdDebugWaitKey(void) large
{
  WORD wIdx;
  
  do {
    for (wIdx = 0;wIdx < 10000;wIdx++)
    {
      _nop_(); _nop_(); _nop_(); _nop_();
      _nop_(); _nop_(); _nop_(); _nop_();
      _nop_(); _nop_(); _nop_(); _nop_();
      _nop_(); _nop_(); _nop_(); _nop_();
    }
  } while (!fgVfdKeyPressed());
  while (fgVfdKeyPressed());
}

⌨️ 快捷键说明

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