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

📄 vfdtask.lst

📁 一个带收音的功放程序, VFD显示驱动用一个非常实用的方法, 稍加修改即可换成不同的VFD, 功放芯片用M61538
💻 LST
📖 第 1 页 / 共 5 页
字号:
                      BYTE i; 
                      BYTE i_temp;
                      
                      //要显示的数的长度
                      BYTE Number_Length;
              
                      //将要显示的数转换成相应的
                      //BYTE Number_Change[5];
                      //先求出Number的显示长度
                      if(Number > 9999)
                              Number_Length = 5;
                      else if(Number > 999)
                              Number_Length = 4;
                      else if(Number > 99)
                              Number_Length = 3;
                      else if(Number > 9)
                              Number_Length = 2;
                      else
                              Number_Length = 1;
                      
                      //向VFD发送写VFD MEMORY 指令,并设置指定地址模式
                      //VFD_SendCmd(VFD_ADDRESS_INC);
                      
                      for(i = 0; i < MAX_8Char*2; i++)
                              VFD_RAM[i] = 0;
                      
                      for(i = 0; i < MAX_8Char; i++)
                      {
                                              
                              if(str_length > 0)
                              {
                                      if((str[i] >= '0') && (str[i] <= '9'))
                                              VFD_DATA = NUMBER_DISPLAY[str[i] - '0'];
                                      else if((str[i] >= 'A') && (str[i] <= 'Z'))
                                              VFD_DATA = LETTER_DISPLAY[str[i] - 'A'];        
                                      else if(str[i] == ' ')
                                              VFD_DATA = CHAR_;
                                      else if(str[i] == '+')
                                              VFD_DATA = CHAR_PLUS;
                                      else if(str[i] == '-')  
                                              VFD_DATA = CHAR_MINUS;
                                      
                                      str_length--;
                              }
                              else
                              {
                                      if(Number_Length <= (MAX_8Char - i -1) )
                                              VFD_DATA = CHAR_;
C51 COMPILER V7.20   VFDTASK                                                               07/16/2005 13:42:40 PAGE 6   

                                      else
                                      {
              
                                              if(Number_Length == 5)
                                              {
                                                      VFD_DATA = NUMBER_DISPLAY[Number / 10000];
                                                      Number = Number % 10000;
                                                      Number_Length--;
                                              }
                                              else if(Number_Length == 4)
                                              {
                                                      VFD_DATA = NUMBER_DISPLAY[Number / 1000];
                                                      Number = Number % 1000;
                                                      Number_Length--;
                                              }
              
                                              else if(Number_Length == 3)
                                              {
                                                      VFD_DATA = NUMBER_DISPLAY[Number / 100];
                                                      Number = Number % 100;
                                                      Number_Length--;
                                              }
                                              else if(Number_Length == 2)
                                              {
                                                      VFD_DATA = NUMBER_DISPLAY[Number / 10];
                                                      Number = Number % 10;
                                                      Number_Length--;
                                              }
                                              else if(Number_Length == 1)
                                              {
                                                      VFD_DATA = NUMBER_DISPLAY[Number];                                      
                                                      Number_Length--;
                                              }
              
                                              
                                                      
                                      }
                                      
                              }
              #if(MAX_Segment == 8)           
                              for(i_temp = 0; i_temp < 8; i_temp++)
                              {
                                      if(VFD_DATA & (1 << (8 - 1 - i_temp) ))
                                      {

                                              grid_temp = ((VFD_CHAR_SEGMENTS[i][i_temp]) & 0xFF00) >> 8;
                                              VFD_RAM[grid_temp] |= (VFD_CHAR_SEGMENTS[i][i_temp] & 0xFF);
                                      }
                              }       
              #else//like as 14-segment 
                              for(i_temp = 0; i_temp < 16; i_temp++)
                              {
                                      if(VFD_DATA & (1 << (16 - 1  - i_temp) ))
                                      {

                                              grid_temp = (((VFD_CHAR_SEGMENTS[i][i_temp]) & 0xFF00) >> 8)/2;
                                              Gird_Locate = (((VFD_CHAR_SEGMENTS[i][i_temp]) & 0xFF00) >> 8) % 2;
                                              if(Gird_Locate == 0)
                                                      VFD_RAM[grid_temp] |= (VFD_CHAR_SEGMENTS[i][i_temp] & 0xFF);
                                              else
                                                      VFD_RAM[grid_temp] |= (((VFD_CHAR_SEGMENTS[i][i_temp] & 0xFF)) << 8);   
                                      }
                              }
              #endif
C51 COMPILER V7.20   VFDTASK                                                               07/16/2005 13:42:40 PAGE 7   

                      }
                      VFD_SendCmd(VFD_ADDRESS_INC);
                      CLEAR_VFD_CS;
                      Delay5US();
                      VFD_SendByte(VFD_ADDRESS_MASK);
              #if(MAX_Segment == 8)
                      for(i = 0; i < MAX_8Char*2; i++)
                      {
                              VFD_SendByte(VFD_RAM[i]);
                      }       
              #else
                      _nop_();
              #endif
                      Delay5US();
                      SET_VFD_CS;
              }       
              #endif//NEW_VFD
 382          
 383          
 384          #ifdef  FUT_ZYC25085
 385          void    VFD_Display(BYTE *str,BYTE str_length, WORD Number, BYTE Need_Dot_On)
 386          {
 387   1              //要显示的转换数据
 388   1              WORD VFD_DATA;
 389   1              BYTE i; 
 390   1      
 391   1              //要显示的数的长度
 392   1              BYTE Number_Length;
 393   1      
 394   1              //将要显示的数转换成相应的
 395   1              //BYTE Number_Change[5];
 396   1              //先求出Number的显示长度
 397   1              if(Number > 9999)
 398   1                      Number_Length = 5;
 399   1              else if(Number > 999)
 400   1                      Number_Length = 4;
 401   1              else if(Number > 99)
 402   1                      Number_Length = 3;
 403   1              else if(Number > 9)
 404   1                      Number_Length = 2;
 405   1              else
 406   1                      Number_Length = 1;
 407   1              
 408   1              //向VFD发送写VFD MEMORY 指令,并设置指定地址模式
 409   1              VFD_SendCmd(VFD_ADDRESS_INC);
 410   1              
 411   1              for(i = 0; i < Max_Segment_Display; i++)
 412   1              {
 413   2                      
 414   2                      
 415   2                      CLEAR_VFD_CS;
 416   2                      Delay5US();
 417   2                      VFD_SendByte(VFD_ADDRESS_MASK + VFD_Refresh_Address[i]);
 418   2                      if(str_length > 0)
 419   2                      {
 420   3                              if((str[i] >= '0') && (str[i] <= '9'))
 421   3                                      VFD_DATA = NUMBER_DISPLAY[str[i] - '0'];
 422   3                              else if((str[i] >= 'A') && (str[i] <= 'Z'))
 423   3                                      VFD_DATA = LETTER_DISPLAY[str[i] - 'A'];        
 424   3                              else if(str[i] == ' ')
 425   3                                      VFD_DATA = CHAR_;
 426   3                              else if(str[i] == '+')
C51 COMPILER V7.20   VFDTASK                                                               07/16/2005 13:42:40 PAGE 8   

 427   3                                      VFD_DATA = CHAR_PLUS;
 428   3                              else if(str[i] == '-')  
 429   3                                      VFD_DATA = CHAR_MINUS;
 430   3                              str_length--;
 431   3                      }
 432   2                      else
 433   2                      {
 434   3                              if(Number_Length <= (Max_Segment_Display - i -1) )
 435   3                                      VFD_DATA = CHAR_;
 436   3                              else
 437   3                              {
 438   4      
 439   4                                      if(Number_Length == 5)
 440   4                                      {
 441   5                                              VFD_DATA = NUMBER_DISPLAY[Number / 10000];
 442   5                                              Number = Number % 10000;
 443   5                                              Number_Length--;
 444   5                                      }
 445   4                                      else if(Number_Length == 4)
 446   4                                      {
 447   5                                              VFD_DATA = NUMBER_DISPLAY[Number / 1000];
 448   5                                              Number = Number % 1000;
 449   5                                              Number_Length--;
 450   5                                      }
 451   4      
 452   4                                      else if(Number_Length == 3)
 453   4                                      {
 454   5                                              VFD_DATA = NUMBER_DISPLAY[Number / 100];
 455   5                                              Number = Number % 100;
 456   5                                              Number_Length--;
 457   5                                      }
 458   4                                      else if(Number_Length == 2)
 459   4                                      {
 460   5                                              VFD_DATA = NUMBER_DISPLAY[Number / 10];
 461   5                                              Number = Number % 10;
 462   5                                              Number_Length--;
 463   5                                      }
 464   4                                      else if(Number_Length == 1)
 465   4                                      {
 466   5                                              VFD_DATA = NUMBER_DISPLAY[Number];                                      
 467   5                                              Number_Length--;
 468   5                                      }
 469   4      
 470   4                                      if((Need_Dot_On == 1) && (i == 3))
 471   4                                              VFD_DATA |= 0x8000;
 472   4                                              
 473   4                              }
 474   3                              
 475   3                      }
 476   2      
 477   2                      VFD_SendByte(LowByte(VFD_DATA));
 478   2                  VFD_SendByte(HighByte(VFD_DATA));
 479   2                      
 480   2                      Delay5US();
 481   2                      SET_VFD_CS;
 482   2              }
 483   1      }
 484          #endif
 485          
 486          
 487          
 488          
C51 COMPILER V7.20   VFDTASK                                                               07/16/2005 13:42:40 PAGE 9   

 489          
 490          /*===================================================================
 491          描述:    将要显示的内容拷贝到BUFFER中, 内容长度=Grid_Size
 492          参数:    VFD_MSG *msg, 指向VFD_MSG结构常量的指针,包括长度和消息字符
 493          返回:    无
 494          ===================================================================*/
 495          void   VFD_WriteLedPort(BYTE LedPort)
 496          {
 497   1              CLEAR_VFD_CS;
 498   1              Delay5US();
 499   1              VFD_SendByte(VFD_WRITE_LED);
 500   1              VFD_SendByte(LedPort);
 501   1              Delay5US();
 502   1          SET_VFD_CS;
 503   1      }
 504          /*===================================================================
 505          描述:    设置VFD的模式 8G x 14P
 506          参数:    无
 507          返回:    无
 508          ===================================================================*/
 509          void    VFD_ModeSet(void)
 510          {
 511   1              VFD_SendCmd(VFD_MODE);
 512   1      }
 513          /*===================================================================
 514          描述:    设置VFD的显示打开,display on
 515          参数:    无
 516          返回:    无
 517          ===================================================================*/
 518          void    VFD_DisplayOn(void)

⌨️ 快捷键说明

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