📄 vfd.c
字号:
/***
* vfd.c - 客显驱动程序
* - added by syj 2006/06/27
***/
#include "PublHead.h"
//HT1621编码规则
/***************************************************
*
* -A
* F| |B
* -G 相对应的字节顺序为FGEDABCP 如:'0'字节码为0xbe
* E| |C
* -D .P
*
****************************************************/
#define VFD618_MAX_SIZE 12 //VFD最多可显示的字符
static BOOL IsOpenTime; //是否显示时间
static U8 bakhour,bakmin,baksec;
//HT1621字码表 根据编码规则编制
//提供字码为'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
};
/*
*函数 打开vfd显示时间开关
*/
extern void OpenVFDTime(void)
{
IsOpenTime = TRUE;
bakhour = 0xff;
bakmin = 0xff;
baksec = 0xff;
}
/*
*函数 延时
*/
static void VFDDelay(Uchar i)
{
while(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;
}
}
/*
*函数 写入指令
*/
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;
}
/*
*函数 写入数据
*/
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;
}
/*
*函数 客显清屏
*/
static void VFDClear(void)
{
Uchar i;
for(i=0 ; i<(VFD618_MAX_SIZE*2) ; i+=2)
{
VFDData(i,0x00);
}
}
/*
*函数 客显初始化
*/
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(); //显示时间
}
/*
*函数 显示系统当前时间
*/
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();
}
}
}
/*
*函数 显示结算金额
*输入 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]);
}
}
/*
*函数 关闭vfd显示时间开关
*/
static void CloseVFDTime(void)
{
IsOpenTime = FALSE;
}
extern void PutCashToVfd(S32 amt)
{
if( IsUseVfd918() )
{
PutCashToVFD918(amt);
}
else
{
PutCashToVFD618(amt);
}
CloseVFDTime();
}
/*
*函数 客显测试程序,供系统测试调用
*/
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 + -