📄 av.asm
字号:
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 + -