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

📄 vfdtask.lst

📁 一个带收音的功放程序, VFD显示驱动用一个非常实用的方法, 稍加修改即可换成不同的VFD, 功放芯片用M61538
💻 LST
📖 第 1 页 / 共 5 页
字号:
 519          {
 520   1              VFD_SendCmd(0x8f);
 521   1      }
 522          /*===================================================================
 523          描述:    清除VFD显示数据
 524          参数:    无
 525          返回:    无
 526          ===================================================================*/
 527          void    VFD_ClearALL(void)
 528          {
 529   1      //      BYTE i;
 530   1              VFD_Display("     ",5, 0, 0);
 531   1              VFD_ICON_Display(0);
 532   1      }
 533          
 534          /*===================================================================
 535          描述:    VFD显示特殊字符
 536          参数:    要显示的VFD_ICON
 537          返回:    无
 538          ===================================================================*/
 539          void    VFD_ICON_Display(WORD ICON_Special)
 540          {
 541   1              VFD_SendCmd(VFD_ADDRESS_INC);
 542   1              CLEAR_VFD_CS;
 543   1              Delay5US();
 544   1              VFD_SendByte(VFD_ADDRESS_MASK);
 545   1              VFD_SendByte(LowByte(ICON_Special));
 546   1              VFD_SendByte(HighByte(ICON_Special));
 547   1          Delay5US();
 548   1              SET_VFD_CS;
 549   1      }
 550          /*===================================================================
C51 COMPILER V7.20   VFDTASK                                                               07/16/2005 13:42:40 PAGE 10  

 551          描述:    VFD显示关闭
 552          参数:    无
 553          返回:    无
 554          ===================================================================*/
 555          /*void    VFD_DisplayOff(void)
 556          {
 557                  VFD_ClearALL();
 558                  VFD_SendCmd(VFD_Dimming[VFD_Dim] & 0x7F);
 559          }
 560          */
 561          /*===================================================================
 562          描述:    读取VFD的按键输入,并得到键值
 563          参数:    无
 564          返回:    无
 565          ===================================================================*/
 566          void    VFD_SearchKey(void)
 567          {
 568   1              BYTE KEY_TEMP;  
 569   1              CLEAR_VFD_CS;
 570   1              Delay5US();
 571   1          VFD_SendByte(VFD_READ_KEY);
 572   1          Delay5US(); 
 573   1              KEY_TEMP = VFD_ReadByte();
 574   1              VFD_ReadByte();
 575   1              VFD_ReadByte();
 576   1          Delay5US();
 577   1              SET_VFD_CS;     
 578   1              if(KEY_TEMP != 0)
 579   1              {
 580   2                      if(Key_Timer == 0)
 581   2                              Key_Timer = 1;
 582   2                      Panel_Key = KEY_TEMP;
 583   2              }
 584   1              else
 585   1              {
 586   2                      if(Panel_Key != 0)
 587   2                      {
 588   3                              if(Key_Timer > 40)
 589   3                              {
 590   4                                      Panel_Key = 8;
 591   4                              }       
 592   3                              Key_Timer = 0;
 593   3                              Panel_KeyAct = 1;
 594   3                      }
 595   2              }
 596   1      }
 597          /*===================================================================
 598          描述:    VFD驱动控制芯片的初始化
 599          参数:    无
 600          返回:    无
 601          ===================================================================*/
 602          void    VFD_Init(void)
 603          {
 604   1      //      BYTE i;
 605   1              VFD_ModeSet();
 606   1              VFD_DisplayOn();        
 607   1              VFD_WriteLedPort(0xF);  //将代表POWER OFF的LED点亮,同时将代表POWER ON的LED灯熄灭
 608   1              VFD_ClearALL();
 609   1      
 610   1              
 611   1      }
 612          
C51 COMPILER V7.20   VFDTASK                                                               07/16/2005 13:42:40 PAGE 11  

 613          /*===================================================================
 614          描述:    VFD显示内容清零
 615          参数:    无
 616          返回:    无
 617          ===================================================================*/
 618          /*
 619          void    VFD_RAMZero(void)
 620          {
 621                  BYTE i;
 622                  for(i = 0; i < Grid_Size; i++)
 623                  {
 624                          VFD_RAMData[i] = 0;
 625                  }
 626          }
 627          */
 628          void Frequency_Display(void)
 629          {
 630   1              if(FM_AM_Select == FM_MODE)
 631   1              {               
 632   2                      VFD_Display(" ", 0, 8750 + DeltFMFreq * 5, 1);
 633   2                      VFD_ICON_Display(ICON_FM | ICON_MHZ);
 634   2              }
 635   1              else
 636   1              {       
 637   2                      VFD_Display(" ", 0, 530 + DeltAMFreq * 5, 0);   
 638   2                      VFD_ICON_Display(ICON_AM | ICON_KHZ);
 639   2              }
 640   1              
 641   1      }
 642          void Main_Display(void)
 643          {
 644   1              BYTE TEMP;
 645   1              switch(Current_State)
 646   1              {
 647   2      
 648   2                      case TUNER:     
 649   2                                              if(Channel_Display > 0)
 650   2                                              {
 651   3                                                      String_Display[0] = 'C';
 652   3                                                      String_Display[1] = 'H';
 653   3                                                      String_Display[2] = ' ';
 654   3                                                      if((Scan_Channel+1) > 9)
 655   3                                                      {
 656   4                                                              TEMP = (Scan_Channel+1)/10;                                             
 657   4                                                              String_Display[3] = '0' + TEMP;
 658   4                                                      }
 659   3                                                      else
 660   3                                                              String_Display[3] = ' ';
 661   3                                                      String_Display[4] = '0' + ((Scan_Channel+1)  % 10);
 662   3                                                      //VFD_DisplayString(String_Display,5);
 663   3                                                      VFD_Display(String_Display, 5, 0, 0);
 664   3                                                      Channel_Display--;
 665   3                                                      if(FM_AM_Select == FM_MODE)
 666   3                                                              VFD_ICON_Display(ICON_FM);
 667   3                                              
 668   3                                                      else
 669   3                                                              VFD_ICON_Display(ICON_AM);
 670   3                                                      
 671   3                                              }
 672   2                                              else
 673   2                                                      Frequency_Display();                                    
 674   2                                              break;
C51 COMPILER V7.20   VFDTASK                                                               07/16/2005 13:42:40 PAGE 12  

 675   2                      case AUX1: 
 676   2                                      
 677   2                                              //VFD_DisplayString("AUX 1", 5);
 678   2                                              VFD_Display("AUX 1 ", 5, 0, 0);
 679   2                                              VFD_ICON_Display(0);
 680   2                                              break;                  
 681   2                      case AUX2: 
 682   2                                              
 683   2                                              VFD_Display("AUX 2 ", 5, 0, 0);
 684   2                                              VFD_ICON_Display(0);
 685   2                                              break;
 686   2                      case CH5: 
 687   2                                                                      
 688   2                                              VFD_Display("6CH ", 5, 0, 0);
 689   2                                              VFD_ICON_Display(0);
 690   2                                              break;
 691   2              }
 692   1      }
 693          /*===================================================================
 694          描述:    VFD任务调度函数
 695          参数:    无
 696          返回:    无
 697          ===================================================================*/
 698          void VFD_Task_Proc(void)
 699          {
 700   1              if( (TO_MAIN_DISPLAY == 0) && (Mute_Switch == 0) )
 701   1              {
 702   2                      Main_Display();
 703   2                      FUNCTION_Count = 0;
 704   2                      Memory_Start = 0;
 705   2                      Digital_Number = 0;
 706   2              }
 707   1              else if((TO_MAIN_DISPLAY > 0) && (Memory_Start == 1))
 708   1              {               
 709   2                      if(FLASH_TEMP == 0)
 710   2                      {
 711   3                              String_Display[3] = (Digital_Number / 10) + '0';
 712   3                              String_Display[4] = (Digital_Number % 10) + '0';
 713   3                                                      
 714   3                      }
 715   2                      else
 716   2                      {
 717   3                              String_Display[3] = ' ';
 718   3                              String_Display[4] = ' ';                
 719   3                      }
 720   2                      VFD_Display(String_Display, 5, 0, 0);
 721   2              }
 722   1      }
 723          
 724          
C51 COMPILER V7.20   VFDTASK                                                               07/16/2005 13:42:40 PAGE 13  

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION VFD_ReadByte (BEGIN)
                                           ; SOURCE LINE # 38
                                           ; SOURCE LINE # 39
                                           ; SOURCE LINE # 41
0000 E4                CLR     A
0001 F500        R     MOV     ReceiveData,A
                                           ; SOURCE LINE # 42
0003 F500        R     MOV     i,A
0005         ?C0001:
                                           ; SOURCE LINE # 43
                                           ; SOURCE LINE # 44
0005 E500        R     MOV     A,ReceiveData
0007 C3                CLR     C
0008 13                RRC     A
0009 F500        R     MOV     ReceiveData,A
                                           ; SOURCE LINE # 45
000B C295              CLR     VFD_CLK
                                           ; SOURCE LINE # 46
000D 120000      E     LCALL   Delay5US
                                           ; SOURCE LINE # 47
0010 D295              SETB    VFD_CLK
                                           ; SOURCE LINE # 48
0012 120000      E     LCALL   Delay5US
                                           ; SOURCE LINE # 49
0015 309603            JNB     VFD_DATA,?C0003
                                           ; SOURCE LINE # 50
0018 430080      R     ORL     ReceiveData,#080H
                                           ; SOURCE LINE # 51
001B         ?C0003:
001B 0500        R     INC     i
001D E500        R     MOV     A,i
001F C3                CLR     C
0020 9408              SUBB    A,#08H
0022 40E1              JC      ?C0001
0024         ?C0002:
                                           ; SOURCE LINE # 52
0024 D296              SETB    VFD_DATA
                                           ; SOURCE LINE # 53
0026 AF00        R     MOV     R7,ReceiveData
                                           ; SOURCE LINE # 54
0028         ?C0005:
0028 22                RET     
             ; FUNCTION VFD_ReadByte (END)

             ; FUNCTION _VFD_SendByte (BEGIN)
                                           ; SOURCE LINE # 60
0000 8F00        R     MOV     VFD_SendByte,R7
                                           ; SOURCE LINE # 61
                                           ; SOURCE LINE # 63
0002 C296              CLR     VFD_DATA
                                           ; SOURCE LINE # 64
0004 120000      E     LCALL   Delay5US
                                           ; SOURCE LINE # 65
;---- Variable 'i' assigned to Register 'R7' ----
0007 E4                CLR     A

⌨️ 快捷键说明

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