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

📄 av.asm

📁 一套全遥控6声道AV机的汇编程序,该程序已经商业化的
💻 ASM
📖 第 1 页 / 共 5 页
字号:
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        ;调整显示参数

⌨️ 快捷键说明

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