📄 my_pt2314.asm
字号:
BUFF23 EQU 30h
;BUFF24 EQU 31H
DISP0 EQU 32h
DISP1 EQU 33h
SCL BIT P3.4
SDA BIT P3.5
KEYBUFF EQU 3FH
KEY_IO EQU P2
RS EQU P0.0 ;LCM_RS_PIN
RW EQU P0.1 ;LCM_RW_PIN
E EQU P0.2 ;LCM_E_PIN
LCM_D EQU P0 ;LCM接口
BF BIT P0.7 ;判断LCM是否忙
LCD_BIT BIT 20H.0 ;为0写LCM控制,为1写数值
LCM_BUFF DATA 70H ;LCM写缓冲
ZLING DATA 45H ;控制缓冲
SHUJU DATA 46H ;数值缓冲
REMOTEIN BIT P3.2 ;遥控输入
ir_code data 40H ;操作码
ir_code_R data 41h ;操作码反码
ir_ID_code data 42h ;用户码
ir_id_code_r data 43h ;操作反码
IR_ADDR DATA 44H
BASS_TONE EQU 34H ;低音控制缓冲
TREBLE_TONE EQU 35H ;高音控制缓冲
M_VOL EQU 36H ;主音量控制缓冲
IN_BUFF EQU 37H ;输入选择缓存
SP_L_BUFF EQU 38H ;平衡选择缓存
SP_R_BUFF EQU 39H ;平衡选择缓存
;--------------------------------------
DISP_BUFF EQU 3BH ;
PT2314_MSB EQU 3DH ;发送PT2314数高位
;PT2314_LSB EQU 3EH ;发送PT2314数低位
PT2314_ADD EQU 88H ;PT2314的I2C地址为88H
B_ADD EQU 01H ;低音记忆地址
T_ADD EQU 02H ;高音记忆地址
VOL_ADD EQU 03H ;音记忆地址
SP_L_ADD EQU 04H ;低音记忆地址
SP_R_ADD EQU 05H ;高音记忆地址
IN_ADD EQU 06H
MUTE_BIT BIT 20H.1
RE_KEY BIT 20H.2
IR_SET_BIT BIT 20H.3
;POWER_BIT BIT P3.7
;************************************************************
ORG 0000H
AJMP STAR
;----------------------------------
ORG 0003H
JMP REMOTE
;----------------------------------
ORG 001BH
JMP TIME0
;---------------------------------
ORG 0030H
;--------------------------------
STAR:
MOV P0, #0ffH
MOV P1, #0FFH
MOV P2, #0ffH
MOV P3, #0ffH
;-------------------------------
MOV M_VOL, #43 ;开机时默认音量为第-43级.(一共0-63级)
;MOV SP_R_BUFF,#0
;MOV SP_L_BUFF,#0
;-----------------------------
MOV SP, #50H
;-----------------------------
mov tmod, #10h ;设定时器1工作方式2
MOV TH1, #0H
MOV TL1, #0H
setb ea ;开中断
SETB et1 ;开定时中断
setb tr1 ;开启计数器
SETB IT0 ;设定INT0触发方式,边沿触发.
SETB EX0 ;INT0请求中断
setb rs0 ;选择寄存器组
clr rs1
SETB IR_SET_BIT
;-------------------------------------
LCALL YS4
NOP
LCALL YS4
;*******************************
LCALL LCM_RESET ;初始化LCD,应在程序开头
;*******************************
JMP KEY4X4;STAR_KEY
PT2314_START:
;------------------------------
LCALL YS4
NOP
LCALL YS4 ;初始化PT2322
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;读24C08内数值到PT2322
ACALL DELAY10
MOV A,#B_ADD
LCALL RD24
MOV BASS_TONE,A
ACALL CTRL_SHUI
ADD A,#60H
MOV PT2314_MSB,A
LCALL PT2314_WR
ACALL DELAY10
;-----------------------------------
MOV A,#T_ADD
LCALL RD24
MOV TREBLE_TONE,A
ACALL CTRL_SHUI
ADD A,#70H
MOV PT2314_MSB,A
LCALL PT2314_WR
ACALL DELAY10
;-----------------------------------
MOV A,#SP_L_ADD
LCALL RD24
MOV SP_L_BUFF,A
ADD A,#0C0H
LCALL WR_2314_BALANCE
ACALL DELAY10
;-----------------------------------
MOV A,#SP_R_ADD
LCALL RD24
MOV SP_R_BUFF,A
ADD A,#0E0H
LCALL WR_2314_BALANCE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;默认音量
MOV A,M_VOL
MOV PT2314_MSB,A
LCALL PT2314_WR
ACALL DELAY10
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV A,#IN_ADD
LCALL RD24
MOV IN_BUFF,A
LCALL INSW
LCALL DIS_VOL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN:
JMP KEY
AJMP main
;-----------------------------
;10毫秒延时子程序
DELAY10:
MOV R4,#10
D10:
MOV R5,#248
DJNZ R5,$
DJNZ R4,D10
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;判断按键执行
OPREAT:
MOV A,KEYBUFF
MOV DPTR,#KEY_TAB
MOV B,#2
MUL AB
JMP @A+DPTR
RET
;---------------------------------------------
KEY_TAB:
AJMP KK1 ;+vol
AJMP KK2 ;-vol
AJMP KK3 ;+bass
AJMP KK4 ;-bass
AJMP KK5 ;+tr
AJMP KK6 ;-tr
AJMP KK7 ;+mid
AJMP KK8 ;-mid
AJMP KK9 ;set_up
AJMP KK10 ;set_down
AJMP KK11 ;set_sel
AJMP KK12 ;up_audio
AJMP KK13 ;down_audio
AJMP KK14 ;up_in
AJMP KK15 ;down_in
AJMP KK16
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KK1:
LCALL SET_M_VOL_DOWN
RET
;-------------------------------------------
KK2:
LCALL SET_M_VOL_UP
RET
;----------------------------------------
KK3:
LCALL SET_BASS_VOL_DOWN
RET
;----------------------------------------
KK4:
LCALL SET_BASS_VOL_UP
RET
;---------------------------------------
KK5:
LCALL SET_TR_VOL_UP
RET
;---------------------------------------
KK6:
LCALL SET_TR_VOL_DOWN
RET
;---------------------------------------
KK7:
LCALL BALANCE_L
RET
;---------------------------------------
KK8:
LCALL BALANCE_R
RET
;---------------------------------------
KK9:
MOV IN_BUFF,#1
LCALL INSW
RET
;--------------------------------------
KK10:
MOV IN_BUFF,#2
LCALL INSW
RET
;-------------------------------------
KK11:
MOV IN_BUFF,#3
LCALL INSW
RET
;-------------------------------------
KK12:
MOV IN_BUFF,#4
LCALL INSW
RET
;------------------------------------
KK13:
CPL MUTE_BIT
LCALL MUTE_ON_OFF
RET
;-----------------------------------
KK14:
;CPL POWER_BIT
RET
;----------------------------------
KK15:
RET
;---------------------------------
KK16:
RET
;***************************************
SET_M_VOL_UP:
CLR MUTE_BIT
LCALL MUTE_OFF
MOV A,M_VOL
CJNE A,#63,MVOL_UP
RET
MVOL_UP:
INC A
MOV M_VOL,A
MOV PT2314_MSB,A
LCALL PT2314_WR
DIS_VOL:
MOV A,#63
SUBB A,M_VOL
LCALL BIN2BCD
LCALL DIS_M_VOL
LCALL DISLCD1
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SET_BASS_VOL_UP:
MOV A,BASS_TONE
CJNE A,#14,BA_SHUI
LCALL DDDBAS
RET
BA_SHUI:
INC A
MOV BASS_TONE,A
LCALL CTRL_SHUI
ADD A,#60H
MOV PT2314_MSB,A
LCALL PT2314_WR
LCALL DELAY10
MOV A,BASS_TONE
MOV B,A
MOV A,#B_ADD
LCALL WT24
DDDBAS:
MOV A,BASS_TONE
MOV BUFF23,A
LCALL DIS_BASS_VOL
LCALL DISLCD2
RET
;;;;;;;;;;;;;;;;;
SET_TR_VOL_UP:
MOV A,TREBLE_TONE
CJNE A,#14,TR_SHUI
LCALL DDDTR
RET
TR_SHUI:
INC A
MOV TREBLE_TONE,A
LCALL CTRL_SHUI
ADD A,#70H
MOV PT2314_MSB,A
LCALL PT2314_WR
MOV B,TREBLE_TONE
MOV A,#T_ADD
LCALL WT24
DDDTR:
MOV A,TREBLE_TONE
MOV BUFF23,A
LCALL DIS_TR_VOL
LCALL DISLCD2
RET
;;;;;;;;;;;;;;;;;
SET_M_VOL_DOWN:
CLR MUTE_BIT
LCALL MUTE_OFF
MOV A,M_VOL
CJNE A,#0,MVOL_DN
RET
MVOL_DN:
DEC A
MOV M_VOL,A
MOV PT2314_MSB,A
LCALL PT2314_WR
MOV A,#63
SUBB A,M_VOL
LCALL BIN2BCD
LCALL DIS_M_VOL
LCALL DISLCD1
RET
;;;;;;;;;;;;;;;;;;
SET_BASS_VOL_DOWN:
MOV A,BASS_TONE
CJNE A,#0,BA1_SHUI
LCALL DDDBAS
RET
BA1_SHUI:
DEC A
MOV BASS_TONE,A
LCALL CTRL_SHUI
ADD A,#60H
MOV PT2314_MSB,A
LCALL PT2314_WR
LCALL DELAY10
MOV A,BASS_TONE
MOV B,A
MOV A,#B_ADD
LCALL WT24
MOV A,BASS_TONE
MOV BUFF23,A
LCALL DIS_BASS_VOL
LCALL DISLCD2
RET
;;;;;;;;;;;;;;;;;
SET_TR_VOL_DOWN:
MOV A,TREBLE_TONE
CJNE A,#0,TR1_SHUI
LCALL DDDTR
RET
TR1_SHUI:
DEC A
MOV TREBLE_TONE,A
LCALL CTRL_SHUI
ADD A,#70H
MOV PT2314_MSB,A
LCALL PT2314_WR
MOV B,TREBLE_TONE
MOV A,#T_ADD
LCALL WT24
MOV A,TREBLE_TONE
MOV BUFF23,A
LCALL DIS_TR_VOL
LCALL DISLCD2
RET
;;;;;;;;;;;;;;;;;;;;;;
CTRL_SHUI:
MOV DPTR,#TONG_DATA
MOVC A,@A+DPTR
RET
TONG_DATA:
DB 00H,01H,02H,03H,04H,05H,06H,07H
DB 0EH,0DH,0CH,0BH,0AH,09H,08H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INSW:
INSW1:
MOV A,IN_BUFF
CJNE A,#1,INSW2
MOV A,#0
ADD A,#40H;+11.25
ACALL IN_DATA
LCALL IN_DIS1
RET
INSW2:
;MOV A,IN_BUFF
CJNE A,#2,INSW3
MOV A,#1
ADD A,#40H;
ACALL IN_DATA
LCALL IN_DIS2
RET
INSW3:
;MOV A,IN_BUFF
CJNE A,#3,INSW4
MOV A,#2
ADD A,#40H;
ACALL IN_DATA
LCALL IN_DIS3
RET
INSW4:
;MOV A,IN_BUFF
CJNE A,#4,INSW5
;MOV IN_BUFF,#0
MOV A,#3
ADD A,#40H;
ACALL IN_DATA
LCALL IN_DIS4
RET
INSW5:
;MOV IN_BUFF,#0
RET
IN_DATA:
ACALL WR_2314_BALANCE
MOV A,#IN_ADD
MOV B,IN_BUFF
LCALL WT24
LCALL IN_DIS
RET
;静音
MUTE_ON_OFF:
JNB MUTE_BIT,MUTE_OFF
MOV A,#0DFH
ACALL WR_2314_BALANCE
MOV A,#0FFH
ACALL WR_2314_BALANCE
LCALL DIS_VOL
LCALL LCD_MUTE
CLR RE_KEY
RET
MUTE_OFF:
MOV A,SP_L_BUFF
ADD A,#0C0H
ACALL WR_2314_BALANCE
MOV A,SP_R_BUFF
ADD A,#0E0H
ACALL WR_2314_BALANCE
LCALL DIS_VOL
SETB RE_KEY
RET
;---------------
BALANCE_L:
MOV A,SP_R_BUFF
CJNE A,#0,BR_1
MOV A,SP_L_BUFF
CJNE A,#31D,BL_11
RET
BR_1:
DEC A
MOV SP_R_BUFF,A
ADD A,#0E0H
ACALL WR_2314_BALANCE
LCALL DIS_BAL_VOL
ACALL SAVE_BAL
RET
BL_11:
INC A
MOV SP_L_BUFF,A
ADD A,#0C0H
ACALL WR_2314_BALANCE
LCALL DIS_BAL_VOL
ACALL SAVE_BAL
RET
;
BALANCE_R:
MOV A,SP_L_BUFF
CJNE A,#0,BL_1
MOV A,SP_R_BUFF
CJNE A,#31D,BR_11
RET
BL_1:
DEC A
MOV SP_L_BUFF,A
ADD A,#0C0H
ACALL WR_2314_BALANCE
LCALL DIS_BAL_VOL
ACALL SAVE_BAL
RET
BR_11:
INC A
MOV SP_R_BUFF,A
ADD A,#0E0H
ACALL WR_2314_BALANCE
LCALL DIS_BAL_VOL
SAVE_BAL:
LCALL DELAY10
MOV A,#SP_L_ADD
MOV B,SP_L_BUFF
LCALL WT24
LCALL DELAY10
MOV A,#SP_R_ADD
MOV B,SP_R_BUFF
LCALL WT24
RET
WR_2314_BALANCE:
MOV PT2314_MSB,A
LCALL PT2314_WR
RET
;------------------------------
;BCD2BIN:
;MOV A,BCD0
;MOV B,#10
;MUL AB
;ADD A,BCD1
;MOV BIN0,A
;RET
;------------------------------
BIN2BCD:
;MOV A,TMP
MOV B,#10
Div AB
MOV DISP0,A
MOV DISP1,B
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME0: ;定时器0的中断处理程序
PUSH ACC
PUSH PSW ;将PSW和ACC推入堆栈保护
MOV TH1,#15H
MOV TL1,#0a0H
SETB rs1 ;选择寄存器组
setb rs0
jb re_key,t_res1
mov r0,#0
mov r1,#0
mov r2,#0
AJMP T_RE
t_res1:
INC R0
CJNE R0,#10,T_RET
MOV R0,#0
CPL P2.3
INC R1
T_RET:
CJNE R1,#60,T_RE
MOV R1,#0
jb re_key,t_res
MOV R0,#0
MOV R1,#0
MOV R2,#0
AJMP T_RE
t_res:
LCALL DIS_VOL
T_RE:
MOV TH1,#15H
MOV TL1,#0a0H
POP PSW
POP ACC
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;更换24C08时初始化24C08
W2408_STAR:
LCALL DELAY10
MOV A,#B_ADD
MOV B,#7
LCALL WT24
LCALL DELAY10
MOV A,#T_ADD
MOV B,#7
LCALL WT24
LCALL DELAY10
MOV A,#SP_L_ADD
MOV B,#0
LCALL WT24
LCALL DELAY10
MOV A,#SP_R_ADD
MOV B,#0
LCALL WT24
LCALL DELAY10
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY4X4:
MOV KEY_IO,#11110000B
MOV A,KEY_IO
CJNE A,#11110000B,HAVE_KEY
JMP PT2314_START
STAR_KEY:
HAVE_KEY:
MOV KEY_IO,#11111011B
JNB KEY_IO.7,SVAE24 ;K0按下就转到数字设置
JNB KEY_IO.6,REMOTE_SEL
JMP MAIN
SVAE24:
ACALL KEYWAIT
LCALL W2408_STAR
ACALL KEYWAIT;_SOTP
JMP PT2314_START
;RET
REMOTE_SEL:
ACALL KEYWAIT
CLR IR_SET_BIT
CLR RE_KEY
LCALL DIS_IR_SET
ACALL KEYWAIT_SOTP
ACALL KEY
JMP MAIN
;-----------------------------------
;以下为输入数字的键盘扫描
;------------------------------------
KEY:
NOP
LINE1:
MOV KEY_IO,#11111110B
JNB KEY_IO.7,K0
JNB KEY_IO.6,K1
JNB KEY_IO.5,K2;K_ENTER
JNB KEY_IO.4,K3;K_ESC
;--------------------------------
LINE2:
MOV KEY_IO,#11111101B
JNB KEY_IO.7,K4
JNB KEY_IO.6,K5
JNB KEY_IO.5,K6
JNB KEY_IO.4,K7
;-------------------------------
LINE3:
MOV KEY_IO,#11111011B
JNB KEY_IO.7,K8
JNB KEY_IO.6,K9
JNB KEY_IO.5,K10
JNB KEY_IO.4,K11
;-------------------------------
LINE4:
MOV KEY_IO,#11110111B
JNB KEY_IO.7,K12
JNB KEY_IO.6,K13
JNB KEY_IO.5,K14;K_ENTER
JNB KEY_IO.4,K15;K_ESC
;--------------------------------
AJMP LINE1
;-------------------------------
K0:
MOV KEYBUFF,#0
ACALL KEYWAIT
AJMP VOL_CONT
K1:
MOV KEYBUFF,#1
ACALL KEYWAIT
AJMP VOL_CONT
K2:
MOV KEYBUFF,#2
ACALL KEYWAIT
AJMP YIWEI
K3:
MOV KEYBUFF,#3
ACALL KEYWAIT
AJMP YIWEI
K4:
MOV KEYBUFF,#4
ACALL KEYWAIT
AJMP YIWEI
K5:
MOV KEYBUFF,#5
ACALL KEYWAIT
AJMP YIWEI
K6:
MOV KEYBUFF,#6
ACALL KEYWAIT
AJMP YIWEI
K7:
MOV KEYBUFF,#7
ACALL KEYWAIT
AJMP YIWEI
K8:
MOV KEYBUFF,#8
ACALL KEYWAIT_SOTP
AJMP YIWEI
K9:
MOV KEYBUFF,#9
ACALL KEYWAIT_SOTP
AJMP YIWEI
K10:
MOV KEYBUFF,#10
ACALL KEYWAIT_SOTP
AJMP YIWEI
K11:
MOV KEYBUFF,#11
ACALL KEYWAIT_SOTP
AJMP YIWEI
K12:
MOV KEYBUFF,#12
ACALL KEYWAIT_SOTP
AJMP YIWEI
K13:
MOV KEYBUFF,#13
ACALL KEYWAIT_SOTP
AJMP YIWEI
K14:
MOV KEYBUFF,#14
ACALL KEYWAIT_SOTP
AJMP YIWEI
K15:
MOV KEYBUFF,#15
ACALL KEYWAIT_SOTP
AJMP YIWEI
;---------------------------------------
;K_ENTER:
;LCALL KEYWAIT
;RET
;K_ESC:
;LCALL KEYWAIT
;LCALL DATA_ESC
;RET
;----------------------------------------
YIWEI:
JB IR_SET_BIT,KEY_WORK
CLR RE_KEY
;ACALL KEYWAIT_SOTP
LCALL IR_SEL
ACALL KEYWAIT_SOTP
CLR IR_SET_BIT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -