?? av.asm
字號:
INC AD_CLR
MOV R3,AD_CLR
MOV AD_TEM,#0
CJNE R3,#50,AD_RET ;;放電250ms (調節(jié)該參數(shù)的另一功能是可以使顯示刷新時間改變)
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數(shù)據(jù)不+1
INC AD_TEM ;檢測到為高電平,AD數(shù)據(jù)不+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數(shù)據(jù)檢測結束,AD_SIGN置0
AD_RET: POP PSW
POP ACC
RETI
NOP
NOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PT16311讀寫程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WR_VFD :
CLR PT6311_STB ;寫入一組8位數(shù)據(jù)
MOV A,#70H ;設置為正常工作,地址增量,寫顯示數(shù)據(jù)模式
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 ;把顯示緩沖區(qū)數(shù)據(jù)寫入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個數(shù)據(jù)緩沖區(qū)數(shù)據(jù))
MOV DISP_BUFFER,#22H ;顯示緩沖區(qū)首址復位
MOV DISP_INDEX,#0H ;片內地址指針復位
WR_QUT: SETB PT6311_STB
NOP
NOP
JMP RUN4_1
OUTDATA: MOV R0,#8 ;寫入一個字節(jié)子程序
SETB PT6311_DATA
NOP
W1: CLR PT6311_CLK
RRC A
MOV PT6311_DATA,C
SETB PT6311_CLK ;時鐘上升沿寫入數(shù)據(jù)
DJNZ R0,W1
RET
START_VFD: CLR PT6311_STB
MOV A,#0CH ;13位15段
CALL OUTDATA ;輸入一組數(shù)據(jù)
SETB PT6311_STB
RET
BRIGHT: CLR PT6311_STB ;設置亮度子程序14/16
MOV A,#0BDH
CALL OUTDATA
SETB PT6311_STB
RET
INDATA: MOV R6,#8 ;讀入一個字節(jié)子程序(讀鍵盤)
SETB PT6311_DATA ;令PT6311_DATA接口有效
INDATA1: SETB PT6311_CLK ;時鐘的下降沿讀出數(shù)據(jù)(??)
CLR PT6311_CLK ;讀出一個位
MOV C,PT6311_DATA ;讀出的數(shù)據(jù)暫存位積存器C
RRC A ;位數(shù)據(jù)入ACC
DJNZ R6,INDATA1
RET
;;------------------------------------------------------------------
RD_KEY: MOV R1,#KEY_CELL ;讀鍵值子程序
MOV R2,#06H ;要讀入的鍵值單元數(shù)為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 ;把十位數(shù)值存入高位顯示緩沖區(qū)
MOV DISP_L,B ;把個位數(shù)值存入低位顯示緩沖區(qū)
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 ;=====================連發(fā)/單發(fā)的原理=============================
CJNE A,KEY_NUM,DELAY_3 ;如果檢測到連續(xù)兩次都不是同一鍵按下的,執(zhí)行該按鍵的功能的處理
JMP OUT ;如果檢測到連續(xù)兩次都是同一鍵按下的,不執(zhí)行該按鍵的功能處理
DELAY_3: CALL BIJIAO ;調用按鍵處理程序(要隔2x8x23ms才調用一次按鍵比較程序,連發(fā)一次大約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 ;調用優(yōu)先比較程序,當在輸入狀態(tài)或等響顯示狀態(tài)下時,按下UP鍵會把VOL值優(yōu)先調用提升
CALL VOL_UP
JMP RET4
BA_4 : CJNE R6,#10,RET9
CALL FRIST ;調用優(yōu)先比較程序,當在輸入狀態(tài)或等響顯示狀態(tài)下時,按下UP鍵會把VOL值優(yōu)先調用提升
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 ;總音量調節(jié),上限為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 ;低音量調節(jié),上限為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 ;高音量調節(jié),上限為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量調節(jié),上限為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量調節(jié),上限為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調節(jié)
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
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -