📄 av.asm
字号:
INC AD_CLR
MOV R3,AD_CLR
MOV AD_TEM,#0
CJNE R3,#50,AD_RET ;;放电250ms (调节该参数的另一功能是可以使显示刷新时间改变)
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数据不+1
INC AD_TEM ;检测到为高电平,AD数据不+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数据检测结束,AD_SIGN置0
AD_RET: POP PSW
POP ACC
RETI
NOP
NOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PT16311读写程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
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,#TABLE1
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
START_VFD: CLR PT6311_STB
MOV A,#0CH ;13位15段
CALL OUTDATA ;输入一组数据
SETB PT6311_STB
RET
BRIGHT: CLR PT6311_STB ;设置亮度子程序14/16
MOV A,#0BDH
CALL OUTDATA
SETB PT6311_STB
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,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 ;把十位数值存入高位显示缓冲区
MOV DISP_L,B ;把个位数值存入低位显示缓冲区
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 ;=====================连发/单发的原理=============================
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
;---------------------------------按键处理---------------------------------------------
;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 ;调用优先比较程序,当在输入状态或等响显示状态下时,按下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,TR_DATA
INC A
CJNE A,#15,VOL_3A
RET
VOL_3A: MOV TR_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,VOL6 ;ECHO量调节,上限为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调节
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 + -