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

📄 vfdtask.lst

📁 一个带收音的功放程序, VFD显示驱动用一个非常实用的方法, 稍加修改即可换成不同的VFD, 功放芯片用M61538
💻 LST
📖 第 1 页 / 共 2 页
字号:
 262   1          SET_VFD_CS;
 263   1      }
 264          /*===================================================================
 265          描述:    设置VFD的模式 8G x 14P
 266          参数:    无
 267          返回:    无
 268          ===================================================================*/
 269          void    VFD_ModeSet(void)
 270          {
 271   1              VFD_SendCmd(VFD_MODE);
 272   1      }
 273          /*===================================================================
 274          描述:    设置VFD的显示打开,display on
 275          参数:    无
 276          返回:    无
 277          ===================================================================*/
 278          void    VFD_DisplayOn(void)
 279          {
 280   1              VFD_SendCmd(0x8f);
 281   1      }
 282          /*===================================================================
 283          描述:    清除VFD显示数据
 284          参数:    无
 285          返回:    无
 286          ===================================================================*/
 287          void    VFD_ClearALL(void)
 288          {
 289   1              BYTE i;
 290   1              
 291   1              for(i=0; i<Grid_Size; i++)
 292   1                      VFD_RAMData[i] = 0;
 293   1              VFD_SendCmd(VFD_ADDRESS_INC);
 294   1              CLEAR_VFD_CS;
 295   1              Delay5US();
 296   1          Delay5US();
 297   1              VFD_SendByte(VFD_ADDRESS_MASK);
 298   1              VFD_SendString(VFD_RAMData,6);
 299   1              Delay5US();
 300   1              Delay5US();
 301   1              SET_VFD_CS;
 302   1      }
 303          //发送一系列数据
C51 COMPILER V7.20   VFDTASK                                                               06/30/2005 14:02:58 PAGE 6   

 304          void    VFD_SendString(WORD *str, BYTE length)
 305          {
 306   1              while(length)
 307   1          {
 308   2             VFD_SendByte(LowByte(*str));
 309   2                 VFD_SendByte(HighByte(*str));
 310   2             length--;
 311   2             if(length > 0)
 312   2             str++;
 313   2          }
 314   1      }
 315          /*===================================================================
 316          描述:    VFD显示特殊字符
 317          参数:    要显示的VFD_ICON
 318          返回:    无
 319          ===================================================================*/
 320          void    VFD_ICON_Display(WORD ICON_Special)
 321          {
 322   1              VFD_SendCmd(VFD_ADDRESS_INC);
 323   1              CLEAR_VFD_CS;
 324   1              Delay5US();
 325   1          Delay5US();
 326   1              VFD_SendByte(VFD_ADDRESS_MASK);
 327   1              VFD_SendByte(LowByte(ICON_Special));
 328   1              VFD_SendByte(HighByte(ICON_Special));
 329   1          Delay5US();
 330   1              Delay5US();
 331   1              SET_VFD_CS;
 332   1      }
 333          /*===================================================================
 334          描述:    VFD显示关闭
 335          参数:    无
 336          返回:    无
 337          ===================================================================*/
 338          /*void    VFD_DisplayOff(void)
 339          {
 340                  VFD_ClearALL();
 341                  VFD_SendCmd(VFD_Dimming[VFD_Dim] & 0x7F);
 342          }
 343          */
 344          /*===================================================================
 345          描述:    读取VFD的按键输入,并得到键值
 346          参数:    无
 347          返回:    无
 348          ===================================================================*/
 349          void    VFD_SearchKey(void)
 350          {
 351   1              BYTE KEY_TEMP;  
 352   1              CLEAR_VFD_CS;
 353   1              Delay5US();
 354   1          VFD_SendByte(VFD_READ_KEY);
 355   1          Delay5US(); 
 356   1              KEY_TEMP = VFD_ReadByte();
 357   1              VFD_ReadByte();
 358   1              VFD_ReadByte();
 359   1          Delay5US();
 360   1              SET_VFD_CS;     
 361   1              if(KEY_TEMP != 0)
 362   1              {
 363   2                      if(Key_Timer == 0)
 364   2                              Key_Timer = 1;
 365   2                      Panel_Key = KEY_TEMP;
C51 COMPILER V7.20   VFDTASK                                                               06/30/2005 14:02:58 PAGE 7   

 366   2              }
 367   1              else
 368   1              {
 369   2                      if(Panel_Key != 0)
 370   2                      {
 371   3                              if(Key_Timer > 40)
 372   3                              {
 373   4                                      Panel_Key = 8;
 374   4                              }       
 375   3                              Key_Timer = 0;
 376   3                              Panel_KeyAct = 1;
 377   3                      }
 378   2              }
 379   1      }
 380          /*===================================================================
 381          描述:    VFD驱动控制芯片的初始化
 382          参数:    无
 383          返回:    无
 384          ===================================================================*/
 385          void    VFD_Init(void)
 386          {
 387   1              BYTE i;
 388   1              VFD_ModeSet();
 389   1              VFD_DisplayOn();
 390   1              for(i =0; i<6; i++)
 391   1                      VFD_RAMData[i] = 0;                             //显示RAM清零
 392   1              
 393   1      
 394   1              VFD_WriteLedPort(0xF);  //将代表POWER OFF的LED点亮,同时将代表POWER ON的LED灯熄灭
 395   1              VFD_SendCmd(VFD_ADDRESS_INC);           //送写显示存储器指令,并将地址设置为自增模式
 396   1      
 397   1              CLEAR_VFD_CS;                                           //将显示内容写入到VFD
 398   1              Delay5US();                                                     //这里是将全0值写入, 上电时清除VFD显示内容
 399   1          Delay5US();
 400   1              VFD_SendByte(VFD_ADDRESS_MASK);
 401   1              VFD_SendString(VFD_RAMData,6);
 402   1              Delay5US();
 403   1              Delay5US();
 404   1              SET_VFD_CS;
 405   1      }
 406          
 407          /*===================================================================
 408          描述:    VFD显示内容清零
 409          参数:    无
 410          返回:    无
 411          ===================================================================*/
 412          /*
 413          void    VFD_RAMZero(void)
 414          {
 415                  BYTE i;
 416                  for(i = 0; i < Grid_Size; i++)
 417                  {
 418                          VFD_RAMData[i] = 0;
 419                  }
 420          }
 421          */
 422          void Frequency_Display(void)
 423          {
 424   1              if(FM_AM_Select == FM_MODE)
 425   1              {               
 426   2      
 427   2                      VFD_DisplayNumber(8750 + DeltFMFreq * 5, 1, 1);
C51 COMPILER V7.20   VFDTASK                                                               06/30/2005 14:02:58 PAGE 8   

 428   2                      VFD_ICON_Display(ICON_FM | ICON_MHZ);
 429   2              }
 430   1              else
 431   1              {                               
 432   2                      VFD_DisplayNumber(530 + DeltAMFreq * 5, 0, 1);
 433   2                      VFD_ICON_Display(ICON_AM | ICON_KHZ);
 434   2              }
 435   1              
 436   1      }
 437          void Main_Display(void)
 438          {
 439   1              BYTE TEMP;
 440   1              switch(Current_State)
 441   1              {

 442   2                      case TUNER:     
 443   2                                              if(Channel_Display > 0)
 444   2                                              {
 445   3                                                      String_Display[0] = 'C';
 446   3                                                      String_Display[1] = 'H';
 447   3                                                      String_Display[2] = ' ';
 448   3                                                      if((Scan_Channel+1) > 9)
 449   3                                                      {
 450   4                                                              TEMP = (Scan_Channel+1)/10;                                             
 451   4                                                              String_Display[3] = '0' + TEMP;
 452   4                                                      }
 453   3                                                      else
 454   3                                                              String_Display[3] = ' ';
 455   3                                                      String_Display[4] = '0' + ((Scan_Channel+1)  % 10);
 456   3                                                      VFD_DisplayString(String_Display,5);
 457   3                                                      Channel_Display--;
 458   3                                                      if(FM_AM_Select == FM_MODE)
 459   3                                                              VFD_ICON_Display(ICON_FM);
 460   3                                              
 461   3                                                      else
 462   3                                                              VFD_ICON_Display(ICON_AM);
 463   3                                                      
 464   3                                              }
 465   2                                              else
 466   2                                                      Frequency_Display();                                    
 467   2                                              break;
 468   2                      case AUX1: 
 469   2                                      
 470   2                                              VFD_DisplayString("AUX 1", 5);
 471   2                                              VFD_ICON_Display(0);
 472   2                                              break;                  
 473   2                      case AUX2: 
 474   2                                              
 475   2                                              VFD_DisplayString("AUX 2", 5);
 476   2                                              VFD_ICON_Display(0);
 477   2                                              break;
 478   2                      case CH5: 
 479   2                                                                      
 480   2                                              VFD_DisplayString("6CH  ", 5);
 481   2                                              VFD_ICON_Display(0);
 482   2                                              break;
 483   2              }
 484   1      }
 485          /*===================================================================
 486          描述:    VFD任务调度函数
 487          参数:    无
 488          返回:    无
 489          ===================================================================*/
C51 COMPILER V7.20   VFDTASK                                                               06/30/2005 14:02:58 PAGE 9   

 490          void VFD_Task_Proc(void)
 491          {
 492   1              if( (TO_MAIN_DISPLAY == 0) && (Mute_Switch == 0) )
 493   1              {
 494   2                      Main_Display();
 495   2                      FUNCTION_Count = 0;
 496   2                      Memory_Start = 0;
 497   2                      Digital_Number = 0;
 498   2              }
 499   1              else if((TO_MAIN_DISPLAY > 0) && (Memory_Start == 1))
 500   1              {               
 501   2                      if(FLASH_TEMP == 0)
 502   2                      {
 503   3                              String_Display[3] = (Digital_Number / 10) + '0';
 504   3                              String_Display[4] = (Digital_Number % 10) + '0';
 505   3                                                      
 506   3                      }
 507   2                      else
 508   2                      {
 509   3                              String_Display[3] = ' ';
 510   3                              String_Display[4] = ' ';                
 511   3                      }
 512   2                      VFD_DisplayString(String_Display,5);
 513   2              }
 514   1      }
 515          
 516          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1405    ----
   CONSTANT SIZE    =     90    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      24
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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