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

📄 keyproc.lst

📁 一个带收音的功放程序, VFD显示驱动用一个非常实用的方法, 稍加修改即可换成不同的VFD, 功放芯片用M61538
💻 LST
📖 第 1 页 / 共 5 页
字号:
 236   5                                              case MUTE_KEY:                                           
 237   5                                                       if(Mute_Switch == 0)
 238   5                                                       {
 239   6                                                              Mute_Switch = 1;
 240   6                                                              AV_STANDBY = 1;
C51 COMPILER V7.20   KEYPROC                                                               07/16/2005 13:42:40 PAGE 5   

 241   6                                                              VFD_Display("MUTE ", 5, 0, 0);  
 242   6                                                              VFD_ICON_Display(ICON_MUTE);
 243   6                                                       }
 244   5                                                       else
 245   5                                                       {
 246   6                                                              if(Current_State == TUNER)
 247   6                                                                      Tuner_MuteOFF_Display();
 248   6                                                              Mute_Switch = 0;
 249   6                                                              AV_STANDBY = 0;
 250   6                                                       }
 251   5                                                       
 252   5                                                       break;
 253   5                                                       
 254   5                                              case KEY_0:                                                                                             
 255   5                                              case KEY_1:
 256   5                                              case KEY_2:
 257   5                                              case KEY_3:     
 258   5                                              case KEY_4:     
 259   5                                              case KEY_5PLUS:
 260   5                                                       if(Current_State == TUNER)
 261   5                                                              Proc_Digital_Key();                                                     
 262   5                                                       break;
 263   5      
 264   5                                              case MEMORY_KEY:
 265   5                                                       if(Current_State == TUNER)
 266   5                                                              Proc_MEMORY_Key();
 267   5                                                       break;
 268   5                                                      
 269   5                                              default:
 270   5                                                       break;
 271   5                                      }
 272   4                              
 273   4                      }
 274   3                      }
 275   2                      Current_Key = NO_KEY;
 276   2              }
 277   1      }
 278          
 279          
 280          
 281          void Power_Proc(void)
 282          {
 283   1              BYTE i;
 284   1              if(POWER_Status == 0)
 285   1              {                               
 286   2                      Tuner_Channel_Init();
 287   2                      FMAM_PRESSED    = 0;
 288   2                      Auto_Scan_Enable = Auto_Scan_Stop;
 289   2                      Auto_Scan_Start = 0;
 290   2                      Manual_Scan_Flag = 0;
 291   2                      Auto_Is_Reach = 0;
 292   2                      Mono_Stereo_Select = Tuner_STEREO;
 293   2                      FM_AM_Select = FM_MODE;
 294   2                      Channel_Display = 100;
 295   2                      VFD_WriteLedPort(0x0);          
 296   2                      Tuner_Open();
 297   2                      VFD_DisplayOn();
 298   2                      DelayX1ms(10);  
 299   2                      Mute_Switch = 0;
 300   2                      Volume_Control = 1;     
 301   2                      Current_State  = TUNER;
 302   2                      Source_Set();
C51 COMPILER V7.20   KEYPROC                                                               07/16/2005 13:42:40 PAGE 6   

 303   2                      for(i = TOTAL_VOLUME; i <= SURROUNDR_VOLUME; i++)
 304   2                              VOLUME_CHANNEL[i] = 30;         
 305   2                      Memory_Start    = 0;
 306   2                      Digital_Number  = 0;
 307   2                      Volume_Tune(ALLCH_Vol);                         
 308   2                      TO_MAIN_DISPLAY = 25;
 309   2                      POWER_Status = 1;       
 310   2                      AV_STANDBY = 0; 
 311   2                      
 312   2                      
 313   2              }
 314   1              else if(POWER_Status == 1)
 315   1              {       
 316   2                      Volume_Control = 0;
 317   2                      AV_STANDBY = 1;
 318   2                      Current_State  = STANDBY;
 319   2                      VFD_WriteLedPort(0xF);
 320   2                      VFD_ClearALL();                         
 321   2                      Mute_Switch   = 1;
 322   2                      Current_State  = STANDBY;
 323   2                      POWER_Status = 0;
 324   2                      
 325   2              }
 326   1              Current_Key     = NO_KEY;
 327   1      }
 328          
 329          void  Proc_Volume_UP(void)
 330          {
 331   1               BYTE i;
 332   1              
 333   1               Mute_Switch = 0;
 334   1               AV_STANDBY = 0;
 335   1               for(i = TOTAL_VOLUME; i <= SURROUNDR_VOLUME; i++)
 336   1               {
 337   2                      if(VOLUME_CHANNEL[i] < Volume_Max)
 338   2                              VOLUME_CHANNEL[i]++;
 339   2               }                      
 340   1              if(VOLUME_CHANNEL[TOTAL_VOLUME] > 9)
 341   1                      VFD_Display("VOL", 3, VOLUME_CHANNEL[TOTAL_VOLUME], 0);
 342   1              else
 343   1                      VFD_Display("VOL0", 3, VOLUME_CHANNEL[TOTAL_VOLUME], 0);                                                
 344   1              VFD_ICON_Display(0);
 345   1              Volume_Tune(ALLCH_Vol); 
 346   1              Volume_Key_Dealed = 0;
 347   1              TO_MAIN_DISPLAY = 50;
 348   1      }
 349          void  Proc_Volume_DOWN(void)
 350          {
 351   1              BYTE i;
 352   1      
 353   1              Mute_Switch = 0;
 354   1              AV_STANDBY = 0;
 355   1      
 356   1              for(i = TOTAL_VOLUME; i <= SURROUNDR_VOLUME; i++)
 357   1              {
 358   2                      if(VOLUME_CHANNEL[i] > Volume_Min)
 359   2                              VOLUME_CHANNEL[i]--;
 360   2              }
 361   1              if(VOLUME_CHANNEL[TOTAL_VOLUME] == 0)
 362   1                      AV_STANDBY = 1;
 363   1              
 364   1              if(VOLUME_CHANNEL[TOTAL_VOLUME] > 9)
C51 COMPILER V7.20   KEYPROC                                                               07/16/2005 13:42:40 PAGE 7   

 365   1                      VFD_Display("VOL", 3, VOLUME_CHANNEL[TOTAL_VOLUME], 0);
 366   1              else
 367   1                      VFD_Display("VOL0", 3, VOLUME_CHANNEL[TOTAL_VOLUME], 0);
 368   1              VFD_ICON_Display(0);
 369   1              Volume_Key_Dealed = 0;
 370   1              Volume_Tune(ALLCH_Vol); 
 371   1              TO_MAIN_DISPLAY = 40;
 372   1      }
 373          
 374          /*===================== 功能按键处理 =============*/
 375          
 376          code BYTE Function_Display[] = 
 377          {
 378                  'F','L','F','R','S','W','C',' ','S','L','S','R'
 379          };
 380          
 381          void Proc_FUNCTION_Key(void)
 382          {
 383   1              
 384   1              if(VOLUME_CHANNEL[TOTAL_VOLUME] == 0)
 385   1                      return;
 386   1               //音量调节时,假如原来在MUTE状态, 关闭MUTE状态
 387   1               Mute_Switch = 0;
 388   1      
 389   1               //音量调节时, 假如原来功放MUTE掉, 打开
 390   1               AV_STANDBY = 0;
 391   1               VFD_ICON_Display(0);
 392   1               FUNCTION_Count++;
 393   1               //假如在5.1通道,那么程序要循环,从FL,FR,BASS, CENTER, SL到SR, 然后到FL
 394   1               if(Current_State == CH5)
 395   1               {
 396   2                      if(FUNCTION_Count == 7)
 397   2                              FUNCTION_Count = 1;
 398   2               }
 399   1               else
 400   1               {
 401   2      
 402   2                      //否则, 从FL,FR,SUBWOOFER三个之间循环
 403   2                      if(FUNCTION_Count == 4)
 404   2                              FUNCTION_Count = 1;
 405   2               }
 406   1                                              
 407   1               Difference_Value();
 408   1           VFD_Display(String_Display, 5, 0, 0);                                                      
 409   1               TO_MAIN_DISPLAY = 120;                                  
 410   1      }
 411          void            Proc_KEYPLUSorMinus(void)
 412          {
 413   1              if(TO_MAIN_DISPLAY == 0)
 414   1                      return;
 415   1              
 416   1              if(Current_Key == KEY_PLUS)
 417   1              {
 418   2                      if((VOLUME_CHANNEL[FUNCTION_Count] < Volume_Max) && (VOLUME_CHANNEL[FUNCTION_Count] < (VOLUME_CHANNEL[TO
             -TAL_VOLUME] + 10)))   
 419   2                              VOLUME_CHANNEL[FUNCTION_Count]++;                       
 420   2              }
 421   1              else
 422   1              {
 423   2                      if((VOLUME_CHANNEL[FUNCTION_Count] > Volume_Min) && ( VOLUME_CHANNEL[TOTAL_VOLUME] < (VOLUME_CHANNEL[FUN
             -CTION_Count] + 10)))                                           
 424   2                              VOLUME_CHANNEL[FUNCTION_Count]--;
C51 COMPILER V7.20   KEYPROC                                                               07/16/2005 13:42:40 PAGE 8   

 425   2              }
 426   1                      
 427   1              Difference_Value();
 428   1              Volume_Tune((FUNCTION_Count - 1)/2 + 1);        
 429   1          VFD_Display(String_Display, 5, 0, 0);                                                       
 430   1              TO_MAIN_DISPLAY = 120;  
 431   1      }
 432          
 433          void  Difference_Value(void)
 434          {
 435   1              String_Display[0] = Function_Display[(FUNCTION_Count - 1)* 2];
 436   1              String_Display[1] = Function_Display[(FUNCTION_Count - 1)* 2 + 1];
 437   1               
 438   1              if(VOLUME_CHANNEL[FUNCTION_Count] < VOLUME_CHANNEL[TOTAL_VOLUME])
 439   1              {
 440   2                      VOL_Difference = VOLUME_CHANNEL[TOTAL_VOLUME] - VOLUME_CHANNEL[FUNCTION_Count];
 441   2                      String_Display[2] = '-';                                                                        
 442   2              }
 443   1              else
 444   1              {
 445   2                      VOL_Difference = VOLUME_CHANNEL[FUNCTION_Count] - VOLUME_CHANNEL[TOTAL_VOLUME];
 446   2                      String_Display[2] = '+';                                
 447   2              }       
 448   1              
 449   1              if(VOL_Difference == 10)
 450   1              {
 451   2                      String_Display[3] = '1';
 452   2                      String_Display[4] = '0';
 453   2              }
 454   1              else
 455   1              {
 456   2                      String_Display[3] = '0';
 457   2                      String_Display[4] = '0' + VOL_Difference;
 458   2              }
 459   1      }
C51 COMPILER V7.20   KEYPROC                                                               07/16/2005 13:42:40 PAGE 9   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION Source_Set (BEGIN)
                                           ; SOURCE LINE # 51
                                           ; SOURCE LINE # 52
                                           ; SOURCE LINE # 53
0000 E4                CLR     A
0001 FF                MOV     R7,A
0002 FE                MOV     R6,A
0003 120000      E     LCALL   _VFD_ICON_Display
                                           ; SOURCE LINE # 54
0006 E500        E     MOV     A,Current_State
0008 24FE              ADD     A,#0FEH
000A 6025              JZ      ?C0003

⌨️ 快捷键说明

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