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

📄 vfd_hw.h

📁 MTK 1389e版 MINI组合音响代码
💻 H
字号:
/***************    MTK CONFIDENTIAL & COPYRIGHTED     ****************/
/***************                                       ****************/
/*************** Description : VFD Driver Header File  ****************/
/***************                                       ****************/
/***************                                       ****************/
/***************     Company : MediaTek Inc.           ****************/
/***************  Programmer : Harrison Hsieh          ****************/
/**********************************************************************/
BYTE xdata _bVfdKeyScan;
BYTE xdata _bVfdState;         // for vfd state machine


#ifdef VFD_SUPPORT

#ifndef _VFD_HW_H_
#define _VFD_HW_H_

#ifndef _SHM_CHK_C_
sbit          STROBE_PIN     =  P1^4;
sbit          DATA_PIN    =  P1^5;
  #ifdef BANK_NO
    #if (BANK_NO > 4)
sbit          CLK_PIN     =  P1^3;
    #else
//sbit          CLK_PIN     =  P1^2;
sbit          CLK_PIN     =  P1^3;

    #endif
  #else
//sbit          CLK_PIN     =  P1^2;
sbit          CLK_PIN     =  P1^3;
  #endif
#endif /* !_SHM_CHK_C_ */


#define QUEUEMARKSIZE     6    //6*8=48 is VFD_MAX_ADDR

BYTE xdata _bVfdQueueMark[QUEUEMARKSIZE];       // for 16311

//BYTE xdata _bVfdUpdateWrIdx;        // may replace it in DRAM
BOOL _fgVfdHold;
BOOL _fgVfdFlash;
BYTE xdata _bLedPort;

#ifdef PANEL_LED
BOOL _fgLedChange;
BYTE _bLedState;
BOOL _fgLedOnOff;
#endif

BYTE xdata _bVfdDiscPos;
BYTE xdata _bVfdTimer;               //TEMP VFD display time
BYTE xdata _bVfdFlashTimer;          //VFD  Flash  Time
BYTE xdata _bVfdPulseLvl;            //VFD  Bright deep

// never change
#define VFD_ADDR_LIMIT      50
#define VFD_UNKNOWN_ADDR    0xff


#define VFD_MAX_ADDR        0x1d   //48     // for 16311


#define DATA_SET_INC   0x40        // increamental address(to display memory)
#define DATA_SET_FIX   0x44       // fixed address(to display memory
#define DATA_SET_LED   0x41       // write data to led port

#define ADDR_SET       0xC0
#define KEY_SCAN       0x42
//#ifdef VFD_16311
#define SCANSIZE       17//9     //xiao 03-05-08   old is 48
//#else
//#define SCANSIZE       24
//#endif
// may change depends on customer's VFD

#define VFD_DISP_MEM_SIZE          VFD_MAX_ADDR        //Is  0x1a
#define VFD_SEG_BAK_SIZE           MAX_SEG_SEQ_NUM     //Is  7

#define VFD_SHADOW_TOTAL_SZ       (VFD_DISP_MEM_SIZE * 2) +  (VFD_SEG_BAK_SIZE * 2) + 4

#define SI_VFD_TMPBUF_START       SI_VFD_SHADOW_START + VFD_DISP_MEM_SIZE  // the current VFD display Memery 
#define SI_VFD_UPDATE_WRIDX       SI_VFD_SEG_ORG + VFD_SEG_BAK_SIZE
#define SI_VFD_PULSEWIDTH         SI_VFD_UPDATE_WRIDX + 1
#define SI_VFD_SEG_BAK            SI_VFD_TMPBUF_START + VFD_DISP_MEM_SIZE
#define SI_VFD_SEG_ORG            SI_VFD_SEG_BAK + VFD_SEG_BAK_SIZE



// hardware related macro
#define vVfdStrobe(fgFlag) {                \
STROBE_PIN = fgFlag; \
_nop_();           \
}

#define vVfdClk(fgFlag) {                \
CLK_PIN = fgFlag;   \
_nop_();           \
}

#define vVfdData(fgFlag) {                \
DATA_PIN = fgFlag;   \
_nop_();             \
}

#define vVfdCombineBit(bData)   DATA_PIN = (bData & 0x1)

// queue/ring buffer related define
#define vVfdSetQueueMark(bAddr)  _bVfdQueueMark[(bAddr >> 3)] = (_bVfdQueueMark[(bAddr >> 3)] | (1 << (bAddr % 8)))
#define vVfdClrQueueMark(bAddr)  _bVfdQueueMark[(bAddr >> 3)] = (_bVfdQueueMark[(bAddr >> 3)] & (~(1 << (bAddr % 8))))
#define fgVfdQueueMark(bAddr)    ((_bVfdQueueMark[(bAddr >> 3)] & (1 << (bAddr % 8))) > 0)




// local function defined here
static void vVfdUpdate(BYTE bTmp) large;
static void vVfdWrite(BYTE bAddr) large;
static vVfdWriteQueue(BYTE bAddr, BYTE bData) large;
static void vVfdUpdateState(void) large;  // update into the VFD display memory
static void vVfdSequenceUpdate(BYTE bSize, BYTE *pbData, WORD wSegInfo) large;
static void vVfdLedUpdate(void) large;
static void vVfdKeyScan(BOOL fgPwrDown) large;

static void vVfdRecoverSeg(void) large;
static void vVfdDirectWrite(BYTE bAddr, BYTE bData) large;
static void vVfdFlashState(void) large;
static void vDirectSequenceUpd(BYTE bSize,BYTE *pbData, WORD wSegInfo) large;

//static void vVFDWait(BYTE time) large;


// VFD state
#define VFD_STATE_MEM_UPDATE      0
#define VFD_STATE_LED_UPDATE      1
#define VFD_STATE_KEY_SCAN        2
#ifdef DVD_RECEIVER
#define VFD_STATE_CTL_MODE_SET    3
#endif


#endif

#else
code BYTE _pbVfdDummy[] = {
0
};
#endif

⌨️ 快捷键说明

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