📄 11.asm
字号:
JNB P3.0,CON_INC
NOP
NOP
AJMP LOOP
CON_INC_REM: ACALL VOLINC2
JNB F0,N68 ;FO为1表示音量调整超范围
AJMP LOOP
N68: ACALL AA ;连发码判断程序段
JB BIT_REM,CON_INC_REM ;BIT_REM为1表示有连发码
NOP
NOP
AJMP LOOP
;====================================================================================
;音量连续减
CON_DEC: ACALL VOLDEC1
JNB F0,N69 ;FO为1表示音量调整超范围
AJMP LOOP
N69:
JNB P3.0,CON_DEC
NOP
NOP
AJMP LOOP
CON_DEC_REM: ACALL VOLDEC1
JNB F0,N71;FO为1表示音量调整超范围
AJMP LOOP
N71: ACALL AA ;连发码判断程序段
JB BIT_REM,CON_DEC_REM ;BIT_REM为1表示有连发码
NOP
NOP
AJMP LOOP
JIYI:
MOV A,#IN_ADD
MOV B,INPUT
LCALL WT24
RET
;////////////////////////////////
IN_SW: MOV A,#0C0H
ACALL IWRBYTE
MOV A,#0E0H
ACALL IWRBYTE
MOV A,INPUT
CJNE A,#0,CD_2
RET
CD_2:
MOV A,INPUT
CJNE A,#1,DVD_2
CD_1:
CLR P_KEY
MOV INPUT,#1
JB MUTE_KEY,OUT_EXT1
CLR POWER_LED
LCALL IN_DIS2
;MOV A,#54H
;MOV SLA,#PT2314
; ACALL IWRBYTE
; ACALL JIYI
OUT_EXT1:
AJMP LOOP
DVD_2:
MOV A,INPUT
CJNE A,#2,AUX_2
DVD_1: CLR P_KEY
MOV INPUT,#2
JB MUTE_KEY,OUT_EXT
CLR POWER_LED
MOV A,#55H
MOV SLA,#PT2314
ACALL IWRBYTE
ACALL JIYI
AJMP LOOP
AUX_2:
MOV A,INPUT
AUX_1: CLR P_KEY
MOV INPUT,#3
JB MUTE_KEY,OUT_EXT
MOV A,#56H
MOV SLA,#PT2314
ACALL IWRBYTE
ACALL JIYI
AJMP LOOP
USB:
AJMP LOOP
SD:
AJMP LOOP
RESET_SY:
AJMP LOOP
LOUDON:
AJMP LOOP
LOUDOFF:
AJMP LOOP
NEXT:
AJMP LOOP
PREV:
AJMP LOOP
MODE1:
AJMP LOOP
MODE2:
AJMP LOOP
FEN_ADJ:
AJMP LOOP
MIAO_ADJ:
AJMP LOOP
XIAOSHI_ADJ:
AJMP LOOP
N_ADJ:
AJMP LOOP
Y_ADJ:
AJMP LOOP
R_ADJ:
AJMP LOOP
OUT_EXT:
AJMP LOOP
AJMP LOOP
STDBAY:
SETB P_KEY
LCALL DELAY
LCALL DELAY
JB P_CNT,P_EXT
SETB POWER_LED
SETB P_CNT
AJMP LOOP
P_EXT:
CLR POWER_LED
CLR P_CNT
B_OUT:
AJMP LOOP
ELAY100MS: MOV R7,#100
DELAY3: MOV R6,#83
D4: MOV R5,#5
DJNZ R5,$
DJNZ R6,D4
DJNZ R7,DELAY3
NOP
NOP
RET
DELAY1MS:
RET
A2MS: MOV R7,#100
A2MS1: MOV R6,#10
DJNZ R6,$
DJNZ R7,A2MS1
NOP
NOP
RET
;====================================================================================
VOLINC: JB P_KEY,V_EXT1
CLR MUTE_KEY
MOV A,VOL
INC A
VOL12: CJNE A,#63,N16
N16: JC N33
V_D_RET: SETB F0 ;建立音量调整超范围标示
SJMP VOL_RET
N33: MOV VOL,A
MOV DPTR,#TAB_VOL
MOVC A,@A+DPTR
MOV SLA,#PT2314
ACALL IWRBYTE ;无子地址器件写字节数据
MOV A,VOL
MOV VOLREG,VOL
; ACALL DISP
CLR F0 ;建立音量调整没有超范围标示
VOL_RET: NOP
NOP
V_EXT1:
ajmp loop
;====================================================================================
VOLDEC: JB P_KEY,V_EXT1
CLR MUTE_KEY
MOV A,VOL
DEC A
CJNE A,#63,N17
N17: JC N33
NOP
NOP
AJMP V_D_RET
;/////////////////////////////////////////
VOLINC2:
MOV A,VOL
INC A
VOL121: CJNE A,#63,N161
N161: JC N331
V_D_RET1: SETB F0 ;建立音量调整超范围标示
SJMP VOL_RET1
N331: MOV VOL,A
MOV DPTR,#TAB_VOL
MOVC A,@A+DPTR
MOV SLA,#PT2314
ACALL IWRBYTE ;无子地址器件写字节数据
MOV A,VOL
MOV VOLREG,VOL
; ACALL DISP
CLR F0 ;建立音量调整没有超范围标示
VOL_RET1: NOP
NOP
RET
;====================================================================================
VOLDEC1:
MOV A,VOL
DEC A
CJNE A,#63,N171
N171: JC N331
NOP
NOP
AJMP V_D_RET1
TREB_PT:
MOV TREB_BUFF,A
MOV DPTR,#TAB_TREB
MOVC A,@A+DPTR
MOV SLA,#PT2314
ACALL IWRBYTE
RET
BASS_PT:
MOV BASS_BUFF,A
MOV DPTR,#TAB_BASS
MOVC A,@A+DPTR
MOV SLA,#PT2314
ACALL IWRBYTE
RET
wr_ptvol:
MUTE_BACK: MOV VOL,#40
MOV A,VOL
MOV DPTR,#TAB_VOL
MOVC A,@A+DPTR
MOV SLA,#PT2314
lCALL IWRBYTE
MOV VOLREG,VOL ;无子地址器件写字节数据
RETLOOP: NOP
NOP
ret
;///////////////////////////
;================================================================================
; 静音处理程序
;====================================================================================
MUTE: JB POWER_LED,MUTE1
CPL MUTE_KEY
CLR POWER_LED
MUTE1:
AJMP LOOP
;////////////////////////////////
START: SETB SDA
NOP
SETB SCL ;起始条件建立时间大于4.7us
NOP
NOP
NOP
NOP
NOP
CLR SDA
NOP ;起始条件锁定时大于4us
NOP
NOP
NOP
NOP
CLR SCL ;钳住总线,准备发数据
NOP
RET
;--------------------------------------------------------------------------------------------------------
;结束总线子程序
STOP: CLR SDA
NOP
SETB SCL ;发送结束条件的时钟信号
NOP ;结束总线时间大于4us
NOP
NOP
NOP
NOP
SETB SDA ;结束总线
NOP ;保证一个终止信号和起始信号的空闲时间大于4.7us
NOP
NOP
NOP
RET
;--------------------------------------------------------------------------------------------------------
;发送应答信号子程序
MACK: CLR SDA ;将SDA置0
NOP
NOP
SETB SCL
NOP ;保持数据时间,即SCL为高时间大于4.7us
NOP
NOP
NOP
NOP
CLR SCL
NOP
NOP
RET
;--------------------------------------------------------------------------------------------------------
;发送非应答信号
MNACK: SETB SDA ;将SDA置1
NOP
NOP
SETB SCL
NOP
NOP ;保持数据时间,即SCL为高时间大于4.7us
NOP
NOP
NOP
CLR SCL
NOP
NOP
RET
;--------------------------------------------------------------------------------------------------------
; 检查应答位子程序
; 返回值,ACK=1时表示有应答
CACK: SETB SDA
NOP
NOP
SETB SCL
CLR ACK
NOP
NOP
MOV C,SDA
JC CEND
SETB ACK ;判断应答位
CEND: NOP
CLR SCL
NOP
RET
;////////////////////////////////////////////////
;--------------------------------------------------------------------------------------------------------
;发送字节子程序
;字节数据放入ACC
;每发送一字节要调用一次CACK子程序,取应答位
WRBYTE: MOV R2,#08H
WLP: RLC A ;取数据位
JC WR1
SJMP WRO ;判断数据位
WLP1: DJNZ R2,WLP
NOP
RET
WR1: SETB SDA ;发送1
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
SJMP WLP1
WRO: CLR SDA ;发送0
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
SJMP WLP1
;--------------------------------------------------------------------------------------------------------
; 无子地址器件写字节数据
; 入口参数: 数据为ACC、器件从地址SLA
; 占用: A、R2、CY
IWRBYTE: NOP
NOP
PUSH ACC
IWBLOOP: ACALL START ;起动总线
MOV A,SLA
ACALL WRBYTE ;发送器件从地址
ACALL CACK
JNB ACK,RETWRB ;无应答则跳转
NOP
NOP
POP ACC ;写数据
LCALL WRBYTE
LCALL CACK
LCALL STOP
RET
RETWRB: POP ACC
LCALL STOP
NOP
NOP
RET
;///////////////////////AT24C02
ASKWAT: LCALL DELAY
SETB SDAAT ;释放SDA_P总线
LCALL DELAY
SETB SCLAT
WAITASKW: MOV C,SDAAT
;; JC WAITASKW
LCALL DELAY
CLR SCLAT
SETB SDAAT
RET
;**********************************
;MCU作为从器件不应答
NOASK: SETB SDAAT
NOP
NOP
NOP
SETB SCLAT
LCALL DELAY
CLR SCLAT
LCALL DELAY
RET
;-----------------------------------
;启动信号
STARTAT: SETB SCLAT
SETB SDAAT
LCALL DELAY
CLR SDAAT
LCALL DELAY
CLR SCLAT
RET
;---------------------------
;停止信号
STOPAT: CLR SCLAT
LCALL DELAY
CLR SDAAT
LCALL DELAY
SETB SCLAT
LCALL DELAY
SETB SDAAT
LCALL DELAY
RET
CACK2AT: SETB SDAAT
NOP
NOP
SETB SCLAT
CLR ACK
NOP
NOP
MOV C,SDAAT
JC CEND2AT
SETB ACK ;判断应答位
CEND2AT: NOP
CLR SCLAT
NOP
RET
RD24: PUSH ACC
CALL STARTAT
MOV A,#0A0H
CALL SENDDATE
CALL ASKWAT
POP ACC
CALL SENDDATE
CALL ASKWAT
CALL STARTAT
MOV A,#0A1H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -