?? vfd_cu14.h
字號:
/*************** MTK CONFIDENTIAL & COPYRIGHTED ****************/
/*************** ****************/
/*************** Description : VFD Driver Customer ****************/
/*************** HW Leve Header file ****************/
/*************** ****************/
/*************** Company : MediaTek Inc. ****************/
/*************** Programmer : Harrison Hsieh ****************/
/**********************************************************************/
#ifndef _VFD_CUS_H_
#define _VFD_CUS_H_
#ifdef VFD_SUPPORT
#define VFD_16311
//#define VFD_16312
#define VFD_LED
//#define DIRECT_CROSS_TABLE
// how many segments on this VFD
#define MAX_SEG_SEQ_NUM 9
// VFD command related
#define MODESET 0x0B // 6 digits, 16 segment in 16312
#define VFD_CONTROL 0x8E // set Display ON and Set Pulse width
/*
2004/09/04 Alfonso
MAX_VFD_ADDR actually implied the count of VFD address.
*/
#define MAX_VFD_ADDR 0x23 // the real Max VFD_ADDR
#define MAX_DISC_NUM 3
#define SEG_SIZE 14
// VFD mode constant code define here
code BYTE _pbVfdMode[] = {
0x22, 0x20, 0x22, 0x40, 0x0f, 0x02, 0x22, 0x04, 0x22, 0x10, 0x22, 0x08,
0x22, 0x01, 0x21, 0x80, 0x21, 0x40, 0x21, 0x20, 0x00, 0x40, 0x00, 0x20,
0x00, 0x10, 0x00, 0x08, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x09, 0x02,
0x06, 0x02, 0x01, 0x80, 0x01, 0x01, 0x01, 0x02, 0x01, 0x04, 0xff, 0xff,
0x01, 0x08, 0x0f, 0x01, 0x06, 0x01, 0x0C, 0x01, 0xff, 0xff, 0xff, 0xff,
0x01, 0x40, 0x22, 0x02, 0x01, 0x20, 0x21, 0x08, 0x21, 0x10, 0xff, 0xff,
0x01, 0x10, 0x00, 0x80, 0x0C, 0x02
};
code BYTE _pbVfdDisc[] = {
0x00, 0x10, 0x00, 0x20, 0x00, 0x40
};
// VFD seven-segment related defined here, not only for digits, but also for words
code BYTE _pbVfdSeg[10][28] = {
{0x1C, 0x80, 0x1c, 0x40, 0x1b, 0x80, 0x1b, 0x04, 0x1b, 0x08, 0x1c, 0x04, 0x1c, 0x02, 0x1c, 0x08, // ABCDEFGH
0x1c, 0x01, 0x1c, 0x10, 0x1b, 0x20, 0x1b, 0x40, 0x1c, 0x20, 0x1b, 0x10}, // MJPNKR
{0x19, 0x80, 0x19, 0x40, 0x18, 0x80, 0x18, 0x04, 0x18, 0x08, 0x19, 0x04, 0x19, 0x02, 0x19, 0x08,
0x19, 0x01, 0x19, 0x10, 0x18, 0x20, 0x18, 0x40, 0x19, 0x20, 0x18, 0x10},
{0x16, 0x80, 0x16, 0x40, 0x15, 0x80, 0x15, 0x04, 0x15, 0x08, 0x16, 0x04, 0x16, 0x02, 0x16, 0x08,
0x16, 0x01, 0x16, 0x10, 0x15, 0x20, 0x15, 0x40, 0x16, 0x20, 0x15, 0x10},
{0x13, 0x80, 0x13, 0x40, 0x12, 0x80, 0x12, 0x04, 0x12, 0x08, 0x13, 0x04, 0x13, 0x02, 0x13, 0x08,
0x13, 0x01, 0x13, 0x10, 0x12, 0x20, 0x12, 0x40, 0x13, 0x20, 0x12, 0x10},
{0x0d, 0x80, 0x0d, 0x40, 0x0c, 0x80, 0x0c, 0x04, 0x0c, 0x08, 0x0d, 0x04, 0x0d, 0x02, 0x0d, 0x08,
0x0d, 0x01, 0x0d, 0x10, 0x0c, 0x20, 0x0c, 0x40, 0x0d, 0x20, 0x0c, 0x10},
{0x0a, 0x80, 0x0a, 0x40, 0x09, 0x80, 0x09, 0x04, 0x09, 0x08, 0x0a, 0x04, 0x0a, 0x02, 0x0a, 0x08,
0x0a, 0x01, 0x0a, 0x10, 0x09, 0x20, 0x09, 0x40, 0x0a, 0x20, 0x09, 0x10},
{0x07, 0x80, 0x07, 0x40, 0x06, 0x80, 0x06, 0x04, 0x06, 0x08, 0x07, 0x04, 0x07, 0x02, 0x07, 0x08,
0x07, 0x01, 0x07, 0x10, 0x06, 0x20, 0x06, 0x40, 0x07, 0x20, 0x06, 0x10},
{0x04, 0x80, 0x04, 0x40, 0x03, 0x80, 0x03, 0x04, 0x03, 0x08, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08,
0x04, 0x01, 0x04, 0x10, 0x03, 0x20, 0x03, 0x40, 0x04, 0x20, 0x03, 0x10},
{0x10, 0x80, 0x10, 0x40, 0x0f, 0x80, 0x0f, 0x04, 0x0f, 0x08, 0x10, 0x04, 0x10, 0x02, 0x10, 0x08,
0x10, 0x01, 0x10, 0x10, 0x0f, 0x20, 0x0f, 0x40, 0x10, 0x20, 0x0f, 0x10},
{0x1f, 0x80, 0x1f, 0x40, 0x1e, 0x80, 0x1e, 0x04, 0x1e, 0x08, 0x1f, 0x04, 0x1f, 0x02, 0x1e, 0x40,
0x1f, 0x08, 0x1f, 0x10, 0x1f, 0x20, 0x1f, 0x01, 0x1e, 0x20, 0x1e, 0x10}
};
code BYTE _pbSegSequence[] = {
VFD_SEG_TITLE_HIGH, VFD_SEG_TITLE_LOW, VFD_SEG_CHAP_HIGH, VFD_SEG_CHAP_LOW,
VFD_SEG_HR,
VFD_SEG_MIN_HIGH, VFD_SEG_MIN_LOW, VFD_SEG_SEC_HIGH, VFD_SEG_SEC_LOW
};
code BYTE _pbVfdMsg[] = {
0x05, SEG_CHAR_H, SEG_CHAR_E, SEG_CHAR_L, SEG_CHAR_L, SEG_CHAR_O, // hello 6: start 0
0x04, SEG_CHAR_S, SEG_CHAR_t, SEG_CHAR_O, SEG_CHAR_P, // stop ,5: start 6
0x04, SEG_CHAR_r, SEG_CHAR_O, SEG_CHAR_O, SEG_CHAR_t, // root, 5: start 11
0x05, SEG_CHAR_t, SEG_CHAR_I, SEG_CHAR_t, SEG_CHAR_L, SEG_CHAR_E, // title, 6: start 16
0x06, SEG_CHAR_n, SEG_CHAR_O, SEG_CHAR_d, SEG_CHAR_I, SEG_CHAR_S, SEG_CHAR_C, // nodisc, 7: start 22
0x06, SEG_CHAR_U, SEG_CHAR_n, SEG_CHAR_d, SEG_CHAR_I, SEG_CHAR_S, SEG_CHAR_C, // undisc, 7: start 29
0x04, SEG_CHAR_O, SEG_CHAR_P, SEG_CHAR_E, SEG_CHAR_n, // open, 5: start 36
0x05, SEG_CHAR_C, SEG_CHAR_L, SEG_CHAR_O, SEG_CHAR_S, SEG_CHAR_E, // close, 6: start 41
0x07, SEG_CHAR_L, SEG_CHAR_O, SEG_CHAR_A, SEG_CHAR_d, SEG_CHAR_I, SEG_CHAR_n, SEG_CHAR_g, // loading, 8: start 47
0x03, SEG_CHAR_O, SEG_CHAR_F, SEG_CHAR_F, // OFF, 4, start 55
0x04, SEG_CHAR_J, SEG_CHAR_P, SEG_CHAR_E, SEG_CHAR_G, // jpeg, 5 :start 59
0x04, SEG_CHAR_P, SEG_CHAR__, SEG_CHAR_c, SEG_CHAR_d, // p-cd, 5, :start 64
0x03, SEG_CHAR_E, SEG_CHAR_r, SEG_CHAR_r, // err, 4: start 69
0x03, SEG_CHAR_U, SEG_CHAR_P, SEG_CHAR_G, // upg, 4: start 73
0x06, SEG_CHAR_d, SEG_CHAR_I, SEG_CHAR_g, SEG_CHAR_E, SEG_CHAR_S, SEG_CHAR_t, // digest, : 7 : start 77
0x08, SEG_CHAR_P, SEG_CHAR_b, SEG_CHAR_C, SEG_CHAR__, SEG_CHAR_P, SEG_CHAR_L, SEG_CHAR_A, SEG_CHAR_y, // pbc-play, 9: start 84
MAX_SEG_SEQ_NUM, SEG_CLEAN, SEG_CLEAN, SEG_CLEAN, SEG_CLEAN, SEG_CLEAN, SEG_CLEAN, SEG_CLEAN, SEG_CLEAN, SEG_CLEAN // clean all, 10: start 93
};
code WORD _pwMsgTable[] = {
0, 6, 11, 16, 22, 29, 36, 41, 47, 55, 59, 64,
69, 73, 77, 84, 93
};
#ifdef DIRECT_CROSS_TABLE
code BYTE _pbMsgDirectTable[] = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x5, 0xff, 0, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff
};
// to save code space, only what in direct message, we declare here
code BYTE _pbVfdDirectMsg[] = {
0x2, 0x00, 0xad, 0x02, 0x80, // OFF for 0x4909
0x2, 0x00, 0xE4, 0x02, 0xdd
};
#endif
#define DOT_A 0x00
#define DOT_B 0x01
#define DOT_C 0x02
#define DOT_D 0x03
#define DOT_E 0x04
#define DOT_F 0x05
#define DOT_G 0x06
#define DOT_H 0x07
code BYTE _pbSegUnit[] = {
(1<<DOT_A)|(1<<DOT_B)|(1<<DOT_C)|(1<<DOT_D)|(1<<DOT_E)|(1<<DOT_F), // 0
(1<<DOT_B)|(1<<DOT_C), // 1
(1<<DOT_A)|(1<<DOT_B)|(1<<DOT_G)|(1<<DOT_E)|(1<<DOT_D), // 2
(1<<DOT_A)|(1<<DOT_B)|(1<<DOT_C)|(1<<DOT_D)|(1<<DOT_G), // 3
(1<<DOT_B)|(1<<DOT_C)|(1<<DOT_F)|(1<<DOT_G), // 4
(1<<DOT_A)|(1<<DOT_C)|(1<<DOT_D)|(1<<DOT_F)|(1<<DOT_G), // 5
(1<<DOT_A)|(1<<DOT_C)|(1<<DOT_D)|(1<<DOT_E)|(1<<DOT_F)|(1<<DOT_G), // 6
(1<<DOT_A)|(1<<DOT_B)|(1<<DOT_C), // 7
(1<<DOT_A)|(1<<DOT_B)|(1<<DOT_C)|(1<<DOT_D)|(1<<DOT_E)|(1<<DOT_F)|(1<<DOT_G), // 8
(1<<DOT_A)|(1<<DOT_B)|(1<<DOT_C)|(1<<DOT_F)|(1<<DOT_G), // 9
0, // clear all
(1<<DOT_A)|(1<<DOT_B)|(1<<DOT_C)|(1<<DOT_E)|(1<<DOT_F)|(1<<DOT_G), // A
(1<<DOT_A)|(1<<DOT_D)|(1<<DOT_E)|(1<<DOT_F)|(1<<DOT_G), // E
(1<<DOT_A)|(1<<DOT_E)|(1<<DOT_F)|(1<<DOT_G), // F
(1<<DOT_A)|(1<<DOT_C)|(1<<DOT_D)|(1<<DOT_E)|(1<<DOT_F), // G
(1<<DOT_B)|(1<<DOT_C)|(1<<DOT_E)|(1<<DOT_F)|(1<<DOT_G), // H
#if (SEG_SIZE == 14)
(1<<DOT_A)|(1<<DOT_D), // I
#else
(1<<DOT_E)|(1<<DOT_F), // I
#endif
(1<<DOT_B)|(1<<DOT_C)|(1<<DOT_D)|(1<<DOT_E), // J
(1<<DOT_D)|(1<<DOT_E)|(1<<DOT_F), // L
(1<<DOT_A)|(1<<DOT_D)|(1<<DOT_E)|(1<<DOT_F), // C
(1<<DOT_A)|(1<<DOT_B)|(1<<DOT_E)|(1<<DOT_F)|(1<<DOT_G), // P
(1<<DOT_A)|(1<<DOT_C)|(1<<DOT_D)|(1<<DOT_F)|(1<<DOT_G), // S
(1<<DOT_B)|(1<<DOT_C)|(1<<DOT_D)|(1<<DOT_E)|(1<<DOT_F), // U
(1<<DOT_C)|(1<<DOT_D)|(1<<DOT_E)|(1<<DOT_F)|(1<<DOT_G), // b
(1<<DOT_D)|(1<<DOT_E)|(1<<DOT_G), // c
(1<<DOT_B)|(1<<DOT_C)|(1<<DOT_D)|(1<<DOT_E)|(1<<DOT_G), // d
(1<<DOT_A)|(1<<DOT_B)|(1<<DOT_C)|(1<<DOT_D)|(1<<DOT_F)|(1<<DOT_G), // g
(1<<DOT_A)|(1<<DOT_B)|(1<<DOT_C)|(1<<DOT_E)|(1<<DOT_F), // n
(1<<DOT_E)|(1<<DOT_G), // r
(1<<DOT_D)|(1<<DOT_E)|(1<<DOT_F)|(1<<DOT_G), // t
#if (SEG_SIZE != 14)
(1<<DOT_B)|(1<<DOT_C)|(1<<DOT_D)|(1<<DOT_F)|(1<<DOT_G), // y
#else
(1<<DOT_H), // y
#endif
(1<<DOT_G), // -
#if (SEG_SIZE == 7)
(1<<DOT_A)|(1<<DOT_B)|(1<<DOT_C)|(1<<DOT_D)|(1<<DOT_E)|(1<<DOT_F)|(1<<DOT_G), // all
#else
(1<<DOT_A)|(1<<DOT_B)|(1<<DOT_C)|(1<<DOT_D)|(1<<DOT_E)|(1<<DOT_F)|(1<<DOT_G)|(1<<DOT_H), // all
#endif // after this , we will define what only appear on segment > 7
#if (SEG_SIZE > 7)
(1<<DOT_B)|(1<<DOT_C)|(1<<DOT_E)|(1<<DOT_F)|(1<<DOT_H), // N
(1<<DOT_B)|(1<<DOT_C)|(1<<DOT_H), // V
#endif
// after this , we will define what only appear on Segment = 14
#if (SEG_SIZE == 14)
(1<<DOT_H), // X
(1<<DOT_H), // Y
(1<<DOT_E)|(1<<DOT_F)|(1<<DOT_G), // K
(1<<DOT_A), // T
(1<<DOT_G)|(1<<DOT_H), // *
(1<<DOT_A)|(1<<DOT_D), // Z
(1<<DOT_B)|(1<<DOT_C)|(1<<DOT_E)|(1<<DOT_F)|(1<<DOT_H) // M
#else
0
#endif
};
#if (SEG_SIZE > 8)
#define DOT_M 0x00
#define DOT_J 0x01
#define DOT_P 0x02
#define DOT_N 0x03
#define DOT_K 0x04
#define DOT_R 0x05
// if segment size is 14, this should be included
code BYTE _pbSegUnitHi[] = {
0,
0,
(1<<DOT_M),
(1<<DOT_M),
(1<<DOT_M),
(1<<DOT_M),
(1<<DOT_M),
0,
(1<<DOT_M),
(1<<DOT_M),
0,
(1<<DOT_M), // A
(1<<DOT_M), // E
(1<<DOT_M), // F
(1<<DOT_M), // G
(1<<DOT_M), // H
#if (SEG_SIZE == 14)
(1<<DOT_J)|(1<<DOT_P),
#else
0, // I
#endif
0, // J
0, // L
0, // C
(1<<DOT_M), // P
(1<<DOT_M), // S
0, // U
(1<<DOT_M), // b
(1<<DOT_M), // c
(1<<DOT_M), // d
(1<<DOT_M), // g
0, // n
(1<<DOT_M), // r
(1<<DOT_M), // t
#if (SEG_SIZE == 14)
(1<<DOT_M), // y
#else
(1<<DOT_K)|(1<<DOT_R),
#endif
(1<<DOT_M), // -
(1<<DOT_M)|(1<<DOT_J)|(1<<DOT_P)|(1<<DOT_N)|(1<<DOT_K)|(1<<DOT_R), // all ON
(1<<DOT_N), // N
(1<<DOT_N), // V
(1<<DOT_K)|(1<<DOT_N)|(1<<DOT_R), // X
(1<<DOT_K)|(1<<DOT_P), // Y
(1<<DOT_N)|(1<<DOT_K), // K
(1<<DOT_J)|(1<<DOT_P), // T
(1<<DOT_M)|(1<<DOT_J)|(1<<DOT_P)|(1<<DOT_N)|(1<<DOT_K)|(1<<DOT_R), // *
(1<<DOT_K)|(1<<DOT_R), // Z
(1<<DOT_K) // M
};
#endif
// add the vfd key scan map here
code BYTE _pbVfdKeyScan[] = {
IR_NEXT, IR_PREV, IR_EJECT, IR_NONE, IR_NONE, IR_NONE,
IR_FF, IR_NONE, IR_FR, IR_PLAY, IR_STOP, IR_PAUSE,
};
#endif
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -