历史上的今天
返回首页

历史上的今天

今天是:2025年01月07日(星期二)

正在发生

2018年01月07日 | 遥控6声道AV机PT6311的汇编程序

2018-01-07 来源:eefocus

;;;;;;;;;;;;;;;;;;;6CH AMPLIFIER;;;;;;;;;;;;;;;; 
;----脚位定义----- 
;;;;;;;;;;;;;;;;;;;6CH AMPLIFIER;;;;;;;;;;;;;;;; 
;----脚位定义----- 

PT6311_CLK      EQU   P3.4 

PT6311_STB      EQU   P3.5 
PT6311_DATA     EQU   P3.3 

UP              EQU   P3.1 
DOEN            EQU   P3.0 

PT2313_DATA     EQU   P0.7 
PT2313_CLK      EQU   P2.7 

AC3             EQU   P2.6        ;(控制4053的信号) 

M62429_DA       EQU   P2.3        ;(SURL/R) 
M62429_CK       EQU   P2.4 

M62429_CK1      EQU   P2.5        ;(C/BW) 

M62429_CK3      EQU   P0.0        ;(ECHO,MVOL) 
M62429_DA3      EQU   P1.7 
M_DELAY1        EQU   P0.1 
M_DELAY2        EQU   P0.2 

AD_OUT          BIT   P0.5 
AD_IN           BIT   P0.6 

;----片内RAM定义-------- 

    
GIF_SIGN        EQU   40H         ; 动画进程标记(=1,走过场字幕  ) 
GIF_TIME1       EQU   41H         ; 动画跑字的时间间隔速度 
GIF_LONG        EQU   42H         ; 动画字幕的长度 

DISP_BUFFER     EQU   43H         ; 显示缓冲区地址指针 
DISP_INDEX      EQU   44H         ; PT6311片内地址指针  

  
INPUT_DATA      EQU   60H         ;(CD/VCD=1,TUNER=2,AC3=3) 
BASS_DATA       EQU   45H 
TR_DATA         EQU   46H 
MAIN_DATA       EQU   47H 
BAL_DATA        EQU   48H 
MVOL_DATA       EQU   49H 
ECHO_DATA       EQU   4AH 
SURL_DATA       EQU   4BH 
SURR_DATA       EQU   4CH 
CEN_DATA        EQU   4EH 
BW_DATA         EQU   4FH 
DELAY_DATA      EQU   50H 

DSP_DATA        EQU   51H 
CH_DATA         EQU   52H        ;CH_DATA=#0,5.1CH      CH_DATA=#1,3.1CH   CH_DATA=#2,2.1CH   CH_DATA=#3,2.0CH 
  
KEY_NUM         EQU   53H        ;按键编号,INPUT=2,MAIN=3,OK=4,V-=5,V+=1 
KEYNUM_SAVE     EQU   54H        ;按键过去式记录 
SYS_SIGN        EQU   55H        ;真值表 
KEY_DELAY       EQU   56H        ;每执行一次按键处理所间隔的时间 
DIV_16          EQU   57H 

DP_NUM          EQU   58H         ;自动电平当前进度的格数 
DP_MODE         EQU   59H         ;电平显示模式,分单针显示,双针显示等多种多样        

REM_SIGN        EQU   5AH        ;        
REM_FIX         EQU   5BH        ; 
REM_KEY         EQU   5DH        ; 
REM_KEY1        EQU   5EH        ; 
REM_TIME        EQU   5FH        ; 

AD_SIGN         EQU   61H        ;AD进程标记  (=0则把电容放电,=1则进行数据检测,=2则表示检测完成,存入数据到AD_DATA) 
AD_CLR          EQU   62H        ;AD放电时间记忆单元 
AD_CYC          EQU   6AH        ;AD判断周期记忆单元 
AD_TEM          EQU   63H        ;AD数据临时保存单元 
AD_DATA1        EQU   64H        ;AD转换最终存放数据 
AD_TIME         EQU   65H        ;AD模拟运算速度调节 

AD_SIM1         EQU   66H        ;AD模拟运算结果保存单元1 
AD_SIM2         EQU   67H        ;AD模拟运算结果保存单元2 
AD_SIM3         EQU   68H        ;AD模拟运算结果保存单元3 
AD_SIM4         EQU   69H        ;AD模拟运算结果保存单元4 

AD_TIME2        EQU   21H        ;AD自动电平上升时间 

AD_DATA2        EQU   6BH        ;AD转换最终存放数据2 
AD_DATA3        EQU   6CH        ;AD转换最终存放数据3 
AD_DATA4        EQU   6DH        ;AD转换最终存放数据4 

AUTO_NUM        EQU   6EH        ;AD_DATA1连续为0的数量统计标记     
AUTO_TIME       EQU   6FH  
DP_SAVE         EQU   70H        ;显示模式记忆单元 

TIME1           EQU   71H        ;主循环执行时间 
TIME2           EQU   72H        ;显示缓冲区数据处理间隔时间 

DISP_H          EQU   73H       
DISP_L          EQU   74H 

MTD5            EQU   75H 
MTD4            EQU   76H 
MTD3            EQU   77H 
MTD2            EQU   78H 
MTD1            EQU   79H  

KEY_CELL        EQU   7AH       ;(7FH-7AH为6个键值保存单元) 

POWER           EQU   20H.4     ;开关机标记,POWER=0,开机  POWER=1,关机 
BOOT_STR        EQU   20H.5     ;开机初始化标记,首次开机时候置0,读完预置后置1 
MUTE_DATA       EQU   20H.0     ;MUTE=1,开 MUTE=0,关 
LOUND_DATA      EQU   20H.1     ;LOUND_DATA=1,开等响,LOUND=0,关等响 
STA_DATA        EQU   20H.2     ;STA_DATA=0,表示第一次开机  STA_DATA=1,表示开机初始化结束 
AUTO_SIGN       EQU   20H.3     ;AUTO=0,频谱自走  AUTO=1,显示AD转换结果 



;;;;;;;资源占用情况;;;;;;;; 

;R7:           DISP子程序占用,可通用 
;R4,R5         复位占用,独立 
;R0,R1,R2      I2C协议占用,可通用 
;R3            NC 
;R6            通用  

;------------------- 
ORG    00H 
JMP    MAIN 
ORG    0003H                        ;EX0中断程序入口,遥控占用 
JMP    INT   
ORG    000BH                        ;T0溢出中断入口,遥控接收码时间脉宽测量 
JMP    TIME                 
ORG    001BH                        ;T1中断入口                 
JMP    AD_GO    
                                    ;显示中断入口 

MAIN:     SETB   P2.0 
          JNB    P2.0,$ 
          MOV    R0,#95              ;把所有单元数据清0 
          MOV    R1,#20H 
FRIST1:   MOV    @R1,#0                  
          INC    R1 
          DJNZ   R0,FRIST1 
           
          MOV    P3,#0FFH    
           
          CALL   DESTINE            ;调用预设,并把显示缓冲区清0,把动画进程置1           

          MOV   TL1,#06H            ;T1中断时间:250ns 
          MOV   TH1,#06H 
                    
          MOV   SP,#10H             ;10H-24H共20个单元作为堆栈 
          MOV   IE,#138             ;开中断总开关、允许EX0、T0,T1中断 
           
          MOV   TMOD,#33            ;设T0为16位定时器,软启动,T1为自动重装8位计数器   
          MOV   IP,#195             ;设定T0,EX0为高级中断,T1为低级中断(设定后遥控不受T1工作干扰)           

          CALL   START_VFD          ;设置PT6311显示段数            (13位15段) 
          CALL   BRIGHT             ;设置PT6311亮度子程序14/16 
          SETB  IT0                 ;外部中断0为边沿触发方式 

          SETB  TR1                 ;T1是显示中断入口 
           
;------------------------------主循环------------------------------------------- 
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
RUN_STA : JNB    P2.0,$ 
          MOV    A,TIME1 
          CJNE   A, #1,RUN2 
          JMP    GIF_1           ; 
 DISP_B:  INC    TIME1 
          JMP    RUN_END 

;xxxxxxxxxxxxxxXXXXXXXXXXXXXXXXXXXXX 
RUN2:     MOV    A,TIME1 
          CJNE   A,#3,RUN3         
          JB     STA_DATA,RUN2_01 ; 
          MOV    A,GIF_SIGN 
          CJNE   A,#1,RUN2_3      ; 
          JMP    RUN2_4            
RUN2_3:   CALL   STA              ;调用开机自走子程序 
RUN2_4:   JMP    RUN2_1 
           

RUN2_01: JMP    KEY_GO           ; 
RUN2_02: JMP    KEY_REST         ; 
RUN2_1:   INC    TIME1 
          JMP    RUN_END 

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
RUN3:     MOV    A,TIME1 
          CJNE   A,#5,RUN4 
          JMP    AUTO             ;调用无信号自动频谱设定子程序(改变AUTO_SIGN值) 
RUN3_1:   JMP    AD_INTO          ;调用AD模拟值运算  
RUN3_2:   INC    TIME1 
          JMP    RUN_END      
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
RUN4:     MOV    A,TIME1 
          CJNE   A,#7,RUN5 
          CLR    TR1 
          JMP    WR_VFD           ;写入PT6311数据           
RUN4_1:   SETB   TR1 
          INC    TIME1 
          JMP    RUN_END 
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
RUN5:     MOV    A,TIME1 
          CJNE   A,#21,RUN_END 
          JMP    RD_KEY           ;读如按键值并把他分析结果存放到KEY_NUM中 
RUN5_1:   MOV    TIME1,#0   
;xxxxxxxxxxxxxx 
RUN_END:  JMP    RUN_STA 

;;;;;;;;;;;;;;;;;;;开机自走程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
STA:      INC    DELAY_DATA      ;借用DELAY_DATA 
          MOV    A,DELAY_DATA 
          CJNE   A,#45,SAT_RET 
          MOV    DELAY_DATA,#0 
          CALL   RM1             ;每调用一次音量+1 
          CALL   DATA_IN         ;初始化结束,调用一次芯片输入程序 
          MOV    A,MAIN_DATA 
          CJNE   A,#20,SAT_RET 
          MOV    SYS_SIGN,#17    ;自跑字幕结束后显示INPUT选项 
          SETB   EX0             ;音量提升完后才开启EX0遥控接口 
          SETB   STA_DATA        ;开始程序结束,STA_DATA置1 
          SETB   AUTO_SIGN                   
SAT_RET:  RET 
;;;;;;;;;;;;;;;;;;无信号自动频谱设定子程序;;;;;;;;;;;;;;;;;;;;;;;;;; 

AUTO:     JNB    STA_DATA,AUTO_RET     ;开机状态下无需改变AUTO_SIGN值,直接退出 
          MOV    A,AD_DATA1 
          JZ     AUTO1                 ;检测到没信号转无信号处理                      
          SETB   AUTO_SIGN             ;只要一检测到AD_CYCA有信号,马上把AUTO_SIGN=1,使自走程序停止   
          MOV    AUTO_NUM,#0           ;AD转换值连续=0的计数器 
          MOV    DP_MODE,DP_SAVE       ;恢复自走前设定的频谱模式 
          MOV    AD_TIME2,#0 
          MOV    AUTO_NUM,#0   
          JMP    AUTO_RET              ;检测到有信号则跳过自动频谱处理 
;--------------------------------- 
AUTO1:    JNB    AUTO_SIGN,AUTO2       ;产生自跑信号自跑程序(令AUTO_SIGN=0) 
          INC    AD_TIME2 
          MOV    A,AD_TIME2 
          CJNE   A,#20,AUTO_RET 
          MOV    AD_TIME2,#0 

          INC    AUTO_NUM              ;AUTO_NUM产生自动电平的时间值 
          MOV    A,AUTO_NUM 
          CJNE   A,#100,AUTO_RET 
          MOV    AUTO_NUM,#0 

          CLR    AUTO_SIGN             ;检测到200次AD_DATA为0,即100次无信号,SIGN置0 
          MOV    DP_MODE,#0 
          MOV    DP_NUM,#0 
          JMP    AUTO_RET 
;-----------------------------------  ;自动频谱处理 

AUTO2 :   INC    AD_TIME2              ;AD自动电平上升进程 
          MOV    A,AD_TIME2  
          CJNE   A,#80,AUTO_RET 
          MOV    AD_TIME2,#0 
          INC    DP_NUM 
          MOV    A,DP_NUM 
          CJNE   A,#13,AUTO_RET       ;自动电平上升极限是不是14格(0也算1格) 
          MOV    DP_NUM,#0 
          
BB0:      MOV    A,DP_MODE            ;每隔14个步长自动转换一次频谱 
          CJNE   A,#0,BB1 
          MOV    DP_MODE,#1 
          JMP    AUTO_RET 

BB1:      CJNE   A,#1,BB2 
          MOV    DP_MODE,#2   
          JMP    AUTO_RET 

BB2:      CJNE   A,#2,BB3 
          MOV    DP_MODE,#3  
          JMP    AUTO_RET   

BB3:      MOV    DP_MODE,#0 
AUTO_RET: JMP    RUN3_1 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AD模拟值运算;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

AD_INTO:  INC    AD_TIME 
          MOV    A,AD_TIME 
          CJNE   A,#10,IN02             ;------------------------------------------模拟比较1 
           
          MOV    A,AD_SIM1              
          CJNE   A,AD_DATA1,INTO_01 
          JMP    IN02                   ;如果前后电平没变化,则AD_SIM1保持不变 
INTO_01:  SUBB   A,AD_DATA1 
          JNC    AD_SUB                ;AD_SIM1大于当前AD_DATA值,转AD_SUB减处理 

AD_UP:    MOV   A,AD_SIM1              ;AD_SIM1小于当前AD_DATA值,转AD_CYC减处理  
          INC   A 
          MOV   AD_SIM1,A 
          JMP   IN02 

AD_SUB:   MOV   A,AD_SIM1 
          DEC   A 
          MOV   AD_SIM1,A 
          JMP   INTO_RET 


IN02:     MOV    A,AD_TIME              ;------------------------------------------模拟比较2 
          CJNE   A,#20,IN03 
          MOV    A,AD_SIM2              
          CJNE   A,AD_DATA1,INTO_02 
          JMP    IN03                  ;如果前后电平没变化,则AD_SIM2保持不变 
INTO_02:  SUBB   A,AD_DATA1 
          JNC    AD_SUB2               ;AD_SIM2大于当前AD_DATA2值,转AD_SUB减处理 

AD_UP2:   MOV   A,AD_SIM2              ;AD_SIM2小于当前AD_DATA2值,转AD_CYC减处理  
          INC   A 
          MOV   AD_SIM2,A 
          JMP   IN03 

AD_SUB2:  MOV   A,AD_SIM2 
          DEC   A 
          MOV   AD_SIM2,A 
          JMP   INTO_RET 

IN03:     MOV    A,AD_TIME             ;;------------------------------------------模拟比较3 
          CJNE   A,#30,IN04 
          MOV    A,AD_SIM3              
          CJNE   A,AD_DATA1,INTO_03 
          JMP    IN04                   ;如果前后电平没变化,则AD_SIM2保持不变 
INTO_03:  SUBB   A,AD_DATA1 
          JNC    AD_SUB3               ;AD_SIM2大于当前AD_DATA2值,转AD_SUB减处理 

AD_UP3:   MOV   A,AD_SIM3              ;AD_SIM2小于当前AD_DATA2值,转AD_CYC减处理  
          INC   A 
          MOV   AD_SIM3,A 
          JMP   IN04 

AD_SUB3:  MOV   A,AD_SIM3 
          DEC   A 
          MOV   AD_SIM3,A 
          JMP   INTO_RET 


IN04:     MOV    A,AD_TIME            ;------------------------------------------模拟比较4 
          CJNE   A,#40,INTO_RET 
          MOV    AD_TIME,#0 

          MOV    A,AD_SIM4              
          CJNE   A,AD_DATA1,INTO_04 
          JMP    INTO_RET              ;如果前后电平没变化,则AD_SIM2保持不变 
INTO_04:  SUBB   A,AD_DATA1 
          JNC    AD_SUB4               ;AD_SIM2大于当前AD_DATA2值,转AD_SUB减处理 

AD_UP4:   MOV   A,AD_SIM4              ;AD_SIM2小于当前AD_DATA2值,转AD_CYC减处理  
          INC   A 
          MOV   AD_SIM4,A 
          JMP   INTO_RET 

AD_SUB4:  MOV   A,AD_SIM4 
          DEC   A 
          MOV   AD_SIM4,A 
                                              
INTO_RET: JMP   RUN3_2 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示数据的处理;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 

GIF_1:   JNB    POWER,GIF_V1  
         JMP    GIF_V2 
GIF_V1:  CALL   CLR_ALL           ;查看是否有关机标记,有则把显示缓冲区清0   
         JMP    RET1 

GIF_V2:  MOV    3AH,#0CH          ;G13的数据数据输入(点亮装析图标) 
         MOV    3BH,#111111B 
         JNB    STA_DATA,GIF_V9   ;开机初始化时候不显示频谱 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;频谱输入;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

         MOV    R0,#22H           ;显示频谱时先把旧显示数据清空         
         MOV    R1,#8 
GIF_V3:  MOV    @R0,#0 
         INC    R0 
         DJNZ   R1,GIF_V3   

V3_0:    MOV   A,DP_MODE              ; 频谱模式的转换 
         CJNE  A,#0,V3_1 
         MOV   DPTR,#TAB26 
          
V3_1:    CJNE  A,#1,V3_2 
         MOV   DPTR,#TAB27 

V3_2:    CJNE  A,#2,V3_3 
         MOV   DPTR,#TAB28 

V3_3:    CJNE  A,#3,V3_4 
         MOV   DPTR,#TAB29 

V3_4:    CJNE  A,#4,V3_5 
         MOV   DPTR,#TAB30 

V3_5:    CJNE  A,#5,V3_8 
         MOV   DPTR,#TAB31 
          
V3_8:    JB    AUTO_SIGN, V3_12         ;是信号频谱则转相关处理 
       
         MOV   R0,#29H                  ;是自动频谱转相关处理 
         MOV   R1,#4 
V3_11:   MOV   A,DP_NUM           
         RL    A    
         MOVC  A,@A+DPTR 
         MOV   @R0,A 
         DEC   R0 
      
         MOV   A,DP_NUM 
         RL    A    
         INC   A 
         MOVC  A,@A+DPTR 
         MOV   @R0,A 
         DEC   R0 
         DJNZ  R1,V3_11 
         JMP   GIF_1D 

         
V3_12:   MOV    R0,#29H   ;-------------;G1-G4数据输入(显示频谱) 
         MOV    R1,#AD_SIM1 
         MOV    R2,#4     ;-----------一个循环输入2个字节,4次刚好把8个缓冲区数据处理完毕 
GIF_V4:  MOV    A,@R1 
         RL     A 
         MOVC   A, @A+DPTR 
         MOV    @R0,A 
         DEC    R0 
         
         MOV    A,@R1   
         RL     A 
         INC    A 
         MOVC   A,@A+DPTR  
         MOV    @R0,A 
         DEC    R0 
         INC    R1 
         DJNZ   R2,GIF_V4 
          
GIF_1D:  MOV   A,  23H            ;加上装饰条 
         ADD   A,  #40H 
         MOV   23H,A 
         MOV   A,  29H            ;加上装饰条 
         ADD   A,  #40H 
         MOV   29H,A                 
         JMP   GIF_1C 
;------------------------------------------------------------- 

GIF_V9:  MOV   22H,#0             ;开机音量自跑过程中不显示频谱,把G1-G4数据清空(!!!!!!!!!) 
         MOV   23H,#60H           ;留下装惜条和显示最低位频谱(20H+40H) 
         MOV   24H,#0 
         MOV   25H,#20H           ;显示最低位频谱 
         MOV   26H,#0 
         MOV   27H,#20H           ;显示最低位频谱 
         MOV   28H,#0 
         MOV   29H,#60H           ;留下装惜条和显示最低位频谱(20H+40H) 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 跑过场字幕;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

GIF_1C:  MOV    A,GIF_SIGN          
         CJNE   A,#1,GIF_2 
         INC    GIF_TIME1 
         MOV    A,GIF_TIME1 
         CJNE   A,#70,GIF_A1      ;跑字速度 
         MOV    GIF_TIME1,#0 
         MOV    DPTR,#TAB2 
         CALL   GIF_LEFT           ;调用左移一位子程序 
                            
         INC    GIF_LONG           ;动画字幕长度  
         MOV    A,GIF_LONG 
         CJNE   A,#23,C5_1         ;跑23步后结束 
         MOV    GIF_LONG,#0         
         MOV    GIF_SIGN,#2        ;开机序幕结束,SIGN=2 
          
GIF_A1:  JMP    RET1         
;;----------------------------------------------------------------------------------------------- 
;;-----------------------------------------------------------------------------------------------   
GIF_2:   MOV   A,GIF_SIGN   ;;;;;;;;;--------------------------显示带功能的数值,如VOL,BASS,ECHO等 
         CJNE  A,#2,GIF_X1 

         MOV    R0,#2CH          ;G6-G12字母区数据前先把该处理区的数据清空免得重叠         
         MOV    R1,#14 
GIF_2X:  MOV    @R0,#0 
         INC    R0 
         DJNZ   R1,GIF_2X 
         
GIF_2A:  INC    GIF_TIME1         ;GIF_SIGN=2的持续时间         
         MOV    A,GIF_TIME1 
         CJNE   A,#150, GIF_0B 
         MOV    GIF_TIME1,#0 
         INC    GIF_LONG 
         MOV    A,GIF_LONG 
         CJNE   A,#30,GIF_0B 
         MOV    GIF_LONG,#0 
         MOV    GIF_SIGN,#3 
         JMP    RET1  
         
GIF_0B:  MOV   R7,SYS_SIGN        ;处理G9-G13的显示缓冲区数据 
         CJNE  R7,#0,GIF_C 
          
         MOV   DPTR,#TAB4         ;----------主音量显示                                (NO1) 
         CALL  GIF_DIG4           ;----------调用高4位显示(G12-G9的显示) 
         MOV   DPTR,#TAB3 
         MOV   A, MAIN_DATA       ;----------主音量分解 
         CALL  GIF_DG3A           ;----------调用低3位显示数据(G8-G6的显示) 
         JMP   RET1 
GIF_X1:  LJMP   GIF_3                  
GIF_C:   ;-----------------------------输入INPUT显示                                    (NO2)  
         CJNE R7,#17,GIF_D        
         MOV  R6,INPUT_DATA 
         CJNE R6,#1,GIF_C2 
         MOV  DPTR,#TAB18       ;显示CD/VCD 
         CLR  AC3               ;4053的控制信号 
         JMP  GIF_C5         
GIF_C2:  CJNE R6,#2,GIF_C3         
         MOV  DPTR,#TAB19       ;显示TUNER 
         CLR  AC3 
         JMP  GIF_C5 
          
GIF_C3:  MOV  DPTR,#TAB20       ;显示AC-3 
         SETB  AC3 

GIF_C5:  CALL GIF_DIG7           ;-----------调用7位显示数据(G6-G12) 
  C5_1:  JMP  RET1 

GIF_D:   CJNE R7,#1,GIF_E;-----------输入BASS显示                                       (NO3) 
         MOV  DPTR,#TAB5 
         CALL GIF_DIG4  
         MOV  DPTR,#TAB21 
         MOV  A,BASS_DATA 
         CALL GIF_DG3B         
         JMP   RET1           

GIF_E:   CJNE R7,#2,GIF_F;-----------输入TREBLE显示                                      (NO4) 
         MOV  DPTR,#TAB6 
         CALL GIF_DIG4  
         MOV  DPTR,#TAB21 
         MOV  A,TR_DATA 
         CALL GIF_DG3B          
         JMP   RET1  
          
GIF_F:   CJNE R7,#3,GIF_G 
         MOV   DPTR,#TAB13        ;----------MVOL显示                                     (NO5) 
         CALL  GIF_DIG4           ;----------调用高4位显示(G12-G9的显示) 
         MOV   DPTR,#TAB3 
         MOV   A, MVOL_DATA       ;----------MVOL音量分解 
         CALL  GIF_DG3A           ;----------调用低3位显示数据(G8-G6的显示) 
         JMP   RET1  
        
GIF_G:   CJNE R7,#4,GIF_H 
         MOV   DPTR,#TAB12        ;----------MECHO显示                                     (NO6) 
         CALL  GIF_DIG4           ;----------调用高4位显示(G12-G9的显示) 
         MOV   DPTR,#TAB3 
         MOV   A, ECHO_DATA       ;----------ECHO分解 
         CALL  GIF_DG3A           ;----------调用低3位显示数据(G8-G6的显示)    
         JMP   RET1      

GIF_H:   CJNE R7,#5,GIF_I 
         MOV   DPTR,#TAB14        ;----------DELAY显示                                      (NO7) 
         CALL  GIF_DIG4           ;----------调用高4位显示(G12-G9的显示) 
         MOV   DPTR,#TAB3 
         MOV   A, DELAY_DATA      ;----------DELAY分解 
         CALL  GIF_DG3A           ;----------调用低3位显示数据(G8-G6的显示) 
         JMP   RET1  
         
GIF_I:   CJNE R7,#6,GIF_J 
         MOV   DPTR,#TAB8        ;----------SL显示                                           (NO8) 
         CALL  GIF_DIG4           ;---------调用高4位显示(G12-G9的显示) 
         MOV   DPTR,#TAB3 
         MOV   A, SURL_DATA      ;----------SL音量分解 
         CALL  GIF_DG3A          ;----------调用低3位显示数据(G8-G6的显示) 
         JMP   RET1     

GIF_J:   CJNE  R7,#7,GIF_K 
         MOV   DPTR,#TAB9        ;----------SR显示                                           (NO9) 
         CALL  GIF_DIG4          ;---------调用高4位显示(G12-G9的显示) 
         MOV   DPTR,#TAB3 
         MOV   A, SURR_DATA      ;----------SUR音量分解 
         CALL  GIF_DG3A          ;----------调用低3位显示数据(G8-G6的显示) 
         JMP   RET1  
      
GIF_K:   CJNE R7,#8,GIF_L 
         MOV   DPTR,#TAB11        ;---------CEN显示                                          (NO10) 
         CALL  GIF_DIG4           ;---------调用高4位显示(G12-G9的显示) 
         MOV   DPTR,#TAB3 
         MOV   A, CEN_DATA       ;----------CEN音量分解 
         CALL  GIF_DG3A          ;----------调用低3位显示数据(G8-G6的显示) 
         JMP   RET1  
     
GIF_L:   CJNE  R7,#9,GIF_M 
         MOV   DPTR,#TAB10        ;----------BW显示                                          (NO11) 
         CALL  GIF_DIG4           ;---------调用高4位显示(G12-G9的显示) 
         MOV   DPTR,#TAB3 
         MOV   A, BW_DATA        ;----------BW音量分解 
         CALL  GIF_DG3A          ;----------调用低3位显示数据(G8-G6的显示) 
         JMP   RET1  
       
GIF_M:   CJNE  R7,#11,GIF_N 
         MOV   DPTR,#TAB15        ;----------DISP显示                                         (NO12) 
         CALL  GIF_DIG4           ;---------调用高4位显示(G12-G9的显示) 
         MOV   DPTR,#TAB3 
         MOV   A, DSP_DATA        ;----------DSP分解 
         CALL  GIF_DG3A           ;----------调用低3位显示数据(G8-G6的显示)    
         JMP   RET1    

GIF_N:   CJNE  R7,#15,GIF_O       ;                                                            (NO13) 
         MOV   DPTR,#TAB22 
         JNB   MUTE_DATA,GIF_N1   ;不是静音状态不显示静音, 显示主音量值 
         CALL  GIF_DIG7 
         JMP   RET1 
GIF_N1:  MOV   SYS_SIGN,#0         
         JMP   RET1 

GIF_O:   CJNE  R7,#13,GIF_P       ;显示5.1ch                                                  (NO12) 
         MOV   DPTR,#TAB16 
         CALL  GIF_DIG7 
         JMP   RET1     

GIF_P:   CJNE  R7,#12,GIF_Q       ;显示2.1CH                                                  (NO13) 
         MOV   DPTR,#TAB17 
         CALL  GIF_DIG7 
         JMP   RET1  

GIF_Q:   CJNE  R7,#14,GIF_R ;                                                                  (NO14) 
         JB    LOUND_DATA,GIF_Q1   
         MOV   DPTR,#TAB24 
         JMP   GIF_Q2 
GIF_Q1:  MOV   DPTR,#TAB23 
GIF_Q2:  CALL  GIF_DIG7 
         JMP   RET1   

GIF_R:   CJNE  R7,#20,GIF_S 
         MOV   DPTR,#TAB40 
         CALL  GIF_DIG7 

GIF_S:   NOP 

RET5:    JMP   RET1 

;;-------------------------------------------------------------------------- 
;;-------------------------------------------------------------------------- 

GIF_3:   CALL  CLR_ALL 
         MOV    GIF_SIGN,#1 
         JMP    RET1 
RET1:    JMP    DISP_B 

;++++++++++++++++++++++++显示缓冲区清空子程序++++++++++++++++++++++++++++ 

CLR_ALL: MOV   R2,#26              ;把显示缓冲区共28个单元数值清0 
         MOV   R1,#22H 
DES2:    MOV   @R1,#0 
         INC   R1 
         DJNZ  R2,DES2 
         RET 

;+++++++++++++++++++++++++G12-G67位字母左移子程序;++++++++++++++++++++++ 

GIF_LEFT:MOV    39H,37H;-------------------;G11转G12       ;左移一位子程序 
         MOV    38H,36H;         
         MOV    37H,35H;-------------------;G10转G11 
         MOV    36H,34H 
         MOV    35H,33H;-------------------;G9转G10 
         MOV    34H,32H   
         MOV    33H,31H;-------------------;G8转G9 
         MOV    32H,30H 
         MOV    31H,2FH;-------------------;G7转G8 
         MOV    30H,2EH  
         MOV    2FH,2DH;-------------------;G6转G7 
         MOV    2EH,2CH 
          
         MOV    A,GIF_LONG   ;;更新最低位数值 
         RL     A 
         MOVC   A,@A+DPTR 
         MOV    2CH,A 

         MOV    A,GIF_LONG 
         RL     A 
         INC    A 
         MOVC   A,@A+DPTR 
         MOV    2DH,A 
         RET 

;+++++++++++++++++++++++++G12-G9高4位字母存入子程序;++++++++++++++++++++++ 
GIF_DIG4:MOV   R1,#8 
         MOV   R2,#0 
         MOV   R0,#39H 

DIG4_1:  MOV   A,R2 
         MOVC  A,@A+DPTR 
         MOV   @R0,A 
         DEC   R0 
         INC   R2 
         DJNZ  R1,DIG4_1 
         RET 
;++++++++++++++++++++++++G6-G8低3位数值输入程序A;++++++++++++++++++++++++++++++++ 
GIF_DG3A:MOV   DIV_16,A 
         CALL  DIV10 
         MOV   A,DISP_H           ;输入个位显示数值到显示缓冲区(G8) 
         RL    A 
         MOVC  A,@A+DPTR 
         MOV   2FH,A  
         MOV   A,DISP_H 
         RL    A 
         INC   A 
         MOVC  A,@A+DPTR 
         MOV   2EH,A 

         MOV   A,DISP_L           ;输入个位显示数值到显示缓冲区(G8) 
         RL    A 
         MOVC  A,@A+DPTR 
         MOV   2DH,A  
         MOV   A,DISP_L 
         RL    A 
         INC   A 
         MOVC  A,@A+DPTR 
         MOV   2CH,A 
         RET 

;++++++++++++++++++++++++G6-G8低3位数值输入程序A;++++++++++++++++++++++++++++++++ 
GIF_DG3B: 
         MOV  B,#6 
         MUL  AB 
         MOV  R1,A 
         MOV  R0,#31H 
         MOV  R2,#6 
                     
 DG3B_1: MOV  A,R1 
         MOVC A,@A+DPTR 
         MOV  @R0,A 
         DEC  R0 
         INC  DPTR              
         DJNZ R2,DG3B_1 
         RET 
  
;+++++++++++++++++++++++++G12-G9 7位字母存入子程序;++++++++++++++++++++++ 
GIF_DIG7:MOV   R1,#14        ;处理14个显示缓冲区,即G6-G12的显示区间 
         MOV   R2,#0         ;DPTR指针 
         MOV   R0,#39H 

DIG7_1:  MOV   A,R2 
         MOVC  A,@A+DPTR 
         MOV   @R0,A 
         DEC   R0 
         INC   R2 
         DJNZ  R1,DIG7_1 
         RET 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;T1中断部分;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;T1中断部分;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AD模拟值运算;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;T1中断部分;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
AD_GO  :  INC   TIME1 
          PUSH  ACC 
          PUSH  PSW 
 AD:      MOV   R3,AD_SIGN 
          CJNE  R3,#0,AD_1           

          SETB  AD_OUT 
          INC   AD_CLR 
          MOV   R3,AD_CLR                
          MOV   AD_TEM,#0  
          CJNE  R3,#50,AD_RET           ;;放电250ms  (调节该参数的另一功能是可以使显示刷新时间改变) 
          MOV   AD_CLR,#0 
          MOV   AD_CYC,#0         
          MOV   AD_SIGN,#1               ;放电完毕,AD_SIGN置1 
          JMP   AD_RET 

AD_1:     MOV   R3,AD_SIGN 
          CJNE  R3,#1,AD_RET 
          CLR   AD_OUT 
          INC   AD_CYC                  ;AD检测周期+1      
          JNB   AD_IN,AD_1_1            ;检测到为低电平,AD数据不+1 
          INC   AD_TEM                  ;检测到为高电平,AD数据不+1 

AD_1_1:   MOV   R3,AD_CYC 
          CJNE  R3,#13,AD_RET           ;检测周期为13次 
          MOV   AD_CYC,#0 
          MOV   AD_DATA1,AD_TEM           
          MOV   AD_SIGN,#0              ;AD数据检测结束,AD_SIGN置0 
           
AD_RET:   POP   PSW 
          POP   ACC 

RETI 
NOP 
NOP 


  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PT16311读写程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
WR_VFD   : 
          CLR   PT6311_STB         ;写入一组8位数据          
          MOV   A,#70H             ;设置为正常工作,地址增量,写显示数据模式 
          CALL  OUTDATA  
          SETB  PT6311_STB 
          NOP 
          NOP 
          CLR   PT6311_STB 
          MOV   A,DISP_INDEX        ;设置写入地址指针 
          MOV   DPTR,#TABLE1 
          MOVC  A,@A+DPTR 
          ADD   A,#0C0H             ;修正 
          CLR   C 
          CALL  OUTDATA             ;  
   
          MOV   R1,DISP_BUFFER      ;把显示缓冲区数据写入PT16311 
WR_VFD1:  MOV   A,@R1 
          CALL  OUTDATA 

          INC   DISP_BUFFER 
          INC   DISP_INDEX 
          MOV   A,DISP_INDEX 
          CJNE  A,#26,WR_QUT       ;;扫描完13列后PT6311片内地址指针复0(每列需要2个数据缓冲区数据) 
        
          MOV   DISP_BUFFER,#22H   ;显示缓冲区首址复位 
          MOV   DISP_INDEX,#0H     ;片内地址指针复位 
           
WR_QUT:   SETB  PT6311_STB 
          NOP 
          NOP 
          JMP    RUN4_1   

OUTDATA:  MOV   R0,#8                ;写入一个字节子程序 
          SETB  PT6311_DATA 
          NOP 
     W1:  CLR   PT6311_CLK 
          RRC   A 
          MOV   PT6311_DATA,C 
          SETB  PT6311_CLK           ;时钟上升沿写入数据 
          DJNZ  R0,W1 
          RET 


START_VFD: CLR   PT6311_STB      
           MOV   A,#0CH             ;13位15段    
           CALL  OUTDATA            ;输入一组数据 
           SETB  PT6311_STB 
           RET 

BRIGHT:   CLR  PT6311_STB           ;设置亮度子程序14/16 
          MOV  A,#0BDH       
          CALL OUTDATA 
          SETB PT6311_STB 
          RET 

INDATA:   MOV   R6,#8                  ;读入一个字节子程序(读键盘)         
          SETB  PT6311_DATA           ;令PT6311_DATA接口有效 
INDATA1:  SETB  PT6311_CLK            ;时钟的下降沿读出数据(??)    
          CLR   PT6311_CLK            ;读出一个位 
          MOV   C,PT6311_DATA         ;读出的数据暂存位积存器C 
          RRC   A                     ;位数据入ACC 
          DJNZ  R6,INDATA1     
          RET 
    
;;------------------------------------------------------------------  

RD_KEY:   MOV   R1,#KEY_CELL         ;读键值子程序 
          MOV   R2,#06H              ;要读入的键值单元数为6      
          CLR   PT6311_STB           ; 
          MOV   A,#76H               ;01110110    命令字:读键盘值 
          CALL  OUTDATA              ;写入控制字 
RD_1:     CALL  INDATA               ;读入键盘键值 
          MOV   @R1,A 
          INC   R1 
          DJNZ  R2,RD_1         
          SETB  PT6311_STB 
          NOP 
          CLR   PT6311_STB 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;按键键值判断程序(把键值整理后放KEY_NUM中);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
KEY_EX:   MOV  A,7AH              ;判断那一行闭合 
          JZ   KEY_2 
          MOV  R6,#00 
          JMP  TAKE 
KEY_2 :   MOV  A,7BH  
          JZ   KEY_3 
          MOV  R6,#08 
          JMP  TAKE 
KEY_3 :   MOV  A,7CH 
          JZ   KEY_4 
          MOV  R6,#16 
          JMP  TAKE 
KEY_4 :   MOV  A,7DH 
          JZ   KEY_5 
          MOV  R6,#024 
          JMP  TAKE 
KEY_5 :   MOV  A,7EH 
          JZ   KEY_6 
          MOV  R6,#32 
          JMP  TAKE 
KEY_6 :   MOV  A,7FH 
          JZ   RET2               ;无按键按下退出 
          MOV  R6,#40         
TAKE:     JNB   ACC.0,N2          ;判断那一列闭合 
          MOV   R7,#1 
          JMP   ADD_KEY 
N2:       JNB   ACC.1,N3 
          MOV   R7,#2 
          JMP   ADD_KEY 
N3:       JNB   ACC.2,N4 
          MOV   R7,#3 
          JMP   ADD_KEY 
N4:       JNB   ACC.3,N5 
          MOV   R7,#4 
          JMP   ADD_KEY 
N5:       JNB   ACC.4,N6 
          MOV   R7,#5 
          JMP   ADD_KEY 
N6:       JNB   ACC.5,N7 
          MOV   R7,#06 
          JMP   ADD_KEY 
N7:       JNB   ACC.6,N8 
          MOV   R7,#07 
          JMP   ADD_KEY 
N8:       JNB   ACC.7,RET2 
          MOV   R7,#08 
ADD_KEY:  MOV  A,R6 
          ADD  A,R7 
          MOV  KEY_NUM,A 
          JMP  RET3 
RET2:     MOV  KEY_NUM,#00H    ;无按键按下键值清0 
RET3:     JMP  RUN5_1 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;进制转换子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 

DIV10:     MOV    A,DIV_16           ;  十六进转十进制子程序 
           MOV    B,#100 
           DIV    AB 
           MOV    A,B 
           MOV    B,#10 
           DIV    AB 
           MOV    DISP_H,A           ;把十位数值存入高位显示缓冲区 
           MOV    DISP_L,B           ;把个位数值存入低位显示缓冲区 
           RET 
;------------------------------------按键处理子程序---------------------------------------- 
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 

KEY_GO:  MOV   A,KEY_NUM 
         JZ    DELAY_4                ;没按键按下退出 
         INC   KEY_DELAY 
         MOV   A,KEY_DELAY 
         CJNE  A,#130,OUT   
         MOV   A,KEY_NUM 
         CJNE  A,#9,DELAY_0          ;带功能复合键跳过单键处理(KEY_NUM=9,1,5是功能复合键) 
         JMP   DELAY_2    
DELAY_0: CJNE  A,#1,DELAY_1 
         JMP   DELAY_2 
DELAY_1: CJNE  A,#5,DELAY_3 

DELAY_2: MOV   A,KEYNUM_SAVE         ;=====================连发/单发的原理============================= 
         CJNE  A,KEY_NUM,DELAY_3     ;如果检测到连续两次都不是同一键按下的,执行该按键的功能的处理 
         JMP   OUT                   ;如果检测到连续两次都是同一键按下的,不执行该按键的功能处理 
DELAY_3: CALL  BIJIAO                ;调用按键处理程序(要隔2x8x23ms才调用一次按键比较程序,连发一次大约0.5S) 
         MOV   R4,#00                 
         MOV   R5,#00 
         MOV   KEY_DELAY,#00H 
         JMP   OUT 
DELAY_4: MOV   KEY_DELAY,#129  
OUT:     MOV   KEYNUM_SAVE,KEY_NUM  
         JMP   RUN2_02    
;---------------------------------按键处理--------------------------------------------- 
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 

BIJIAO:  MOV  R6,KEY_NUM 
         CJNE R6,#09,BA_1 
         MOV  SYS_SIGN,#17 
         CALL INPUT 
         JMP  RET4 
BA_1  :  CJNE R6,#1,BA_2 
         CALL MUISE 
         JMP  RET4 
BA_2  :  CJNE R6,#5,BA_3 
         CALL KARAOKE  
         JMP  RET4 
BA_3  :  CJNE R6,#6,BA_4 
         CALL FRIST                ;调用优先比较程序,当在输入状态或等响显示状态下时,按下UP键会把VOL值优先调用提升 
         CALL VOL_UP   
         JMP  RET4 

BA_4  :  CJNE R6,#10,RET9 
         CALL FRIST                ;调用优先比较程序,当在输入状态或等响显示状态下时,按下UP键会把VOL值优先调用提升 
         CALL VOL_DOWN        
RET4:    CALL   DATA_IN 
RET9:    RET 
;----------- 
;----------- 
INPUT:   MOV  R5,INPUT_DATA          ; (CD/VCD=1,TUNER=2,AC3=3) 

         CJNE R5,#1,IN1 
         MOV  INPUT_DATA,#2 
         RET 
IN1:     CJNE R5,#2,IN2 
         MOV  INPUT_DATA,#3 
         RET 
IN2:     MOV  INPUT_DATA,#1 
         RET   

;----------- 
;----------- 
MUISE:   MOV  R5,SYS_SIGN           ;主音量复合键切换 
         CJNE R5,#0,MUISE1 
         MOV  SYS_SIGN,#1           ;设置为低音 
         MOV  DSP_DATA,#0 
         RET 

MUISE1:  CJNE R5,#1,MUISE2 
         MOV  SYS_SIGN,#2            ;设置为高音 
         MOV  DSP_DATA,#0 
         RET 

MUISE2:  CJNE R5,#2,MUISE3 
         MOV  SYS_SIGN,#6 
         RET 

MUISE3:  CJNE R5,#6,MUISE4 
         MOV  SYS_SIGN,#7 
         RET 

MUISE4:  CJNE R5,#7,MUISE5 
         MOV  SYS_SIGN,#8 
         RET 

MUISE5:  CJNE R5,#8,MUISE6 
         MOV  SYS_SIGN,#9 
         RET 

MUISE6:  MOV  SYS_SIGN,#0 
         RET 

;----------- 
;----------- 
KARAOKE: MOV  R5,SYS_SIGN       ;卡拉OK真值切换 
         CJNE R5,#3,KARAOKE1 
         MOV  SYS_SIGN,#4 
         RET 

KARAOKE1:CJNE R5,#4,KARAOKE2 
         MOV  SYS_SIGN,#5 
         RET 

KARAOKE2:CJNE R5,#5,KARAOKE3 
         MOV  SYS_SIGN,#3 
         RET 

KARAOKE3:MOV  SYS_SIGN,#3 
         RET 

;----------- 
;----------- 
VOL_UP:  MOV  R5,SYS_SIGN 
VOL1:    CJNE R5,#0,VOL2               ;总音量调节,上限为64 
RM1:     MOV  A,MAIN_DATA              ;(遥控占用) 
         INC  A 
         CJNE A,#65,VOL_1A 
         JMP  VOL_1B 
VOL_1A:  MOV  MAIN_DATA,A 

VOL_1B:  MOV  A,SURL_DATA 
         INC  A 
         CJNE A,#65,VOL_1C 
         JMP  VOL_1D 
VOL_1C:  MOV  SURL_DATA,A 

VOL_1D:  MOV  A,SURR_DATA 
         INC  A 
         CJNE A,#65,VOL_1E 
         JMP  VOL_1F 
VOL_1E:  MOV  SURR_DATA,A 

VOL_1F:  MOV  A,CEN_DATA 
         INC  A 
         CJNE A,#65,VOL_1G 
         JMP  VOL_1H 
VOL_1G:  MOV  CEN_DATA,A 

VOL_1H:  MOV  A,BW_DATA 
         INC  A 
         CJNE A,#65,VOL_1I 
         JMP  VOL_1J 
VOL_1I:  MOV  BW_DATA,A 

VOL_1J:   RET 
         
VOL2:    CJNE R5,#1,VOL3               ;低音量调节,上限为14 
 RM3:    MOV  A,BASS_DATA 
         INC  A 
         CJNE A,#15,VOL_2A 
         RET 
VOL_2A:  MOV  BASS_DATA,A 
         RET 
VOL3:    CJNE R5,#2,VOL4               ;高音量调节,上限为14 
 RM4:    MOV  A,TR_DATA 
         INC  A 
         CJNE A,#15,VOL_3A 
         RET 
 VOL_3A: MOV  TR_DATA,A 
         RET 
VOL4:    CJNE R5,#3,VOL5               ;卡拉OK量调节,上限为16 
 RM5:    MOV  A,MVOL_DATA 
         INC  A 
         CJNE A,#17,VOL_4A 
         RET 
VOL_4A:  MOV  MVOL_DATA,A 
         RET 
VOL5:    CJNE R5,#4,VOL6               ;ECHO量调节,上限为16 
 RM6:    MOV  A,ECHO_DATA 
         INC  A 
         CJNE A,#17,VOL_5A 
         RET 
VOL_5A:  MOV  ECHO_DATA,A 
         RET 

VOL6:    CJNE  R5,#5,VOL7              ;DELAY调节 
         MOV  A,DELAY_DATA 
         CJNE A,#25,VOL6A 
         MOV  DELAY_DATA,#10 
         SETB M_DELAY1 
         SETB M_DELAY2 
         RET 
VOL6A:   CJNE A,#10,VOL6B 
         MOV  DELAY_DATA,#15 
         CLR  M_DELAY1 
         SETB M_DELAY2 
         RET 
VOL6B:   CJNE A,#15,VOL6C 
         MOV  DELAY_DATA,#20 
         SETB M_DELAY1 
         CLR  M_DELAY2 
         RET 
VOL6C:   MOV   DELAY_DATA,#25 
         CLR   M_DELAY1 
         CLR   M_DELAY2 

VOL7:    CJNE R5,#6,VOL8               ;SURL调节,上限为64 
 RM7:    MOV  A,SURL_DATA 
         INC  A 
         CJNE A,#65,VOL_7A 
         RET 
VOL_7A:  MOV  SURL_DATA,A 
         RET 
VOL8:    CJNE R5,#7,VOL9               ;SURR调节,上限为64 
 RM8:    MOV  A,SURR_DATA 
         INC  A 
         CJNE A,#65,VOL_8A 
         RET 
VOL_8A:  MOV  SURR_DATA,A 
         RET 
VOL9:    CJNE R5,#8,VOL10              ;CEN调节,上限为64 
 RM9:    MOV  A,CEN_DATA 
         INC  A 
         CJNE A,#65,VOL_9A 
         RET 
VOL_9A:  MOV  CEN_DATA,A 
         RET 
VOL10:   CJNE R5,#9,VOL_11              ;SW调节,上限为64 
 RM10:   MOV  A,BW_DATA 
         INC  A 
         CJNE A,#65,VOL_10A 
         RET 
VOL_10A: MOV  BW_DATA,A 
          
    
VOL_11:   RET 

;-------------------------------"VOL-"------------------------ 
VOL_DOWN:MOV  R5,SYS_SIGN 
V1:      CJNE R5,#0,VL2               ;总音量调节,下限为0 
RM2:     MOV  A,MAIN_DATA             ;(遥控占用) 
         DEC  A          
         CJNE A,#255,VL_1A 
         JMP  VL_1B 
VL_1A:   MOV  MAIN_DATA,A 
          
VL_1B:   MOV  A,SURL_DATA 
         DEC  A          
         CJNE A,#255,VL_1C 
         JMP  VL_1D 
VL_1C:   MOV  SURL_DATA,A 

VL_1D:   MOV  A,SURR_DATA 
         DEC  A 
         CJNE A,#255,VL_1E 
         JMP  VL_1F 
VL_1E:   MOV  SURR_DATA,A 

VL_1F:   MOV  A,CEN_DATA 
         DEC  A 
         CJNE A,#255,VL_1G 
         JMP  VL_1H 
VL_1G:   MOV  CEN_DATA,A 

VL_1H:   MOV  A,BW_DATA 
         DEC  A 
         CJNE A,#255,VL_1I 
         JMP  VL_1J 
VL_1I:   MOV  BW_DATA,A 

VL_1J:   RET 
         
VL2:     CJNE R5,#1,VL3               ;低音量调节,下限为0 
RM12:    MOV  A,BASS_DATA 
         DEC  A 
         CJNE A,#255,VL_2A 
         RET 
VL_2A:   MOV  BASS_DATA,A 

VL3:     CJNE R5,#2,VL4               ;高音量调节,下限为0 
RM13:    MOV  A,TR_DATA 
         DEC  A 
         CJNE A,#255,VL_3A 
         RET 
VL_3A:   MOV  TR_DATA,A 

VL4:     CJNE R5,#3,VL5               ;卡拉OK量调节,下限为0 
RM14:    MOV  A,MVOL_DATA 
         DEC  A 
         CJNE A,#255,VL_4A 
         RET 
VL_4A:   MOV  MVOL_DATA,A 

VL5:     CJNE R5,#4,VL6               ;ECHO量调节,下限为0 
RM15:    MOV  A,ECHO_DATA 
         DEC  A 
         CJNE A,#255,VL_5A 
         RET 
VL_5A:   MOV  ECHO_DATA,A 

VL6:     CJNE  R5,#5,VL7              ;DELAY调节 
         MOV  A,DELAY_DATA 
         CJNE A,#25,VL6A 
         MOV  DELAY_DATA,#20 
         CLR  M_DELAY2 
         SETB M_DELAY1 
         RET 
VL6A:    CJNE A,#20,VL6B 
         MOV  DELAY_DATA,#15 
         CLR  M_DELAY1 
         SETB M_DELAY2 
         RET 
VL6B:    CJNE A,#15,VL6C 
         MOV  DELAY_DATA,#10 
         SETB M_DELAY1 
         SETB M_DELAY2 
         RET 
VL6C:    MOV   DELAY_DATA,#25 
         CLR   M_DELAY1 
         CLR   M_DELAY2 
  
VL7:     CJNE R5,#6,VL8               ;SURL调节,下限为0 
RM16:    MOV  A,SURL_DATA 
         DEC  A 
         CJNE A,#255,VL_7A 
         RET 
VL_7A:   MOV  SURL_DATA,A 

VL8:     CJNE R5,#7,VL9               ;SURR调节,下限为0 
RM17:    MOV  A,SURR_DATA 
         DEC  A 
         CJNE A,#255,VL_8A 
         RET 
VL_8A:   MOV  SURR_DATA,A 

VL9:     CJNE R5,#8,VL10              ;CEN调节,下限为0 
RM18:    MOV  A,CEN_DATA 
         DEC  A 
         CJNE A,#255,VL_9A 
         RET 
VL_9A:   MOV  CEN_DATA,A   

VL10:    CJNE R5,#9,VL11              ;SW调节,下限为0 
RM19:    MOV  A,BW_DATA 
         DEC  A 
         CJNE A,#255,VL_10A 
         RET 
VL_10A:  MOV  BW_DATA,A 

VL11:    RET 

;;-------------------------操作优先排位子程序-------------------------------- 

FRIST:   MOV   A,SYS_SIGN 
         CJNE  A,#17,FRI_2       ;处在INPUT显示模式下,按下加减键会把VOL操作排在第一位 
         MOV   SYS_SIGN,#0         
FRI_2:   CJNE  A,#13,FRI_3       ;处在5.1显示模式下,按下加减键会把VOL操作排在第一位 
         MOV   SYS_SIGN,#0 
FRI_3:   CJNE  A,#12,FRI_4       ;处在2.0显示模式下,按下加减键会把VOL操作排在第一位     
         MOV   SYS_SIGN,#0 
FRI_4:   CJNE  A,#14,FRI_5       ;处在LOUND显示模式下,按下加减键会把VOL操作排在第一位 
         MOV   SYS_SIGN,#0 
FRI_5:   CJNE  A,#15,FRI_6       ;处在MUTE显示模式下,按下加减键会把VOL操作排在第一位 
         MOV   SYS_SIGN,#0 
         CLR   MUTE_DATA         ;顺便把静音也关闭了 
FRI_6:   RET               
         
;;--------------------------无按键按下自动复位子程序---------------------------- 
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 

KEY_REST: MOV    A,KEY_NUM 
          JNZ    BCK_1               ;  
   
BCK_0:    INC    R4                  ; 
          CJNE   R4,#150,BCK_2       ; 
BCK_3 :   MOV    R4,#00H 
          INC    R5 
          CJNE   R5,#16,BCK_2 
          MOV    R5,#00H       
           
          MOV    SYS_SIGN,#17        ;把SYS_SIGN预置为"INPUT状态" 
          MOV    KEY_DELAY,#129 
          JMP    BCK_2    
          
BCK_1:    MOV    R4,#00 
          MOV    R5,#00 
          MOV    GIF_SIGN,#2        ;有按键按把GIF_SIGN置2 
          MOV    GIF_LONG,#0                               
BCK_2:    JMP    RUN2_1 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;I2C协议(PT6311);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
;;;;;;;;;;;;;;;;;;;;;;I2C协议;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

;;;;;;;;;;;;;;;;;;; 启动子程序;;;;;;;;;;;;;;;;;;;;;; 
START:    CLR    PT2313_CLK      ; CLK在高电平期间PT2313_DATA由高到低变化 
          SETB   PT2313_DATA 
          NOP 
          SETB   PT2313_CLK 
          NOP 
          CLR    PT2313_DATA 
          NOP 
          CLR    PT2313_CLK 
          RET 
;;;;;;;;;;;;;;;;;;;停止子程序;;;;;;;;;;;;;;;;;;;;;;;; 
STOP:     CLR    PT2313_CLK 
          CLR    PT2313_DATA 
          NOP 
          NOP 
          SETB   PT2313_CLK 
          NOP 
          NOP 
          SETB   PT2313_DATA 
          NOP 
          NOP 
          CLR    PT2313_CLK 
          RET 

;;;;;;;;;;;;;;;;;;接收一个应答位;;;;;;;;;;;;;;;;;;;;;;;;; 
ACKI:     SETB   PT2313_CLK 
          NOP 
          NOP 
          MOV    C,PT2313_DATA 
          CLR    PT2313_CLK 
          RET 
;;;;;;;;;;;;;;;;;;;发送一个字节子程序;;;;;;;;;;;;;;;;; 
SEND:     MOV    R0,#08H      ;要发送的数据字节为8 
SEND0:    RLC    A 
          MOV    PT2313_DATA,C 
          NOP 
          NOP 
          SETB   PT2313_CLK 
          NOP 
          NOP 
          CLR    PT2313_CLK 
          NOP 
          NOP 
          DJNZ   R0,SEND0 
          SETB   PT2313_DATA 
          RET 
;;;;;;;;;;;;;;;;;;;;发送n个字节;;;;;;;;;;;;;;;;;;;;;;;;;;; 
OUT_DA:   LCALL   START 
          MOV  A,#88H   ;送写控制字节 
          LCALL  SEND 
          LCALL  ACKI 
          JC  QUIT_1 
              
OUT1:     MOV  A,MTD1 
          CALL SEND 
          CALL  ACKI 
          JC  QUIT_1           
          CALL  STOP   
          RET 

QUIT_1:   CALL  STOP 
          LJMP  OUT_DA        ;重发 
       

TIME   : PUSH   ACC 
         PUSH   PSW  
          
         SETB  RS0 
         MOV    A, REM_SIGN 
         CJNE   A,#03H,EXIT1      ;不是连发的定时溢出标记清0 
         INC    R1                ;执行一次遥控按键处理后,T0延事超过60ms,R1+1 
         INC    R2                ;T0中断次数存储单元,当T0中断3次(每次60ms),本次遥控结束           
         MOV    A,R2 
         SUBB   A,#3              ;判断在250ms内有无连发码出现 
         JNC    EXIT0             ;无则清0 
         MOV    TH0,#15H          ;定时值60MS 
         MOV    TL0,#0A0H 
         SETB   TR0 
         JMP    EXIT2  
EXIT0:   CLR    TR0            
         MOV    R2,#00H 
EXIT1:   MOV    REM_SIGN,#00H 
EXIT2:   POP    PSW 
         POP    ACC 
         RETI 
         NOP 
         NOP 

INT  :   MOV   MTD2,A 
         MOV   MTD3,PSW 
         MOV   MTD4,DPH 
         MOV   MTD5,DPL 

         SETB  RS0                 ;使用另一组寄存器 
         MOV   R2,#00H 
         CLR   TR0 
         CLR   EX0 
         MOV   R5,REM_SIGN 
         CJNE  R5,#00H,INT_2       ;初始化原始数据 
         MOV   R0,#REM_FIX         ;遥控数据接收的首址 
         MOV   R1,#0               ; 
         MOV   R2,#0               ;R2是连发溢出标记,当T0延时60ms*3后仍未检测到有遥控中断,本次遥控结束 
         MOV   R3,#8               ;每个字节的位数 
         MOV   R6,#0               ;数据对比单元 
         MOV   R7,#4               ;要接收的字节数 

         MOV   REM_SIGN,#01H       ;建立标记01                             
         JMP   INT_OFF 
INT_2:   CJNE  R5,#01H,INT_3       ;起始码和结果码的判断 
         MOV   A,#30H              ; 
         MOV   R6,TH0 
         SUBB  A,R6   
         JNC   ERR_OUT             ;启动码+结果码<12.55ms退出(忽略TL0的值) 
         MOV   A,#039H 
         SUBB  A,R6   
         JC    ERR_OUT             ;启动码+结果码〉14.6ms推出(忽略TL0的值) 
         MOV   REM_SIGN,#02H       ;建立标记02                                   
         JMP   INT_OFF 
INT_3:   CJNE  R5,#02H,INT_4       ;(old key_out) 
         MOV   A,#03H 
         MOV   R6,TH0              
         SUBB  A,R6                ;R6内存TH0的值 
         JNC   ERR_OUT             ;周期<1ms退出 
         MOV   A,#0BH 
         SUBB  A,R6 
         JC    ERR_OUT             ;周期>2.69ms退出     
         MOV   A,#6H               ;输入检测周期1.6ms用来判断1或0 
         SUBB  A,R6                ;       
         MOV   A,@R0               ; 
         RRC   A                   ;存入一位数值 
         MOV   @R0,A 
         DJNZ  R3,INT_OFF                        
INT_3_1 :INC   R0 
         MOV   R3,#08H 
         DJNZ  R7,INT_OFF          
         MOV   A,REM_KEY1                
         CPL   A 
         CJNE  A,REM_KEY,ERR_OUT   ;正反码比较,错则退          
         MOV   REM_TIME,#8         ; 
;----------------------------------------------------------                     
INT_4: ;   
;---------------------------------------------------------- 
 KY_OUT: MOV   A,REM_SIGN 
         CJNE  A,#3,ODD            ;判断遥控是出于第一次按键触发还是处于连发阶段,连发阶段的标记是REM_SIG=3 
         MOV   A,R1                ;连发最小时间判断,过滤掉<60ms的脉冲,因<60ms的脉冲不会令T0溢出  
         JZ    NORUN 
 ODD  :  INC   REM_TIME            ;每连发一次连发记忆单元+1 
 NORUN:  MOV   A,REM_TIME          ;因为跳过上一步IREM_TIME+1,所以不会执行BIJIAO(不够减)  
         SUBB  A,#5                ;连发5次调用一次按键处理程序 
         JNC   GO_0 
         JMP   GO_1 
GO_0:    MOV   REM_TIME,#00H       ;每调用一次按键处理子程序连发记忆单元清0 
         JMP   BIJIAO2 
BI_RET:  MOV   R1,#00 
         MOV   REM_SIGN,#03H       ;执行一次按键处理后建立遥控标记#03 
GO_1:    SETB  TR0 
         JMP   INT_OFF1                   
ERR_OUT: MOV   REM_SIGN,#00H       ;报错标记清0   
         LJMP  INT_OFF1            ;报错返回不启动定时器   
INT_OFF: SETB  TR0 
          
INT_OFF1:MOV   TH0,#00H 
         MOV   TL0,#00H           
         SETB  EX0   
         MOV   DPL,MTD5 
         MOV   DPH,MTD4 
         MOV   PSW,MTD3 
         MOV   A,MTD2 
         MOV   R4,#0 
         MOV   R5,#0               ;确定遥控结束后的参数复位时间 
         RETI 
         NOP 
         NOP 

BIJIAO2: MOV   GIF_SIGN,#2         ;动画进程置2,让他显示功能内容 
         MOV   GIF_LONG,#0 
         MOV   R4,REM_KEY           
         CJNE  R4,#2,BI1  
         CALL  RM1                 ;总音量调节+ 
         MOV   SYS_SIGN,#0 
          
BI1:     CJNE  R4,#1,BI2 
         CALL  RM2                 ;总音量调节-  
         MOV   SYS_SIGN,#0 
          
BI2:     CJNE   R4,#56H,BI3  
         MOV  DSP_DATA,#0  
         CALL   RM3                ;BASS+ 
         MOV    SYS_SIGN,#1        ;调整显示参数 
          
BI3:     CJNE   R4,#11H,BI4 
         MOV  DSP_DATA,#0 
         CALL   RM4                ;TR+ 
         MOV    SYS_SIGN,#2 
          
BI4:     CJNE   R4,#1DH,BI5 
         CALL   RM5                ;MVOL+ 
         MOV    SYS_SIGN,#3 
          
BI5:     CJNE   R4,#1CH,BI6 
         CALL   RM6                ;ECHO+ 
         MOV    SYS_SIGN,#4 
          
BI6:     CJNE   R4,#50H,BI7         ;SL+ 
         CALL   RM7 
         MOV    SYS_SIGN,#6 
          
BI7:     CJNE   R4,#46H,BI8         ;SR+ 
         CALL   RM8 
         MOV    SYS_SIGN,#7 
          
BI8:     CJNE   R4,#44H,BI9        ;CEN+ 
         CALL   RM9 
         MOV    SYS_SIGN,#8 
          
BI9:     CJNE   R4,#5EH,BI10       ;BW+ 
         CALL   RM10 
         MOV    SYS_SIGN,#9 
          
BI10:    CJNE   R4,#57H,BI11       ;BASS- 
         MOV    DSP_DATA,#0 
         CALL   RM12 
         MOV    SYS_SIGN,#1 
          
BI11:    CJNE   R4,#0DH,BI12 
         MOV  DSP_DATA,#0 
         CALL   RM13               ;TR-          
         MOV    SYS_SIGN,#2 
          
BI12:    CJNE   R4,#16H,BI13 
         MOV    DSP_DATA,#0 
         CALL   RM14               ;MVOL- 
         MOV    SYS_SIGN,#3   
                      
BI13:    CJNE   R4,#17H,BI14 
         CALL   RM15               ;ECHO- 
         MOV    SYS_SIGN,#4 
          
BI14:    CJNE   R4,#53H,BI15 
         CALL   RM16               ;SL- 
         MOV    SYS_SIGN,#6 
              
BI15:    CJNE   R4,#03H,BI16 
         CALL   RM17               ;SR- 
         MOV    SYS_SIGN,#7 
           
BI16:    CJNE   R4,#13H,BI17 
         CALL   RM18               ;CEN- 
         MOV    SYS_SIGN,#8 
          
BI17:    CJNE   R4,#1FH,BI18 
         CALL   RM19               ;BW- 
         MOV    SYS_SIGN,#9 
          
BI18:    CJNE   R4,#42H,BI19 
         MOV    INPUT_DATA,#1      ;AUX 
         MOV    SYS_SIGN,#17 
          
BI19:    CJNE   R4,#43H,BI20 
         MOV    INPUT_DATA,#2      ;VCD 
         MOV    SYS_SIGN,#17 
          
BI20:    CJNE   R4,#0FH,BI21       ;AC3 
         MOV    INPUT_DATA,#3 
         MOV    CH_DATA,#0         ;AC3状态下启动5.1ch 
         MOV    SYS_SIGN,#17 
          
BI21:    CJNE   R4,#0BH,BI22 
         MOV    DELAY_DATA,#10     ;100MS 
         SETB   M_DELAY2 
         SETB   M_DELAY1 
         MOV    SYS_SIGN,#5 
            
BI22:    CJNE   R4,#0AH,BI23 
         MOV    DELAY_DATA,#15     ;150MS 
         CLR    M_DELAY1 
         SETB   M_DELAY2 
         MOV    SYS_SIGN,#5 
             
BI23:    CJNE   R4,#1AH,BI24 
         MOV    DELAY_DATA,#20     ;200MS 
         CLR    M_DELAY2 
         SETB   M_DELAY1 
         MOV    SYS_SIGN,#5 
          
BI24:    CJNE   R4,#40H,BI25 
         MOV    DELAY_DATA,#25     ;250MS 
         CLR    M_DELAY2 
         CLR    M_DELAY1 
         MOV    SYS_SIGN,#5 
          
          
BI25:    CJNE   R4,#0CH,BI26      ;平衡L 
         MOV    SYS_SIGN,#10 
         MOV    A,BAL_DATA 
         INC    A 
         CJNE   A,#9,BI25_0 
         JMP    RET6 
BI25_0:  MOV    BAL_DATA,A 
         JMP    RET6 

BI26:    CJNE   R4,#05H,BI27      ;平衡R 
         MOV    SYS_SIGN,#10 
         MOV    A,BAL_DATA 
         DEC    A 
         CJNE   A,#255,BI26_0 
         JMP    RET6 
BI26_0:  MOV    BAL_DATA,A 
         JMP    RET6 

BI27:    CJNE   R4,#45H,BI28 
         MOV    DSP_DATA,#1        ;DSP1 
         JMP    RET7 

BI28:    CJNE   R4,#8H,BI29 
         MOV    DSP_DATA,#2        ;DSP2 
         JMP    RET7 

BI29:    CJNE   R4,#7H,BI30 
         MOV    DSP_DATA,#3        ;DSP3 
         JMP    RET7 

BI30:    CJNE   R4,#9H,BI31 
         MOV    DSP_DATA,#4        ;DSP4 
         JMP    RET7 

BI31:    CJNE   R4,#47H,BI32 
         MOV    DSP_DATA,#5        ;DSP5 
         JMP    RET7 

BI32:    CJNE   R4,#4CH,BI33 
         MOV    DSP_DATA,#6        ;DSP6 
         JMP    RET7 

BI33:    CJNE   R4,#4AH,BI34 
         MOV    DSP_DATA,#7        ;DSP7 
         JMP    RET7 

BI34:    CJNE   R4,#1BH,BI35 
         MOV    DSP_DATA,#0        ;DSP8          
         JMP    RET7 

BI35:    CJNE   R4,#4DH,BI36       ;MUTE  
         MOV    SYS_SIGN,#15   
         MOV    A,REM_SIGN         ;MUTE连发调用无效(REM_SIGN=#3是连发阶段) 
         CJNE   A,#3,BI35A    
         JMP    RET6  
BI35A:   JNB    MUTE_DATA,MUTE1 
         CLR    MUTE_DATA 
         JMP    RET6 
MUTE1:   SETB   MUTE_DATA 
        
BI36:    CJNE   R4,#49H,BI37       ;2.0CH 
     ;   MOV    CH_DATA,#3H 
         MOV    A,INPUT_DATA 
         CJNE   A,#3,BI36_1        ;在DVD状态下声道模式不能切换 
         MOV    SYS_SIGN,#20  
         JMP    BI37 
BI36_1:  MOV    SYS_SIGN,#12            
         MOV    CH_DATA,#3H 

BI37:    CJNE   R4,#48H,BI38       ;5.1CH 
         MOV    CH_DATA,#0 
         MOV    SYS_SIGN,#13 

BI38:    CJNE   R4,#5FH,BI39       ;LOUND 
         MOV    SYS_SIGN,#14 
         MOV    A,REM_SIGN         ;LOUND连发调用无效(REM_SIGN=#3是连发阶段) 
         CJNE   A,#3,BI38A    
         JMP    RET6 
          
BI38A:   JNB    LOUND_DATA,LOU1 
         CLR    LOUND_DATA 
         JMP    RET6 
LOU1:    SETB   LOUND_DATA         

BI39:    CJNE   R4,#4FH,BI40 
         MOV    A,REM_SIGN         ;DISP_MODE连发调用无效(REM_SIGN=#3是连发阶段) 
         CJNE   A,#3,BI39A    
         JMP    RET6 

BI39A:   MOV    A,DP_MODE          ;各种显示模式的切换 
         CJNE   A,#0,BI39B 
         MOV    DP_MODE,#1 

BI39B:   CJNE   A,#1,BI39C 
         MOV    DP_MODE,#2 

BI39C:   CJNE   A,#2,BI39D 
         MOV    DP_MODE,#3 

BI39D:   CJNE   A,#3,BI39F 
         MOV    DP_MODE,#4 

BI39F:   CJNE   A,#4,BI39G 
         MOV    DP_MODE,#5 

BI39G:   CJNE   A,#5,BI39E 
         MOV    DP_MODE,#0 

BI39E:   MOV    DP_SAVE,DP_MODE   ; 把DP_MODE模式保存起来   
         JMP    RET6         

BI40:    CJNE   R4,#04H,BI40B      ;POWER 
         MOV    A,REM_SIGN         ;POWER连发调用无效(REM_SIGN=#3是连发阶段) 
         CJNE   A,#3,BI40A    
         JMP    RET6 
          
BI40A:   JNB    POWER,destine      ;读预设,开机 
         CLR    POWER              ; 
         SETB   MUTE_DATA          ;收到关机指令后开静音 
         JMP    RET6 

BI40B:   JMP    BI41 
DESTINE:                            ;*******调用预设值********              

         SETB   POWER              ;启动电源标记 (只有但POWER=1,才可令MUTE=0关闭静音和关闭显示,关闭显示可以清空显示缓冲)            
         MOV   GIF_SIGN,#1         ;初始化动画进程  
         MOV   GIF_TIME1,#0        ;动画跑字速度间隔时间清0 
         MOV   GIF_LONG,#0         ;动画字幕长度清0 

         MOV  AD_SIM1,#0          
         MOV  AD_SIM2,#0 
         MOV  AD_SIM3,#0 
         MOV  AD_SIM4,#0 
  
         MOV   AD_TEM,#0           ;电平临时数据 
         MOV   AD_SIGN,#0          ;AD转换进程标记(=0,C放电  =1,测量数据   =2,测量结束) 
         MOV   AD_TIME,#0 
           
         MOV   DP_MODE,#0          ;电平显示模式 
         MOV   DP_NUM,#0           ;自动电平的当前进度格数 
         MOV   DP_SAVE,#0               
         CLR   STA_DATA            ;STA_DATA=0,表示第一次开机  STA_DATA=0,表示开机初始化结束 
         CLR   AUTO_SIGN           ;AUTO_SIGN=0,频谱自走 AUTO_SIGN=1,显示AD        
         MOV   AUTO_NUM,#0          

         MOV   KEY_DELAY,#129      ;按键连发执行间隔时间 
         MOV   TIME1,#0            ;总时间刷新 

         MOV   INPUT_DATA,#1       ;预置#1,CD/VCD选通  ;(CD/VCD=1,TUNER=2,AC3=3) 
         MOV   BASS_DATA,#8        ; 
         MOV   TR_DATA,#8          
         MOV   MAIN_DATA,#0  
         MOV   BAL_DATA,#4         ;平衡设置 
         MOV   DSP_DATA,#0         ;预置为DSP关闭 
         MOV   CH_DATA,#0          ;预置为5.1CH 
         MOV   MVOL_DATA,#9 
         MOV   ECHO_DATA,#15    
         MOV   DELAY_DATA,#25      ; 卡拉OK延时时间预设为250mS 
         CLR   M_DELAY1                
         CLR   M_DELAY2 
         MOV   SURL_DATA,#0       
         MOV   SURR_DATA,#0 
         MOV   CEN_DATA,#0     
         MOV   BW_DATA,#0 
         CLR   MUTE_DATA           ;关静音 
         CLR   LOUND_DATA          ;关等响  
         MOV   SYS_SIGN,#0        ;开机后显示主音量 
           

         MOV   DISP_BUFFER,#22H    ;显示缓冲区首址复位 
         MOV   DISP_INDEX,#0H      ;片内地址指针复位 
         MOV   R2,#26              ;把显示缓冲区共28个单元数值清0 
         MOV   R1,#22H 
DES1:    MOV   @R1,#0 
         INC   R1 
         DJNZ  R2,DES1                             
         JNB   BOOT_STR,BI40C           ;!!!!!!!!!!1检测是第一次开机读预置还是遥控读预置,判断返回地址 
BI41:    JMP   RET6   
BI40C:   SETB  BOOT_STR 
         RET 
RET7:    MOV    SYS_SIGN,#11       ;设置对应显示标记 
          
RET6:   ; 每调用一次BIJIAO2,则调用一次芯片数据输入程序 

;;-----------------------------把数据输入到PT2313/M62429芯片中------------------------------------------ 
  
DATA_IN:  CLR    TR1              ;PT2313数据写入 
MAN_INPUT:MOV    A,INPUT_DATA     ;(CD/VCD=1,TUNER=2,AC3=3) 

          MOV    DPTR,#TABLE9 
          MOVC   A,@A+DPTR 
          JNB    LOUND_DATA,MM1      ;ACC.2对应PT2313的LOUND位 
          CLR    ACC.2 
          JMP    MM2 
MM1:      SETB   ACC.2 

MM2:      MOV    MTD1,A               ;存入INPUT,增益,等响度关 
          CALL   OUT_DA 

MAN_VOL1 :MOV    A,BAL_DATA           
          MOV    DPTR,#TABLE10 
          MOVC   A,@A+DPTR 
          ADD    A,#80H 
          MOV    MTD1,A               ;存入左前声道 
          CALL   OUT_DA 

MAN_VOL2 :MOV    A,BAL_DATA           
          MOV    DPTR,#TABLE10A 
          MOVC   A,@A+DPTR 
          ADD    A,#0A0H 
          MOV    MTD1,A               ;存入右前声道 
          CALL   OUT_DA 

MAN_VOL3 :JNB    MUTE_DATA,MV3_1      ;静音判断 
          MOV    A,#0   
          JMP    MV3_2   
MV3_1:    MOV    A,MAIN_DATA           
MV3_2:    MOV    DPTR,#TABLE11 
          MOVC   A,@A+DPTR 
          MOV    MTD1,A                ;存入主声道 
          CALL   OUT_DA 

MAN_BASS :MOV    A,DSP_DATA           ;根据DSP_DATA内保存的数据判断是输入DSP数据或是手动调节数据 
          JZ     BASS1                ;DSP_DATA模式=0说明DSP关闭,跳到BASS2 
          MOV    A,DSP_DATA           ;DSP模式开启动,输入DSP模式数据 
          MOV    DPTR,#TABLE15 
          JMP    BASS3   
BASS1:    MOV    A,BASS_DATA                     
BASS2:    MOV    DPTR,#TABLE12 
BASS3:    MOVC   A,@A+DPTR 
          ADD    A,#60H 
          MOV    MTD1,A                ;存入BASS 
          CALL   OUT_DA 

MAN_TR :  MOV    A,DSP_DATA 
          JZ     TR_1                 ;根据DSP_DATA内保存的数据判断是输入DSP数据或是手动调节数据 
          MOV    A,DSP_DATA 
          MOV    DPTR,#TABLE16 
          JMP    TR_3     
TR_1:     MOV    A,TR_DATA  
                             
TR_2:     MOV    DPTR,#TABLE12 
TR_3:     MOVC   A,@A+DPTR 
          ADD    A,#70H 
          MOV    MTD1,A                ;存入TREBLE 
          CALL   OUT_DA 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;M62429;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
          CLR   C                    ;  选通通道1(SURL) 
          CALL  ML_1A 

          JB     MUTE_DATA,M_SL0     ;  判断SL是否静音 
          MOV    A,CH_DATA 
          CJNE   A,#0,M_SL0           ;除非CH_DATA=0(5.1CH),否则SL静音 
          JMP    M_SL1 

M_SL0:    MOV   A,#0 
          JMP   M_SL2 

M_SL1:    MOV   A,SURL_DATA          ;   
M_SL2:    MOV   DPTR,#TABLE13 
          MOVC  A,@A+DPTR 
          MOV   R6,#8 
          CALL  ML_1B                ; 输入音量数据 
          CALL  ML_1C                ; 输入结尾符号(2位1) 
;------- 
          SETB  C                    ; 选通通道2(SURR) 
          CALL  ML_1A 
           
          JB     MUTE_DATA,M_SR0     ;  判断SR是否静音 
          MOV    A,CH_DATA 
          CJNE   A,#0,M_SR0          ;  除非CH_DATA=0(5.1CH),否则SR静音 
          JMP    M_SR1 

M_SR0:    MOV   A,#0 
          JMP   M_SR2 
M_SR1:    MOV   A,SURR_DATA 
M_SR2:    MOV   DPTR,#TABLE13 
          MOVC  A,@A+DPTR 
          MOV   R6,#8 
          CALL  ML_1B 
          CALL  ML_1C 
;;----------------------------- 
          CLR   C                   ;  选通通道1(BW) 
          CALL  ML_2A 

          JB    MUTE_DATA,M_BW0     ;  判断BW是否静音 
          MOV   A,CH_DATA 
          CJNE  A,#3,M_BW1          ;  除非CH_DATA=3(2CH),否则重低音开启 
         
M_BW0:    MOV    A,#0 
          JMP    M_BW2 

M_BW1:    MOV   A,BW_DATA           ;   
M_BW2:    MOV   DPTR,#TABLE13 
          MOVC  A,@A+DPTR 
          MOV   R6,#8 
          CALL  ML_2B 
          CALL  ML_2C              ;  输入结尾符号(2位1) 

          SETB  C                  ;  选通通道2(CEN) 
          CALL  ML_2A      

          JB    MUTE_DATA,M_CEN0   ;  判断CEN是否静音 
          MOV   A,CH_DATA 
          CJNE  A,#3,CEN_A         ; 2CH则中置静音 
          JMP   M_CEN0 
CEN_A:    CJNE  A,#2,M_CEN1        ; 2.1CH则中置静音 

M_CEN0:   MOV   A,#0 
          JMP   M_CEN2 

M_CEN1:   MOV   A,CEN_DATA 
M_CEN2:   MOV   DPTR,#TABLE13 
          MOVC  A,@A+DPTR 
          MOV   R6,#8 
          CALL  ML_2B 
          CALL  ML_2C 
;;----------------------------- 
          CLR   C                  ;  选通通道1(MVOL) 
          CALL  ML_3A 

          JNB    MUTE_DATA,M_OK1   ;  判断MVOL是否静音 
          MOV    A,#0 
          JMP    M_OK2 

M_OK1:    MOV   A,MVOL_DATA        ;   
M_OK2:    MOV   DPTR,#TABLE14 
          MOVC  A,@A+DPTR 
          MOV   R6,#8 
          CALL  ML_3B 
          CALL  ML_3C               ;  输入结尾符号(2位1) 

          SETB  C                   ;  选通通道2(ECHO) 
          CALL  ML_3A 

          MOV   A,ECHO_DATA 
          MOV   DPTR,#TABLE14 
          MOVC  A,@A+DPTR 
          MOV   R6,#8 
          CALL  ML_3B 
          CALL  ML_3C 
          SETB  TR1 
          MOV   A,REM_SIGN 
          JZ    XX1 
          JMP    BI_RET    
XX1:      RET  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
ML_1A:     CLR   M62429_DA 
           CLR   M62429_CK                    
           NOP 
           NOP 
           MOV   M62429_DA ,C 
           SETB  M62429_CK                     ;CK上升沿串入数据 
           NOP 
           NOP 
           CLR   M62429_DA 
           CLR   M62429_CK 
           RET 
   
ML_1B:     RLC   A                             ;串入音量数据 
           MOV   M62429_DA,C 
           SETB  M62429_CK 
           NOP 
           NOP 
           CLR   M62429_DA 
           CLR   M62429_CK 
           NOP 
           NOP 
           DJNZ  R6,ML_1B 
           RET 

ML_1C:     SETB  C                             
           NOP 
           NOP 
           MOV   M62429_DA,C 
           SETB  M62429_CK 
           NOP 
           NOP 
           CLR   M62429_DA 
           CLR   M62429_CK 
           NOP 
           NOP 
           MOV   M62429_DA,C                               
           SETB  M62429_CK 
           NOP 
           NOP 
           NOP 
           NOP 
           CLR   M62429_CK 
           NOP 
           NOP 
           RET 
;---------------- 
ML_2A:     CLR   M62429_DA 
           CLR   M62429_CK1                    
           NOP 
           NOP 
           MOV   M62429_DA ,C 
           SETB  M62429_CK1                   ;CK上升沿串入数据 
           NOP 
           NOP 
           CLR   M62429_DA 
           CLR   M62429_CK1 
           RET  
ML_2B:     RLC   A                             ;串入音量数据 
           MOV   M62429_DA,C 
           SETB  M62429_CK1 
           NOP 
           NOP 
           CLR   M62429_DA 
           CLR   M62429_CK1 
           NOP 
           NOP 
           DJNZ  R6,ML_2B 
           RET 
ML_2C:     SETB  C                            ;结尾              
           NOP 
           NOP 
           MOV   M62429_DA,C 
           SETB  M62429_CK1 
           NOP 
           NOP 
           CLR   M62429_DA 
           CLR   M62429_CK1 
           NOP 
           NOP 
           MOV   M62429_DA,C                                
           SETB  M62429_CK1 
           NOP 
           NOP 
           NOP 
           NOP 
           CLR   M62429_CK1 
           NOP 
           NOP 
           RET 
;--------------------- 
ML_3A:     CLR   M62429_DA3 
           CLR   M62429_CK3                    
           NOP 
           NOP 
           MOV   M62429_DA3 ,C 
           SETB  M62429_CK3                   ;CK上升沿串入数据 
           NOP 
           NOP 
           CLR   M62429_DA3 
           CLR   M62429_CK3 
           RET 
   
ML_3B:     RLC   A                             ;串入音量数据 
           MOV   M62429_DA3,C 
           SETB  M62429_CK3 
           NOP 
           NOP 
           CLR   M62429_DA3 
           CLR   M62429_CK3 
           NOP 
           NOP 
           DJNZ  R6,ML_3B 
           RET 

ML_3C:     SETB  C                            ;结尾              
           NOP 
           NOP 
           MOV   M62429_DA3,C 
           SETB  M62429_CK3 
           NOP 
           NOP 
           CLR   M62429_DA3 
           CLR   M62429_CK3 
           NOP 
           NOP 
           MOV   M62429_DA3,C                                
           SETB  M62429_CK3 
           NOP 
           NOP 
           NOP 
           NOP 
           CLR   M62429_CK3 
           NOP 
           NOP 
           RET              
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;数据表格;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
               
TABLE1:  DB 00H,01H,  03H,04H,  06H,07H,  09H,0AH,   0CH,0DH,   0FH,10H,   12H,13H   ,15H,16H 
         DB 18H,19H,  1BH,1CH,  1EH,1FH,  21H,22H,   24H,25H  ;(PT6311片内积存器地址) 

TAB2:  DB  227,17,  34,49,  7,41,  9,36,  35,49,  0,0  , 227,17,  43,21,  227,16  
       DB  32,48, 9,36, 225,16, 9,36, 225,48 ,226,16,00,00,00,00,00,00,00,00,00 
       DB  00,00,00,00,00,00,00,00;(英文:AUDIO AMPLIFIER) 

TAB3:  DB  49,35,  4,8,    48,195,  33,195  , 1,226 
       DB  33,225, 49,225, 1,3,     49,227,   33,227;(数字0-9) 

TAB4:  DB  00,00,24,48,49,35,48,32,00,00   ;(字符串 VOL) 
TAB5:  DB  49,224,17,227,33,225,33,225     ;(字符串 BASS) 
TAB6:  DB  4,9,16,226,48,225,49,224        ;(字符串TREB) 
TAB7:  DB  49,227,48,32,17,227,19,38       ;(字符串 BLAN) 
TAB8:  DB  00,00,00,00,33,225,48,32        ;(字符串 SL) 
TAB9:  DB  00,00,00,00,33,225,16,226       ;(字符串 SR) 
TAB10: DB  00,00,00,00,33,225,53,42        ;(字符串 SW) 
TAB11: DB  00,00,48,33,48,225,19,38        ;(字符串 CEN) 
TAB12: DB  48,225,48,33,17,226,49,35       ;(字符串 ECHO)   
TAB13: DB  21,43,24,48,49,35,48,32         ;(字符串 MVOL) 
TAB14: DB  00,00,41,7,48,225,48,32         ;(字符串 DEL) 
TAB15: DB  00,00,41,7,33,225,16,227        ;(字符串 DSP) 

TAB16: DB  48,33,17,226,0,192,33,225,64,0,4,8,00,00   ;(字符串 CH-5.1) 
TAB17: DB  48,33,17,226,0,192,48,195,64,0,49,35,00,00 ;(字符串 CH-2.O) 

TAB18: DB  00,00,  48,33,  41,7  ,8,16,  24,48,  48,33,  41,7  ;(字符串 CD/VCD) 
TAB19: DB  00,00,  4,9,   49,34  ,19,38,  48,225, 16,226,00,00 ;(字符串 TUNER) 

TAB20: DB  00,00,  00,00,  41,7,  24,48,  41,7  ,00,00,00,00   ;(字符串 AC3) 

TAB21: DB  0,192,4,8,1,226,   0,192,4,8,48,195  ,0,192,4,8,49,35,  0,192,0,0,49,227 
       DB  0,192,0,0,49,225,  0,192,0,0,1,226,   0,192,0,0,48,195,   0,0,0,0,49,35 

       DB  4,200,0,0,48,195,  4,200,0,0,1,226,  4,200,0,0,49,225,   4,200,0,0,49,227 
       DB  4,200,4,8,49,35,   4,200,4,8,48,195, 4,200,4,8,1,226;(BASS和TREBLE的显示表格) 

TAB22: DB  0,0,0,0,21,43,49,34,4,9,48,225,0,0     ; (字符串 MUTE) 

TAB23: DB  48,32,49,35,49,34,41,7,0,0,49,35,19,38 ;(字符串 LOUD ON) 

TAB24: DB  48,32,49,35,49,34,41,7,0,0,49,35,16,225;(字符串 LOUD OF) 

TAB26: DB  32,0,  48,0,  56,0, 60,0, 62,0,  63,0, 63,128, 63,192,  63,224,  63,240,  63, 248,  63, 252, 63,254, 63,255 ;(柱状频谱1) 

TAB27: DB  0,1,  0,3,  0,7, 0,15, 0,31,  0,63,  0,127,  0,255,  1,255,  3,255,  7,255,  15,255,  31,255,  63,255                        ;(柱状频谱2) 

TAB28: DB  32,0,  16,0,  8,0,  4,0, 2,0, 1,0, 0,128,0,64,0,32,0,16,0,8,0,4,0,2,0,1                                      ;(点状频谱1) 

TAB29: DB 0,1,0,2,0,4,0,8,0,16,0,32,0,64,0,128,1,0,2,0,4,0,8,0,16,0,32,0                                                ;(点状频谱2) 

TAB30: DB  31,255, 47,255,55,255,59,255,61,255,62,255,63,127,63,191,63,223, 63,239,63,247,63,251,63,253,63,254 

TAB31: DB  63,254,63,253,63,251,63,247,63,239,63,223,63,191,63,127,62,255,61,255,59,255,55,255,47,255,31,255 


TAB40: DB  00,00,00,00,00,00,48,225,16,226,16,226,00,00       ;(ERR字符串) 

TABLE9:   DB   0,5CH, 5DH,5EH                   ; (PT2313,+0dB,等响关,通道选择1-3)            

TABLE10:  DB   0,0,0,0,0,5,8,13,31              ; (PT2313前L声道控制)    
TABLE10A: DB   31,13,8,5,0,0,0,0,0              ; (PT2313前R声道控制)                                           

TABLE11:  DB   63,62,61,60,59,58,57,56,55,54,53,52,51,50    ;(PT2313主音量) 
          DB   49,48,47,46,45,44,43,42,41,40,39,38,37,36  
          DB   35,34,33,32,31,30,29,28,27,26,25,24,23,22 
          DB   21,20,19,18,17,16,15,14,13,12,11,10,9,8 
          DB   7,6,5,4,3,2,1,0 

TABLE12:  DB     0,  1,  2,  3, 4, 5, 6, 7, 14, 13, 12, 11, 10,   9,   8        ;(PT2313高低音)       
              ; -14,-12,-10,-8,-6,-4,-2, 0, +2, +4, +6, +8, +10, +12, +14 

TABLE13:  DB   192,192,162,162,225,225,147,147,176,176      ;(M62429音量,SR,CEN,BW) 
          DB   240,240,136,136,200,200,168,168,232,232 
          DB   235,235,153,153,218,218,184,184,187,187 
          DB   250,250,251,251,134,134,135,135,198,198 
          DB   199,199,166,166,167,167,230,230,231,231 
          DB   150,150,151,151,212,212,214,214,213,213 
          DB   215,215,215,215,215,215 

TABLE14:  DB  192,147,136,232,218,187,134,199,167,231,151,212,214,213,215,215,215  ;(M62429音量,MVOL,ECHO) 
                             
TABLE15:  DB   7,7,8,8,11,3,7,11                       ;(DSP模式设定,共8种,该表用在PT2313查值)   
TABLE16:  DB   7,8,7,8,11,7,3,3 

END 


推荐阅读

史海拾趣

HELUKABEL公司的发展小趣事

HELUKABEL(和柔)公司在电子行业中以其卓越的电缆产品和解决方案而闻名,其发展历程中充满了多个值得一提的故事。以下是五个关于HELUKABEL在电子行业中发展起来的相关故事:

1. 从德国起源到全球扩张

HELUKABEL成立于1969年(也有资料提及为1978年),最初便专注于高品质电缆的生产。公司总部位于德国,凭借其卓越的产品质量和客户服务,迅速在欧洲市场站稳脚跟。随着全球化进程的加速,HELUKABEL开始实施国际化战略,逐步在全球37个国家建立了60多个子公司,形成了覆盖全球的销售和服务网络。这一过程中,HELUKABEL不仅将德国的技术和质量标准带到了世界各地,还根据当地市场需求进行产品调整和优化,实现了本土化经营。

2. 工业4.0时代的机器人电缆解决方案

随着工业4.0和智能制造的兴起,机器人成为制造业不可或缺的一部分。然而,机器人作业环境的复杂性和多轴运动对电缆提出了极高的要求。HELUKABEL凭借其深厚的电缆技术积累,研发出了适用于各种工业机器人的管线包技术。这些管线包不仅安装简便、空间占用小,还能确保机器人在高速、高负荷运行下的稳定性和可靠性。Robotec作为HELUKABEL旗下的子公司,更是专注于机器人电缆和组件的研发与生产,为全球机器人制造商提供了优质的解决方案。

3. 汽车轻量化进程中的电缆应用

汽车轻量化是近年来汽车行业的重要趋势之一,旨在提高燃油效率、降低排放。HELUKABEL凭借其丰富的电缆产品线和技术实力,积极参与到了这一进程中。公司提供的轻量化电缆不仅具有优异的电气性能和机械强度,还能有效减轻汽车整体重量。例如,在力劲集团的汽车轻量化生产车间中,HELUKABEL的电缆产品被广泛应用于控制柜和测量系统中,为汽车轻量化生产提供了坚实的电气连接保障。

4. 供应链优化与本土化战略

面对全球供应链的不确定性和挑战,HELUKABEL积极实施本土化战略以应对市场变化。公司在中国等关键市场建立了生产基地和供应链体系,实现了从原材料采购到成品生产的本地化。这一战略不仅缩短了产品交付周期、降低了物流成本,还提高了供应链的灵活性和抗风险能力。特别是在疫情期间,HELUKABEL通过本土化供应链体系确保了产品的稳定供应,赢得了客户的信赖和好评。

5. 技术创新与产品多样化

HELUKABEL始终将技术创新作为企业发展的核心驱动力。公司不断投入研发资源,推出了一系列具有自主知识产权的新产品和新技术。这些产品涵盖了低压至中压范围内的各类连接和控制用电器设备所需的电缆和线缆产品。同时,HELUKABEL还积极代理欧洲、美国等地区的知名品牌产品,为客户提供更加多样化的选择。通过技术创新和产品多样化战略的实施,HELUKABEL在电子行业中保持了领先地位并持续拓展市场份额。

AURORA公司的发展小趣事

AURORA公司一直致力于提升自动驾驶技术的安全性和可靠性。通过不断研发和创新,AURORA在自动驾驶算法、传感器融合、数据处理等方面取得了显著进展。公司的技术团队不断攻克技术难题,推动自动驾驶技术向更高等级迈进。同时,AURORA还积极与高校和研究机构合作,共同推动自动驾驶技术的研发和应用。

Emhiser Research Inc公司的发展小趣事

Emhiser Research非常注重创新管理和人才培养。公司建立了一套完善的研发流程和激励机制,鼓励员工提出创新性的想法和解决方案。同时,公司还积极与高校和研究机构合作,引进和培养了一批高素质的研发人才。这些人才不仅为公司带来了源源不断的创新动力,也为公司的长期发展奠定了坚实的基础。

GMT(致新科技)公司的发展小趣事
检查定时电路中的连接线是否松动或断裂。如果连接线有问题,应及时修复或更换。
Antiference公司的发展小趣事

随着技术的不断进步,Antiference公司开始将目光投向国际市场。公司积极参与国际电子展,展示其先进的电磁干扰抑制技术,并成功吸引了众多国外客户的关注。通过与国外知名企业的合作,Antiference的产品逐渐打入国际市场,品牌知名度也大幅提升。

Connor-Winfield公司的发展小趣事

在电子行业中,技术的创新和产品的品质是企业生存和发展的关键。Connor-Winfield深知这一点,因此在发展过程中始终注重技术创新和品质提升。公司投入大量资源进行研发,不断推出具有创新性和高性能的产品。同时,公司还建立了严格的质量管理体系,确保每一件产品都符合最高的品质标准。这些努力使得Connor-Winfield的产品在市场上赢得了良好的口碑。

问答坊 | AI 解惑

十年(一)

林花谢了春红,太匆匆。 不知不觉中,我与BSS结缘已经十年。   最近经常反问自己,这10年究竟做了些什么?每次想这个问题的时候,要么一片空白,要么心乱如麻,因为我也没有想清楚自己到底做了些什么,似乎做了很多,又似乎什么也没有做 ...…

查看全部问答>

被同一个坑绊倒了两次-俺的100mWZIGBEE节点调试心得

拿到一个新的PAIC,台湾某厂的UP2202,2.4G频段专用,号称增益25db,输出功率能轻而易举的达到20dbm,恰好有个zigbee项目需要增加功率,于是毫不犹豫的上了它,嘿嘿!     按照原理图,俺画了块板子,看起来貌似该ic使用起来很“弱智” ...…

查看全部问答>

招聘网络师傅一名

要求:会DSP原理,能 经常上网!…

查看全部问答>

妨碍你成功的性格特点

知足 只要有吃有穿,腹饱体暖,就感到满足。这种人对生活没有一点欲求,怎么会创造富有与成功呢? 自满 自己的总是最好的,甚至认为自己应该成为别人效仿的标准。这种人不屑于与外界来往,他们根本不知道社会进步到什么程度,怎么可能有更 ...…

查看全部问答>

adoce3.1 对数据库的操作

m_pConn->put_Provider(L\"\\\\DiskOnChip\\\\pda\\\\myce.sdf\");         m_pConn->Open(L\"Provider=microsoft.sqlserver.oledb.ce.2.0;Data Source=\\\\DiskOnChip\\\\pda\\\\myce.sdf\",TEXT(\"\"),TEXT(\"\"),adOpenUns ...…

查看全部问答>

VxWorks下实现了RPC Server,我在WINDOWS的PC上怎么访问?

我的设备上跑的是VxWorks,上面实现了一个RPC服务器,文档里面说是遵循SUN 的RPC规范(RFC1057),现在我在Windows平台下需要访问这个RPC服务器,这个要怎么做?…

查看全部问答>

求助:ce下如何使用看门狗

三星2440的芯片,想使用看门狗, 我现在写了一个驱动,看门狗做如下初始化: //Prescaler value=254, the clock division factor=128,Enable bit of the interrupt. int nCounts = 30000; v_pWatchRegs->rWTCON &= ~0xffff; v_pWatchRegs->rWT ...…

查看全部问答>

从根本上解决PLC高速计数器的计数误差

在应用高速计数器时往往会碰到,计数器与输入计数脉冲信号的脉冲电平不匹配、旋转编码器、光栅尺数据输出是TTL电平,而PLC高速计数器却要求接受的是0 - 24v传输脉冲信号、有的编码器为了提高编码器的可靠性,提供A+、A-,B+、B-,Z+、Z- 对称反相计 ...…

查看全部问答>

香水,给我个STM8s-discovery的软件包。

在ST扯淡的网站上找了两个小时没找到。 愤怒!!! 我需要ST-link STVP STVD 再次提出强烈抗议!!!…

查看全部问答>

新人报道,多多关照

很高兴加入论坛,希望与大家共同分享,交流,进步…

查看全部问答>