📄 2313_kb.asm
字号:
SCL BIT P3.1 ;I2C CONTROL BUS CLOCK
SDA BIT P3.0 ;I2C CONTROL BUS DATA INPUT
;-------------------------
BITCOUNT EQU 30H
COMMAND EQU 31H
KEYDATA EQU 32H
;TONE_MODE EQU 33H
;CHSEL_MODE EQU 34H
TONE_BASSN EQU 35H
;TONE_MIDN EQU 36H
TONE_TREN EQU 37H
DATABUF EQU 38H
;DATABUF1 EQU 39H
TEMP1 EQU 3AH
TEMP2 EQU 3BH
KEYTIME EQU 3CH
MAIN_VOL EQU 40H
TRIM_FL EQU 41H
TRIM_FR EQU 42H
TRIM_RL EQU 43H
TRIM_RR EQU 44H
TONE_BASS EQU 45H
TONE_TRE EQU 46H
SW_DATA EQU 2AH
FLAG0 EQU 2BH
ACKF EQU 0
KEYONF EQU 1
MUTEF EQU 2
ORG 00H
JMP START
ORG 10H
;--------------------------
;TONE_TABLE
;***************************
BASSTABLE:
DB 60H;-14dB
DB 61H;-12dB
DB 62H;-10dB
DB 63H;-08dB
DB 64H;-06dB
DB 65H;-04dB
DB 66H;-02dB
DB 67H;+00dB
DB 6EH;+02dB
DB 6DH;+04dB
DB 6CH;+06dB
DB 6BH;+08dB
DB 6AH;+10dB
DB 69H;+12dB
DB 68H;+14dB
;****************************
TRETABLE:
DB 070H;-14dB
DB 071H;-12dB
DB 072H;-10dB
DB 073H;-08dB
DB 074H;-06dB
DB 075H;-04dB
DB 076H;-02dB
DB 077H;+00dB
DB 07EH;+02dB
DB 07DH;+04dB
DB 07CH;+06dB
DB 07BH;+08dB
DB 07AH;+10dB
DB 079H;+12dB
DB 078H;+14dB
;***************************
;--------------------------
FLASH MACRO X
SETB X
LCALL DELAY
CLR X
LCALL DELAY
SETB X
LCALL DELAY
CLR X
ENDM
;============================================
;============================================
START:
CALL DELAY300MS
MOV FLAG0,#0
MOV KEYTIME,#0
MOV TONE_BASSN,#7H
MOV TONE_TREN,#7H
MOV MAIN_VOL,#1CH ;MAIN_VOL -35DB
MOV DATABUF,MAIN_VOL
CALL TX_2313_BYTE
MOV TRIM_FL,#80H
MOV DATABUF,TRIM_FL
CALL TX_2313_BYTE
MOV TRIM_FR,#0A0H
MOV DATABUF,TRIM_FR
CALL TX_2313_BYTE
MOV TRIM_RL,#0C0H
MOV DATABUF,TRIM_RL
CALL TX_2313_BYTE
MOV TRIM_RR,#0E0H
MOV DATABUF,TRIM_RR
CALL TX_2313_BYTE
MOV TONE_BASS,#67H
MOV DATABUF,TONE_BASS
CALL TX_2313_BYTE
MOV TONE_TRE,#77H
MOV DATABUF,TONE_TRE
CALL TX_2313_BYTE
MOV SW_DATA,#5CH
MOV DATABUF,SW_DATA
CALL TX_2313_BYTE
LOOP:
CALL KEYSCAN
MOV A,KEYDATA
JNB FLAG0.KEYONF,KEY1
MOV A,KEYTIME
CJNE A,#0AH,LOOP
MOV KEYTIME,#0
MOV A,KEYDATA
JMP KEY6
KEY1:
CJNE A,#22,KEY2
CALL SEL_IN1_FUN
SETB FLAG0.KEYONF
JMP LOOP
KEY2:
CJNE A,#21,KEY3
CALL SEL_IN2_FUN
SETB FLAG0.KEYONF
JMP LOOP
KEY3:
CJNE A,#20,KEY4
CALL SEL_IN3_FUN
SETB FLAG0.KEYONF
JMP LOOP
KEY4:
CJNE A,#10,KEY5
CALL MUTE_FUN
SETB FLAG0.KEYONF
JMP LOOP
KEY5:
CJNE A,#9,KEY6
CALL LOUD_FUN
SETB FLAG0.KEYONF
JMP LOOP
KEY6:
CJNE A,#8,KEY7
CALL MAIN_UP_FUN
SETB FLAG0.KEYONF
JMP LOOP
KEY7:
CJNE A,#7,KEY8
CALL MAIN_DN_FUN
SETB FLAG0.KEYONF
JMP LOOP
KEY8:
CJNE A,#24,KEY9
CALL GAIN_UP_FUN
SETB FLAG0.KEYONF
JMP LOOP
KEY9:
CJNE A,#23,KEY10
CALL GAIN_DN_FUN
SETB FLAG0.KEYONF
JMP LOOP
KEY10:
CJNE A,#14,KEY11
CALL BASS_UP_FUN
SETB FLAG0.KEYONF
JMP LOOP
KEY11:
CJNE A,#13,KEY12
CALL BASS_DN_FUN
SETB FLAG0.KEYONF
JMP LOOP
KEY12:
CJNE A,#4,KEY13
CALL FL_UP_FUN
SETB FLAG0.KEYONF
JMP LOOP
KEY13:
CJNE A,#3,KEY14
CALL FL_DN_FUN
SETB FLAG0.KEYONF
JMP LOOP
KEY14:
CJNE A,#16,KEY15
CALL FR_UP_FUN
SETB FLAG0.KEYONF
JMP LOOP
KEY15:
CJNE A,#15,KEY16
CALL FR_DN_FUN
SETB FLAG0.KEYONF
JMP LOOP
KEY16:
CJNE A,#6,KEY17
CALL RL_UP_FUN
SETB FLAG0.KEYONF
JMP LOOP
KEY17:
CJNE A,#5,KEY18
CALL RL_DN_FUN
SETB FLAG0.KEYONF
JMP LOOP
KEY18:
CJNE A,#2,KEY19
CALL RR_UP_FUN
SETB FLAG0.KEYONF
JMP LOOP
KEY19:
CJNE A,#1,KEY20
CALL RR_DN_FUN
SETB FLAG0.KEYONF
JMP LOOP
KEY20:
CJNE A,#12,KEY21
CALL TRE_UP_FUN
SETB FLAG0.KEYONF
JMP LOOP
KEY21:
CJNE A,#11,KEY_END
CALL TRE_DN_FUN
SETB FLAG0.KEYONF
JMP LOOP
KEY_END:
JMP LOOP
;==========================================
MAIN_UP_FUN:
MOV A,MAIN_VOL
CJNE A,#0,MAIN_UP_1
;MAIN_VOL MAX
RET
MAIN_UP_1:
DEC MAIN_VOL
MAIN_UP_3:
MOV DATABUF,MAIN_VOL
CALL TX_2313_BYTE
RET
;============================================
MAIN_DN_FUN:
MOV A,MAIN_VOL
CJNE A,#03FH,MAIN_DN_1
;MAIN_VOL MIN
RET
MAIN_DN_1:
INC MAIN_VOL
MOV DATABUF,MAIN_VOL
CALL TX_2313_BYTE
RET
;============================================
BASS_UP_FUN:
MOV A,TONE_BASSN
CJNE A,#0EH,TB1
RET
TB1:
INC TONE_BASSN
MOV A,TONE_BASSN
MOV DPTR,#BASSTABLE
MOVC A,@A+DPTR
MOV TONE_BASS,A
MOV DATABUF,A
CALL TX_2313_BYTE
RET
;============================================
BASS_DN_FUN:
MOV A,TONE_BASSN
CJNE A,#0H,TS1
RET
TS1:
DEC TONE_BASSN
MOV A,TONE_BASSN
MOV DPTR,#BASSTABLE
MOVC A,@A+DPTR
MOV TONE_BASS,A
MOV DATABUF,A
CALL TX_2313_BYTE
RET
;============================================
TRE_UP_FUN:
MOV A,TONE_TREN
CJNE A,#0EH,TB3
RET
TB3:
INC TONE_TREN
MOV A,TONE_TREN
MOV DPTR,#TRETABLE
MOVC A,@A+DPTR
MOV TONE_TRE,A
MOV DATABUF,A
CALL TX_2313_BYTE
RET
;============================================
TRE_DN_FUN:
MOV A,TONE_TREN
CJNE A,#0H,TS3
RET
TS3:
DEC TONE_TREN
MOV A,TONE_TREN
MOV DPTR,#TRETABLE
MOVC A,@A+DPTR
MOV TONE_TRE,A
MOV DATABUF,A
CALL TX_2313_BYTE
RET
;============================================
GAIN_UP_FUN:
MOV A,SW_DATA
ANL A,#18H
CJNE A,#0,GN1
RET
GN1:
MOV A,SW_DATA
SUBB A,#8H
MOV SW_DATA,A
MOV DATABUF,A
CALL TX_2313_BYTE
RET
;============================================
GAIN_DN_FUN:
MOV A,SW_DATA
ANL A,#18H
CJNE A,#18H,GN2
RET
GN2:
MOV A,SW_DATA
ADD A,#8H
MOV SW_DATA,A
MOV DATABUF,A
CALL TX_2313_BYTE
RET
;============================================
SEL_IN1_FUN:
ANL SW_DATA,#0FCH
MOV DATABUF,SW_DATA
CALL TX_2313_BYTE
RET
;============================================
SEL_IN2_FUN:
ANL SW_DATA,#0FCH
ORL SW_DATA,#1H
MOV DATABUF,SW_DATA
CALL TX_2313_BYTE
RET
;============================================
SEL_IN3_FUN:
ANL SW_DATA,#0FCH
ORL SW_DATA,#2H
MOV DATABUF,SW_DATA
CALL TX_2313_BYTE
RET
;============================================
LOUD_FUN:
JNB SW_DATA.2,LOUD_OFF
LOUD_ON:
CLR SW_DATA.2
MOV DATABUF,SW_DATA
CALL TX_2313_BYTE
RET
LOUD_OFF:
SETB SW_DATA.2
MOV DATABUF,SW_DATA
CALL TX_2313_BYTE
RET
;============================================
FL_UP_FUN:
MOV A,TRIM_FL
CJNE A,#80H,TR3
RET
TR3:
DEC TRIM_FL
MOV A,TRIM_FL
MOV DATABUF,A
CALL TX_2313_BYTE
RET
;============================================
FL_DN_FUN:
MOV A,TRIM_FL
CJNE A,#9FH,TR4
RET
TR4:
INC TRIM_FL
MOV A,TRIM_FL
MOV DATABUF,A
CALL TX_2313_BYTE
RET
;============================================
FR_UP_FUN:
MOV A,TRIM_FR
CJNE A,#0A0H,TR5
RET
TR5:
DEC TRIM_FR
MOV A,TRIM_FR
MOV DATABUF,A
CALL TX_2313_BYTE
RET
;============================================
FR_DN_FUN:
MOV A,TRIM_FR
CJNE A,#0BFH,TR6
RET
TR6:
INC TRIM_FR
MOV A,TRIM_FR
MOV DATABUF,A
CALL TX_2313_BYTE
RET
;============================================
RL_UP_FUN:
MOV A,TRIM_RL
CJNE A,#0C0H,TR7
RET
TR7:
DEC TRIM_RL
MOV A,TRIM_RL
MOV DATABUF,A
CALL TX_2313_BYTE
RET
;============================================
RL_DN_FUN:
MOV A,TRIM_RL
CJNE A,#0DFH,TR8
RET
TR8:
INC TRIM_RL
MOV A,TRIM_RL
MOV DATABUF,A
CALL TX_2313_BYTE
RET
;============================================
RR_UP_FUN:
MOV A,TRIM_RR
CJNE A,#0E0H,TRA
RET
TRA:
DEC TRIM_RR
MOV A,TRIM_RR
MOV DATABUF,A
CALL TX_2313_BYTE
RET
;============================================
RR_DN_FUN:
MOV A,TRIM_RR
CJNE A,#0FFH,TRB
RET
TRB:
INC TRIM_RR
MOV A,TRIM_RR
MOV DATABUF,A
CALL TX_2313_BYTE
RET
;============================================
MUTE_FUN:
JB FLAG0.MUTEF,MUTE_OFF
MUTE_ON:
SETB FLAG0.MUTEF
CALL I2C_START
MOV COMMAND,#88H
CALL TX_BYTE
CALL ACK_1
JB FLAG0.ACKF,MUTE_ON
MOV COMMAND,#9FH ;FL
CALL TX_BYTE
CALL ACK_1
JB FLAG0.ACKF,MUTE_ON
MOV COMMAND,#0BFH ;FR
CALL TX_BYTE
CALL ACK_1
JB FLAG0.ACKF,MUTE_ON
MOV COMMAND,#0DFH ;RL
CALL TX_BYTE
CALL ACK_1
JB FLAG0.ACKF,MUTE_ON
MOV COMMAND,#0FFH ;RR
CALL TX_BYTE
CALL ACK_1
JB FLAG0.ACKF,MUTE_ON
CALL I2C_STOP
RET
MUTE_OFF:
CLR FLAG0.MUTEF
CALL I2C_START
MOV COMMAND,#88H
CALL TX_BYTE
CALL ACK_1
JB FLAG0.ACKF,MUTE_OFF
MOV COMMAND,TRIM_FL
CALL TX_BYTE
CALL ACK_1
JB FLAG0.ACKF,MUTE_OFF
MOV COMMAND,TRIM_FR
CALL TX_BYTE
CALL ACK_1
JB FLAG0.ACKF,MUTE_OFF
MOV COMMAND,TRIM_RL
CALL TX_BYTE
CALL ACK_1
JB FLAG0.ACKF,MUTE_OFF
MOV COMMAND,TRIM_RR
CALL TX_BYTE
CALL ACK_1
JB FLAG0.ACKF,MUTE_OFF
CALL I2C_STOP
RET
;============================================
;--------------------------
KEYSCAN:
INC KEYTIME
MOV KEYDATA,#0
MOV A,#11110111B
KLOOP:
MOV P3,A
K11:
INC KEYDATA
JB P1.7,K12
CALL BOUNCE
JNB P1.7,KSEND
K12:
INC KEYDATA
JB P1.6,K13
CALL BOUNCE
JNB P1.6,KSEND
K13:
INC KEYDATA
JB P1.5,K14
CALL BOUNCE
JNB P1.5,KSEND
K14:
INC KEYDATA
JB P1.4,K15
CALL BOUNCE
JNB P1.4,KSEND
K15:
INC KEYDATA
JB P1.3,K16
CALL BOUNCE
JNB P1.3,KSEND
K16:
INC KEYDATA
JB P1.2,K17
CALL BOUNCE
JNB P1.2,KSEND
K17:
INC KEYDATA
JB P1.1,K18
CALL BOUNCE
JNB P1.1,KSEND
K18:
INC KEYDATA
JB P1.0,K19
CALL BOUNCE
JNB P1.0,KSEND
K19:
RL A
MOV R1,KEYDATA
CJNE R1,#24,KLOOP ;3LINE*8KEY
MOV KEYDATA,#0
CLR FLAG0.KEYONF
MOV KEYTIME,#0
KSEND:
RET
BOUNCE: ;20ms
MOV TEMP1,#14H
BB0:
MOV TEMP2,#0FAH
BB1:
NOP
NOP
DJNZ TEMP2,BB1
DJNZ TEMP1,BB0
RET
;----------------------
I2C_START:
SETB SCL
SETB SDA
NOP
NOP
NOP
NOP
CLR SDA
NOP
NOP
NOP
NOP
CLR SCL
RET
;----------------------
I2C_STOP:
CLR SCL
CLR SDA
NOP
NOP
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
SETB SDA
RET
;-----------------------
ACK_1:
SETB SDA
SETB SCL
CLR FLAG0.ACKF
NOP
NOP
NOP
NOP
JNB SDA,ACK_2
SETB FLAG0.ACKF
ACK_2:
CLR SCL
RET
;-----------------------
TX_BYTE:
MOV BITCOUNT,#8H
MOV A,COMMAND
TX_BIT:
CLR SCL
RLC A
MOV SDA,C
NOP
NOP
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
CLR SCL
DJNZ BITCOUNT,TX_BIT
RET
;--------------------------
TX_2313_BYTE:
CALL I2C_START
MOV COMMAND,#88H
CALL TX_BYTE
CALL ACK_1
JB FLAG0.ACKF,TX_2313_BYTE
MOV A,DATABUF
MOV COMMAND,A
CALL TX_BYTE
CALL ACK_1
JB FLAG0.ACKF,TX_2313_BYTE
CALL I2C_STOP
RET
;--------------------------
DELAY:
MOV TEMP1,#60H
DD0:
MOV TEMP2,#0FFH
DD1:
NOP
NOP
DJNZ TEMP2,DD1
DJNZ TEMP1,DD0
RET
;****************************************
DELAY300MS: ;DELAY 300MS FOR PT2322 POWER ON WAITING
MOV R2,#01H ;CYCLE TIMES=150+1 #98H
MOV R3,#01H ;CYCLE TIMES=250 #0F9H
LOOP3:
NOP ;DELAY 2MS WITH F=12MHz
NOP
NOP
NOP
NOP
NOP
DJNZ R3,LOOP3
DJNZ R2,LOOP3
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -