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

📄 vfd.c

📁 驱动VFD屏
💻 C
📖 第 1 页 / 共 2 页
字号:
/************************************/
//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;
	   case 3:
	   {
	      if(project_n==1)	
        {	
           Write_VFD_Specificly(5,0x0c);
        }
       	
	   } break;
	   case 4:
	   {
	      if(project_n==1)	
        {	
           Write_VFD_Specificly(5,0x0c);
        }
        	
	   } break;
	 }//switch
	// Delay_10Ms(25);
}
/*******************************************/
//显示renchenwen纹波动态
/*******************************************/ 
void show_mark_wave(uchar num)
{
  switch(num)
	 {
	   case 1:
	   {
	      if(project_n==2)	
        {	
           Write_VFD_Specificly(5,0x08);
        }
        
	   } break;	
	   case 2:
	   {
	      if(project_n==2)	
        {	
           Write_VFD_Specificly(5,0x08);
        }
        	
	   } break;
	   case 3:
	   {
	      if(project_n==2)	
        {	
           Write_VFD_Specificly(5,0x02);
        }
       	
	   } break;
	   case 4:
	   {
	      if(project_n==2)	
        {	
           Write_VFD_Specificly(5,0x02);
        }
        	
	   } break;
	 }//switch
	// Delay_10Ms(25);
}
/*******************************************/
//显示renchenwen纹波动态2
/*******************************************/ 
void show_mark_wave2(uchar num)
{
  switch(num)
	 {
	   case 1:
	   {
	      if(project_n==2)	
        {	
           Write_VFD_Specificly(5,0x08);
        }
        
	   } break;	
	   case 2:
	   {
	      if(project_n==2)	
        {	
           Write_VFD_Specificly(5,0x08);
        }
        	
	   } break;
	   case 3:
	   {
	      if(project_n==2)	
        {	
           Write_VFD_Specificly(5,0x0a);
        }
       	
	   } break;
	   case 4:
	   {
	      if(project_n==2)	
        {	
           Write_VFD_Specificly(5,0x0a);
        }
        	
	   } break;
	 }//switch
	// Delay_10Ms(25);
}
/*******************************************/
//显示面部动态
/*******************************************/
void show_face_wave(uchar num)
{
  switch(num)
	 {
	   case 1:
	   {
	      if(project_n==3)	
        {	
           Write_VFD_Specificly(3,0x07);
        }
        
	   } break;	
	   case 2:
	   {
	      if(project_n==3)	
        {	
           Write_VFD_Specificly(3,0x0c);
        }
        	
	   } break;

⌨️ 快捷键说明

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