?? 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 + -