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

📄 av-p06a.asm

📁 型号: AV-P06A 5.1CH功率放大器 89C52+12M+PT2314+PT2315+2*M62429+PT6311+CS16210+6221+VFDGDT1313A,包含VFD真值表手册资料
💻 ASM
📖 第 1 页 / 共 5 页
字号:
            CJNE   R3,#0,AD_1
            
            SETB   AD_OUT
            INC    AD_CLR
            MOV    R3,AD_CLR
            MOV    AD_TEM,#0
            CJNE   R3,#50,AD_RET
            MOV    AD_CLR,#0
            MOV    AD_CYC,#0
            MOV    AD_SIGN,#1
            JMP    AD_RET
            
      AD_1: MOV    R3,AD_SIGN
            CJNE   R3,#1,AD_RET
            CLR    AD_OUT
            INC    AD_CYC
            JNB    AD_IN,AD_1_1
            INC    AD_TEM
    AD_1_1: MOV    R3,AD_CYC
            CJNE   R3,#11,AD_RET
            MOV    AD_CYC,#0
            MOV    AD_DATA1,AD_TEM
            MOV    AD_SIGN,#0
    AD_RET: POP    PSW
            POP    ACC
RETI
NOP
NOP

   
;/////////////////////////////////////////////////////////////////////////////////////////  
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,#TAB_6311RAM
          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
;-----------------------------------------------------------------------------------------
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,1AH                  ;判断那一行闭合
          JZ   KEY_2
          MOV  R6,#00
          JMP  TAKE
KEY_2 :   MOV  A,1BH 
          JZ   KEY_3
          MOV  R6,#08
          JMP  TAKE
KEY_3 :   MOV  A,1CH
          JZ   KEY_4
          MOV  R6,#16
          JMP  TAKE
KEY_4 :   MOV  A,1DH
          JZ   KEY_5
          MOV  R6,#024
          JMP  TAKE
KEY_5 :   MOV  A,1EH
          JZ   KEY_6
          MOV  R6,#32
          JMP  TAKE
KEY_6 :   MOV  A,1FH
          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

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

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
;------------------------------------按键处理子程序---------------------------------------

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                        
;/////////////////////////////////////////////////////////////////////////////////////////
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,TREB_DATA
         INC  A
         CJNE A,#15,VOL_3A
         RET
 VOL_3A: MOV  TREB_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,VOL7               ;ECHO量调节,上限为16
 RM6:    MOV  A,ECHO_DATA
         INC  A
         CJNE A,#17,VOL_5A
         RET
VOL_5A:  MOV  ECHO_DATA,A
         RET



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

⌨️ 快捷键说明

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