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

📄 pt6311.c

📁 VFD显示屏的驱动 PT6311的完整子程序,已正常使用.
💻 C
字号:
/* 发送数据到PT6311进行显示 */
/* 参数0: PAR[0] 要写的显存地址(MSB: 1 1 B5,B4,B3,B2,B1,B0 :LSB)(B5-B0 MEM START ADDRESS) */
/* 参数1: PAR[1] 写的低8位数据(先送出, 且从bit0位开始) */
/* 参数2: PAR[2] 写的中8位数据 */
/* 参数3: PAR[3] 写的高1位数据 */
/* 参数 PAR_T;    位变量,可作为函参数 */
/* VFD的使用,先用 */

/* 48    pt6311键总数(48个) */
/* 0x0C  显示模式设置命令(0000,1100=0CH 13G,15P */
/* 0x40  数据设置命令,写数据到显示寄存器,数据写入后地址增加,一般工作模式 */
/* 0x41  写数据到LED命令*/
/* 0x42  PT6311读键值命令符 */
/* 0x8f  显示控制命令,Sets pulse width to 14/16. Display on */
/* 0xC0  地址设置命令 pt6311的Display RAM的起始地址00-2f */
/* 0x43  读SW的值 */

void wvfd_6311()
{
   bc_stb_6311=0;  // pt6311 stb=0 (ENABLE)
   some_nop();
   par_t=0x40;    /* 数据设置命令,写数据到显示寄存器,,数据写入后地址增加,一般工作模式 */
   disp_6311();
   bc_stb_6311=1;  /* pt6311 stb=0 (ENABLE) 先关掉STAB,然后再打开,这会会稳定些  */
   some_nop();
   bc_stb_6311=0;  // pt6311 stb=0 (ENABLE)   
   some_nop();
   par_t=par[0];
   disp_6311();
   some_nop();
   par_t=par[1];
   disp_6311();
   some_nop();
   par_t=par[2];
   disp_6311();
   bc_stb_6311=1;      // PT6311 DISABLE
}

/* 读键盘按键子程序  */
/* 返回: key_6311  返回键值, 0=无按键  ,不可用PAR[0] 作为参数,否则显示乱 */
void getkey_6311()
{
  uchar i;
  bc_stb_6311=1;
  _nop_(); _nop_(); _nop_(); _nop_();
  bc_stb_6311=0;
  some_nop();
  par_t=0x72;  /* 向pt6311发送读键值命令 */
  disp_6311();
  some_nop();
  key_6311=0;       
 // par[0]=0;      /* 不能用PAR[0] 作为参数,否则显示乱 */
 // bc_data_6311=0; 
  for(i=48;i>0;i--)  /* 6311 总48 个键 */
    {
      bc_clk_6311=1; 
      bc_data_6311=1;
      some_nop();
      bc_clk_6311=0; 
      some_nop();
      if(bc_data_6311==1)   
        { key_6311=i;       /* 原为 par[0]=i; 时显示乱 */
          break;
        }
    }
 bc_stb_6311=1;
 some_nop();
}


/* 显示模式命令 分G,P */
void setup_6311()
{
  bc_stb_6311=0;      // ready to send data to pt6311 STB
  some_nop();
  par_t=0x0c;        // 0000,1100=0CH 13G,15P
  disp_6311();       //  send command to pt6311,here is set displayer mod,11dig/17seg
  some_nop();
  bc_stb_6311=1;  
}

/* ------- 打开荧光显示 显示控制命令 --------  */
void dim_vfd()
{ 
  bc_stb_6311=0;             /* STD=0  点亮显示字符 */
  some_nop();
  par_t=0x8f;  /* 显示控制命令,Sets pulse width to 14/16. Display on */
  disp_6311();
  bc_stb_6311=1;           //STD=1
} 

/* 清屏 */
void clear_vfd()
{
  uchar i;
  bc_stb_6311=0;
  par[0]=0xc0;
  par[1]=0x00;
  par[2]=0x00;
  for(i=0;i<14;i++)
    {
      wvfd_6311();       /* 送入pt6311显存 */
      par[0]=0xc0+3*i;   /*  start address move to next digit 下一段,段地址  */
    }
  bc_stb_6311=1;
}



/* 送数据到6311的LED口  */
/* 参数PAR[0]	PAR[0]--LED数据 */
void wled_6311()
{
  bc_stb_6311=0;   /* PT6311 ENBLE  */
  par_t=0x41;      // data set command--write data to LED PORT
  disp_6311();     // sendn data to pt6311 here is data set command
  par_t=led_6311;    // pt6311 LED DATA to PAR[0]
  disp_6311();     // send data to pt6311 here is address set command
  bc_stb_6311=1;   // pt6311 disable
}

/* 发一字节数据到6311  参数 PAR_T */
void disp_6311() 
{
  uchar i;
  for(i=0;i<8;i++)
    {
      bc_clk_6311=0;
      bc_data_6311=par_t_0;
      par_t=par_t>>1;
      some_nop();
      bc_clk_6311=1;
      some_nop();
    } 
  bc_data_6311=1;
  bc_clk_6311=1;
}


void sw_6311()
{
  uchar i;
  bc_stb_6311=0;      // ready to send data to pt6311 STB
  some_nop();
  par_t=0x43;        // 0000,1100=0CH 13G,15P
  disp_6311();       //  send command to pt6311,here is set displayer mod,11dig/17seg
  some_nop();
  par[0]=0;
  for(i=0;i<8;i++)  /* 6311 读SW值 */
    {
      bc_clk_6311=1; 
      bc_data_6311=1;
      some_nop();
      bc_clk_6311=0; 
      some_nop();
      if(bc_data_6311==1)   par[0]++;
    }  
  bc_stb_6311=1;  
}


void some_nop()
{
  _nop_(); _nop_(); _nop_();
}

⌨️ 快捷键说明

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