?? vfd.c
字號:
/***
* vfd.c - 客顯驅動程序
* - added by syj 2006/06/27
***/
#include "PublHead.h"
//HT1621編碼規(guī)則
/***************************************************
*
* -A
* F| |B
* -G 相對應的字節(jié)順序為FGEDABCP 如:'0'字節(jié)碼為0xbe
* E| |C
* -D .P
*
****************************************************/
#define VFD618_MAX_SIZE 12 //VFD最多可顯示的字符
static BOOL IsOpenTime; //是否顯示時間
static U8 bakhour,bakmin,baksec;
//HT1621字碼表 根據(jù)編碼規(guī)則編制
//提供字碼為'01234567890.1.2.3.4.5.6.7.8.9..-空格',共13字碼
static U8 const VfdCodeTable[23] =
{
0xbe,0x06,0x7c,0x5e,0xc6,0xda,0xfa,0x0e,0xfe,0xde,
0xbf,0x07,0x7d,0x5f,0xc7,0xdb,0xfb,0x0f,0xff,0xdf,
0x01,0x40,0x00
};
/*
*函數(shù) 打開vfd顯示時間開關
*/
extern void OpenVFDTime(void)
{
IsOpenTime = TRUE;
bakhour = 0xff;
bakmin = 0xff;
baksec = 0xff;
}
/*
*函數(shù) 延時
*/
static void VFDDelay(Uchar i)
{
}
static void VFDSendBit(Uchar bitcnt,Uchar dt)
{
for( ; bitcnt ; bitcnt--)
{
if(dt & 0x80)
{
IO2SET = VFD_DAT;
}
else
{
IO2CLR = VFD_DAT;
}
dt <<= 1;
IO2CLR = VFD_CLK;
VFDDelay(1);
IO2SET = VFD_CLK;
}
}
/*
*函數(shù) 寫入指令
*/
static void VFDComm(Uchar comm)
{
IO2CLR = VFD_CS;
VFDSendBit(3,0x80); // 100
VFDSendBit(8,comm);
IO2CLR = VFD_CLK;
VFDDelay(1);
IO2SET = VFD_CLK;
IO2SET = VFD_CS;
}
/*
*函數(shù) 寫入數(shù)據(jù)
*/
static void VFDData(Uchar addr,Uchar value)
{
IO2CLR = VFD_CS;
VFDSendBit(3,0xA0); // 101
addr <<= 2;
VFDSendBit(6,addr);
VFDSendBit(8,value);
IO2SET = VFD_CS;
}
/*
*函數(shù) 客顯清屏
*/
static void VFDClear(void)
{
Uchar i;
for(i=0 ; i<(VFD618_MAX_SIZE*2) ; i+=2)
{
VFDData(i,0x00);
}
}
/*
*函數(shù) 客顯初始化
*/
static void Init_VFD618(void)
{
VFDComm(0x00); //00000000 System Disable
VFDComm(0x01); //00000001 System Enable
VFDComm(0x03); //00000011 LCD On
VFDComm(0x04); //00000100 Timer Disable
VFDComm(0x05); //00000101 WDT Disable
VFDComm(0x08); //00000101 Tone Off
VFDComm(0x18); //00011000 RC 256K
VFDComm(0x29); //00101001 Bias 1/3
VFDComm(0x10); //00011000 IRQ Disable
VFDComm(0xe3); //00011000 Normal Mode
VFDClear(); //清屏
}
extern void Init_Vfd(void)
{
if( IsUseVfd918() )
{
Init_VFD918();
}
else
{
Init_VFD618();
}
OpenVFDTime(); //顯示時間
}
/*
*函數(shù) 顯示系統(tǒng)當前時間
*/
static void PutTimeToVFD618(void)
{
DATETIME dttm;
GetCurDateTime(&dttm);
if(bakhour != dttm.Hour)
{
bakhour = dttm.Hour;
VFDData( 0,VfdCodeTable[22]);
VFDData( 2,VfdCodeTable[dttm.Hour / 0x10]);
VFDData( 4,VfdCodeTable[dttm.Hour % 0x10]);
VFDData( 6,VfdCodeTable[21]);
}
if(bakmin != dttm.Minute)
{
bakmin = dttm.Minute;
VFDData( 8,VfdCodeTable[dttm.Minute / 0x10]);
VFDData(10,VfdCodeTable[dttm.Minute % 0x10]);
VFDData(12,VfdCodeTable[21]);
}
if(baksec != dttm.Second)
{
baksec = dttm.Second;
VFDData(14,VfdCodeTable[dttm.Second / 0x10]);
VFDData(16,VfdCodeTable[dttm.Second % 0x10]);
VFDData(18,VfdCodeTable[22]);
VFDData(20,VfdCodeTable[22]);
VFDData(22,VfdCodeTable[22]);
}
}
extern void PutTimeToVfd(void)
{
if(IsOpenTime)
{
if(IsUseVfd918())
{
PutTimeToVFD918(&baksec);
}
else
{
PutTimeToVFD618();
}
}
}
/*
*函數(shù) 顯示結算金額
*輸入 buf 指針, len 長度,允許最多10字符
*/
static void PutCashToVFD618(S32 amt)
{
String str[0x100];
String * buf;
Uchar i,len;
len = sprintf(str,"%*ld.%02lu ",VFD618_MAX_SIZE-5,(amt/100),(labs(amt))%100);
buf = str;
VFDClear();
for(i=0 ; i<(VFD618_MAX_SIZE*2) ; i+=2)
{
Uchar idx;
idx = 22;
if(len)
{
Uchar ch;
ch = *buf;
buf++;
len--;
if((ch >= '0') && (ch <= '9'))
{
idx = ch - '0';
if(len && (*buf == '.'))
{
buf++;
len--;
idx += 10;
}
}
else if(ch == '.')
{
idx = 20;
}
else if(ch == '-')
{
idx = 21;
}
}
VFDData(i,VfdCodeTable[idx]);
}
}
/*
*函數(shù) 關閉vfd顯示時間開關
*/
static void CloseVFDTime(void)
{
IsOpenTime = FALSE;
}
extern void PutCashToVfd(S32 amt)
{
if( IsUseVfd918() )
{
PutCashToVFD918(amt);
}
else
{
PutCashToVFD618(amt);
}
CloseVFDTime();
}
/*
*函數(shù) 客顯測試程序,供系統(tǒng)測試調用
*/
static void VFDTest(Uchar idx)
{
Uchar i;
idx %= 23;
for(i=0 ; i<(VFD618_MAX_SIZE*2) ; i+=2)
{
VFDData(i,VfdCodeTable[idx]);
}
}
static void SelfTest_VFD618(void)
{
Uchar i;
VFDClear();
for(i=0 ; i<23 ; i++)
{
VFDTest(i);
if(WaitTimeout(1000,KEY_CLR))
{
break;
}
}
}
extern void SelfTest_Vfd(void)
{
CloseVFDTime();
if(IsUseVfd918())
{
SelfTest_VFD918();
}
else
{
SelfTest_VFD618();
}
OpenVFDTime();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -