/************************************/
//VFD驱动程序开始
//
/************************************/
#define SETBIT(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
#define CLEARBIT(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))
#define CHECKBIT(ADDRESS,BIT) (ADDRESS & (1<<BIT))
/************************************/
//接口定义
/************************************/
#define SET_HT_DO PORTD|=(1<<7)
#define CLR_HT_DO PORTD&=~(1<<7)
#define SET_HT_DI PORTD|=(1<<6)
#define CLR_HT_DI PORTD&=~(1<<6)
#define SET_HT_CK PORTD|=(1<<5)
#define CLR_HT_CK PORTD&=~(1<<5)
#define SET_HT_CS PORTD|=(1<<4)
#define CLR_HT_CS PORTD&=~(1<<4)
/************************************/
//显示定位
/************************************/
#define ON_SHOW 0Xaa
#define OFF_SHOW 0X55
#define S_BO1 Write_VFD_Specificly(0,1,ON_SHOW) //(Write_VFD_Specificly(0,0X01) )
#define D_BO1 Write_VFD_Specificly(0,1,OFF_SHOW)//(Write_VFD_Specificly(0,0X00) )
#define S_BO2 Write_VFD_Specificly(0,2,ON_SHOW)//(Write_VFD_Specificly(0,0X02))
#define D_BO2 Write_VFD_Specificly(0,2,OFF_SHOW)//(Write_VFD_Specificly(0,0X00))
#define S_BO3 Write_VFD_Specificly(0,3,ON_SHOW)//(Write_VFD_Specificly(0,0X04))
#define D_BO3 Write_VFD_Specificly(0,3,OFF_SHOW)//(Write_VFD_Specificly(0,0X00))
void Nop(void)
{
uchar i;
i=8;
}
//
void Delay_1Us(uchar x)
{
uchar i;
for(i=0;i<x;i++)
{
;
}
}
void Delay_1Ms(uchar xh)
{
uchar i;
for(i=0;i<xh;i++)
{
Delay_1Us(200);
}
}
void Delay_10Ms(uchar xh)
{
uchar i;
for(i=0;i<xh;i++)
{
Delay_1Ms(100);
}
}
//For VFD
void Send_VFD_Data(uchar xh)
{
uchar i;
for(i=0;i<8;i++)
{
CLR_HT_CK;
if((xh&0x01)==0x01)
{
SET_HT_DI;
}
else
{
CLR_HT_DI;
}
SET_HT_CK;
xh=xh>>1;
}
}
//void Set_Dis_Array()
// {
// uchar i;
// for(i=0;i<29;i++)
// {
// Dis_Array[i]=0xff;
// }
// }
//初始化,并清空RAM
void init_VFD(void)
{
uchar i;
SET_HT_CS;
CLR_HT_CS;
Send_VFD_Data(0x00); // configering HT16511 as 8G 20SEG
SET_HT_CS;
CLR_HT_CS;
Send_VFD_Data(0x40); // successive address incresement
SET_HT_CS;
CLR_HT_CS;
Send_VFD_Data(0xc0); // intiate the starting address in HT 16511 with 0
// for(i=0;i<24;i++) //00h~17H
// {
Send_VFD_Data(0x00);
// }
SET_HT_CS;
CLR_HT_CS;
Send_VFD_Data(0x8f); //Turning OFF VFD with a duty of 2/16
SET_HT_CS;
}
//
/*******************************************/
//连续写,从起始地址,到结束地址,写入数据变量
/*******************************************/
void Write_VFD_Successively(uchar first_address ,uchar end_address,uchar dis_data)
{
uchar i;
first_address|=0xc0;
//*********For setting the displaying mode************//
SET_HT_CS;
CLR_HT_CS;
Send_VFD_Data(0x00);
SET_HT_CS;
//*********For setting where and how data are input*******//
CLR_HT_CS;
Send_VFD_Data(0x40);
SET_HT_CS;
//*********For setting the starting adress*****************//
CLR_HT_CS;
Send_VFD_Data(first_address); //0xc0-0xef
//******clear all the displaying ram in HT 16511***********//
for(i=first_address&0x3f;i<end_address;i++)
{
Send_VFD_Data(dis_data);
}
SET_HT_CS;
//**********For setting the displaying control command***//
CLR_HT_CS;
Send_VFD_Data(0x8f); //开VFD,且最亮化
SET_HT_CS;
}
/*******************************************/
//特定写,特定地址,写入数据变量
/*******************************************/
void Write_VFD_Specificly(uchar address,uchar dis_data)
{
uchar i;
//Setting the data mode as fixed address***//
address|=0xc0;
CLR_HT_CS;
Send_VFD_Data(0x44); //固定地址
SET_HT_CS;
//*****input the address*******************//
CLR_HT_CS;
Send_VFD_Data(address);
//******input the data*********************//
Send_VFD_Data(dis_data);
SET_HT_CS;
}
/*******************************************/
//显示治疗头
/*******************************************/
void show_hand(void)
{
if(project_n==1)
{
Write_VFD_Specificly(0,0xe8);
}
else
{
Write_VFD_Specificly(0,0x08);
}
}
/*******************************************/
//不 显示治疗头
/*******************************************/
void NO_show_hand(void)
{
if(project_n==1)
{
Write_VFD_Specificly(0,0xe0);
}
else
{
Write_VFD_Specificly(0,0x00);
}
}
/*******************************************/
//显示纹波动态
/*******************************************/
void show_wave(uchar num)
{
switch(num)
{
case 1:
{
if(project_n==1)
{
Write_VFD_Specificly(0,0xe8);
}
else
{
Write_VFD_Specificly(0,0x08);
}
} break;
case 2:
{
if(project_n==1)
{
Write_VFD_Specificly(0,0xec);
}
else
{
Write_VFD_Specificly(0,0x0c);
}
} break;
case 3:
{
if(project_n==1)
{
Write_VFD_Specificly(0,0xea);
}
else
{
Write_VFD_Specificly(0,0x0a);
}
} break;
case 4:
{
if(project_n==1)
{
Write_VFD_Specificly(0,0xe9);
}
else
{
Write_VFD_Specificly(0,0x09);
}
} break;
}//switch
Delay_10Ms(25);
}
/*******************************************/
//显示纹波动态2
/*******************************************/
void show_wave2(uchar num)
{
switch(num)
{
case 1:
{
if(project_n==1)
{
Write_VFD_Specificly(0,0xe8); //
}
else
{
Write_VFD_Specificly(0,0x08);
}
} break;
case 2:
{
if(project_n==1)
{
Write_VFD_Specificly(0,0xec);
}
else
{
Write_VFD_Specificly(0,0x0c);
}
} break;
case 3:
{
if(project_n==1)
{
Write_VFD_Specificly(0,0xee);
}
else
{
Write_VFD_Specificly(0,0x0e);
}
} break;
case 4:
{
if(project_n==1)
{
Write_VFD_Specificly(0,0xef);
}
else
{
Write_VFD_Specificly(0,0x0f);
}
} break;
}//switch
Delay_10Ms(25);
}
/*******************************************/
//显示身体纹波动态
/*******************************************/
void show_body_wave(uchar num)
{
switch(num)
{
case 1:
{
if(project_n==1)
{
Write_VFD_Specificly(5,0x08);
}
} break;
case 2:
{
if(project_n==1)
{
Write_VFD_Specificly(5,0x08);
}
} break;
case 3:
{
if(project_n==1)
{
Write_VFD_Specificly(5,0x04);
}
} break;
case 4:
{
if(project_n==1)
{
Write_VFD_Specificly(5,0x04);
}
} break;
}//switch
// Delay_10Ms(25);
}
/*******************************************/
//显示身体纹波动态2
/*******************************************/
void show_body_wave2(uchar num)
{
switch(num)
{
case 1:
{
if(project_n==1)
{
Write_VFD_Specificly(5,0x08);
}
} break;
case 2:
{
if(project_n==1)
{
Write_VFD_Specificly(5,0x08);
}
} break;
c