⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2313_kb.asm

📁 PT2313控制程序
💻 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 + -