📄 vfd_dbg.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 + -