weiqiac 发表于 2014-11-14 21:51

TDA7313音频芯片控制(开源)

本帖最后由 weiqiac 于 2014-11-15 11:01 编辑

又一次开源

weiqiac 发表于 2014-11-14 21:54

;///////////////////////////////////////////
;///////////////////////////////////////////
;;;;这个是单片机控制TDA7313程序。
;///////////////////////////////////////////
;本程序由韦奇制作。2013-06-24,晶振:11.0592M,
;单片机:STC11F08XE或者STC10F08XE
;///////////////////////////////////////////
;201306111533_V1.1固件
;1:在原有功能基础上更新了静音LED指示(开机旋钮编码器照明LED常亮当按下静音

;键后,照明LED以0.5秒闪烁,表示进入静音状态,再按静音键退出静音状态,照明

;LED长亮)。
;2:改进了功放静音控制脚控制时间(开机延时启动继电器,防止功放板通电时冲击

;喇叭)。进入静音功能,断开功放板与喇叭连接,实现双静音(TDA7313静音和功放

;板静音)
;3:新增主动风扇功能(当音量值大于等于23时,风扇运转,当音量值小于等于19,风扇停止

;运转)。
;///////////////////////////////////////////
;///////////////////////////////////////////
         SS BIT P0.5
         VV BIT P0.6
         RS bit P0.3                                         ;                       
         RW bit P0.2                                         ;
         Ebit P0.1                                        ;
         SJ EQU P1
       dvd_led bit p2.5
   cd_led bit p3.6
    mp3_led bit p3.1
   REMOTE BIT P3.2
port1_port2 bit P2.3
   PORT3_VS BIT P2.2
         P4 EQU 0C0H
       P4SW EQU 0BBH;;;将P4设置成功普通IO口
    I2C_SCL BIT P3.4
I2C_SDATA BIT P3.5
   MUTE_KEY BIT P4.1
   VOL_UP BIT P0.4
   VOL_DOWN BIT P0.7
REMOTE_SET_KEY BIT P2.1
DVD_INPUT BIT P2.4
   CD_INPUT BIT P3.7
   PC_INPUT BIT P3.0
           LED_4 bit P4.4
                VOL_LED BIT P4.5
       P4M1 EQU 0B3H
       P4M0 EQU 0B4H
          P2M1 EQU 95H
          P2M0 EQU 96H
;;;;;;;;;;;;;;
IAP_DATA EQU 0C2H
IAP_ADDRH EQU 0C3H
IAP_ADDRL EQU 0C4H
IAP_CMD EQU0C5H
IAP_TRIG EQU 0C6H
IAP_CONTR EQU 0C7H
;;;;;;;;;;;;;;
ISP_IAP_BYTE_READ EQU 1
ISP_IAP_BYTE_PROGRM EQU 2
ISP_IAP_SECTOR_ERASE EQU 3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
STORED_DIRECT EQU 42H
I2C_STRING_DATA EQU 53H
LCD_BIJIAO EQU 55H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
VOL_UP_RAM EQU 55H
VOL_DOWN_RAM EQU 56H
TREBLE_UP_RAM EQU 57H
TREBLE_DOWN_RAM EQU 58H
BASS_UP_RAM EQU 59H
BASS_DOWN_RAM EQU 5AH
SURROUND_UP_RAM EQU 5BH
SURROUND_DOWN_RAM EQU 5CH
I2C_VOL_RAM EQU 5DH
I2C_BASS_RAM EQU 5EH
I2C_TRE_RAM EQU 5FH
I2C_INPUT_RAM EQU 60H
                                                ;数据线
        ORG        0000H
        AJMP START
ORG 0003H
LJMP INT_1
ORG 000BH
LJMP TIMER_0
ORG 001BH
LJMP TIMER_1
        ORG0100H
START:
LCALL DELAY2
MOV P4SW,#0FFH
MOV SP,#7FH
MOV 43H,#00H
MOV 3EH,#00H
MOV 3FH,#00H
MOV 40H,#00H
MOV 6EH,#05H
SETB F0
JB REMOTE_SET_KEY,MAIN
LCALL DELAY2
LCALL DELAY2
LCALL DELAY2
LCALL DELAY2
LCALL LCD_DISP_SETUP
LCALL DELAY2
JNB REMOTE_SET_KEY,$
SETB EX0
LCALL DELAY2
JnB REMOTE_SET_KEY,$
START2:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCALL DELAY2
MOV 43H,#0FFH
JB REMOTE_SET_KEY,$;;按下Remote_set键,删除EEPROM音量,低音,高音,音源,遥控器键码数据.
LCALL LCD_DELETREE_DIPALY
LCALL DELAY4_s
LCALL ALL_DELETREE
LCALL DELAY4_s
LCALL LCD_DELETREE_END
LCALL DELAY4_s
LCALL DELAY4_s
LCALL DELAY4_s
LCALL DELAY4_s
LCALL LCD_DISPLAY_SETUP
LCALL DELAY4_s
JNB REMOTE_SET_KEY,$
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCALL KEY_SETTING;;;调用设定遥控器键码程序
LCALL DELAY4_s
MOV IAP_CONTR,#60H;;学习完遥控器键码,重启单片机
LCALL DELAY2
KKDD:
LJMP START2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN:
mov P4M1,#00H
MOV P4M0,#00100000B
mov P2M1,#00H
MOV P2M0,#00001100B
CLR P2.2
CLR P2.3
FF4:
LCALL DELAY1
LCALL DELAY1
SETB VOL_LED
CLR 20H.1
CLR 20H.0
clr 20h.3
CLR 2AH.1
LCALL EEPROM_STATE
MOV 43H,#00H
MOV SJ,#01H;清除屏幕
ACALL ENABLE
MOV SJ,#38H;8位点阵
ACALL ENABLE
MOV SJ,#0CH;开显示
ACALL ENABLE
MOV SJ,#06H;移动光标
ACALL ENABLE
MOV SJ,#80H;显示位置
ACALL ENABLE
l3:mov SJ,#01h
acall enable
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov dptr,#table1;送第一句话
call write1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV SJ,#0C0H;写入显示起始地址(第二行第一个位置)
ACALL ENABLE;调用写入命令子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov dptr,#table2;送第一句话
call write1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCALL REMOTE_RAM;;;;;;;;;;;;;将EEPROM中的遥控器码放入30H------3DH中。
LCALL DELAY4_s
LCALL MAIN_START
lcall TIMER0INIT
LCALL TDA7313
SETB EX0
SETB EA
LCALL DELAY4_s
LCALL DELAY4_s
LCALL DELAY4_s
LCALL DELAY4_s
LCALL DELAY4_s
LCALL DELAY4_s
setb PORT3_VS
;;;;;;;;;;;;;;;;;;;;;
REST_ISP_PRO:
LCALL KEY_SCAN
LCALL BIANMA
JB REMOTE_SET_KEY,KK
MOV IAP_CONTR,#60H
LCALL DELAY2
KK:Ljmp REST_ISP_PRO
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;新增;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIMER0INIT:                        ;60毫秒@11.0592MHz
        ;ANL AUXR,#7FH                ;定时器时钟12T模式
        ANL TMOD,#11H                ;设置定时器模式
        ORL TMOD,#11H                ;设置定时器模式
        MOV TL0,#00H                ;设置定时初值
        MOV TH0,#00H                ;设置定时初值
   MOV TL1,#00H                ;设置定时初值
        MOV TH1,#00H
                CLR TF1
        CLR TF0        ;清除TF0标志
        SETB ET0
        SETB ET1
        ;SETB TR0                ;定时器0开始计时
        RET
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIMER_0:
MOV TL0,#00H                ;设置定时初值
        MOV TH0,#00H                ;设置定时初值       
CLR TF0
CLR TR0
JNB 20H.1,JJK
lcall VOL_DOWN_KEY
JJK:
JNB 20H.0,JJK_2
LCALL VOL_UP_KEY
JJK_2:
CLR 20H.1
CLR 20H.0
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BIANMA:;;;;BIANMA和RUTRN_2旋钮编码器方向识别程序
JB SS,RETURN
lcall DELAY2400
JB VV,RUTRN_2
lcall DELAY2400
JnB ss,RUTRN_2
SETB TR0
setb 20h.1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RUTRN_2:
JnB vv,RETURN
lcall DELAY2400
JnB ss,RETURN
lcall DELAY2400
JnB vv,RETURN
SETB TR0
setb 20h.0
RETURN:
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIMER_1:
PUSH ACC
MOV TL1,#00H                ;设置定时初值
MOV TH1,#00H
CLR TR1
DJNZ 6EH,VVBNT
CPL VOL_LED
MOV 6EH,#05H
VVBNT:
SETB TR1
NOP
POP ACC
RETI


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY_SETTING:
KEY1:
MOV IAP_ADDRH,#12H;;;单片机第十扇区用于储存遥控器键值!
LCALL BYTE_DELETREE
LCALL PC_INPUT_SET
LCALL DELAY4_s
LCALL DELAY4_s
LCALL DELAY4_s
LCALL CD_INPUT_SET
LCALL DELAY4_s
LCALL DELAY4_s
LCALL DELAY4_s
LCALL DVD_INPUT_SET
LCALL DELAY4_s
LCALL DELAY4_s
LCALL DELAY4_s
LCALL VOL_UP_SET
LCALL DELAY4_s
LCALL DELAY4_s
LCALL DELAY4_s
LCALL VOL_DOWN_SET
LCALL DELAY4_s
LCALL DELAY4_s
LCALL DELAY4_s
LCALL MUTE_SET
LCALL DELAY4_s
LCALL DELAY4_s
LCALL DELAY4_s
LCALL TREBLE_UP_SET
LCALL DELAY4_s
LCALL DELAY4_s
LCALL DELAY4_s
LCALL TREBLE_DOWN_SET
LCALL DELAY4_s
LCALL DELAY4_s
LCALL DELAY4_s
LCALL BASS_UP_SET
LCALL DELAY4_s
LCALL DELAY4_s
LCALL DELAY4_s
LCALL BASS_DOWN_SET
LCALL DELAY4_s
LCALL DELAY4_s
LCALL DELAY4_s
LCALL LCD_LIGHT_SET
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ALL_DELETREE:
MOV R2,#64
MOV 44H,#00H
DELETREE_ALL_REC:
MOV IAP_ADDRH,44H
LCALL BYTE_DELETREE
MOV A,44H
ADD A,#2
MOV 44H,A
DJNZ R2,DELETREE_ALL_REC
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BYTE_READ:;;;;;;;;读出EEPROM数据
ORL IAP_CONTR,#10000000B
MOV IAP_CMD,#ISP_IAP_BYTE_READ
MOV IAP_TRIG,#5AH
MOV IAP_TRIG,#0A5H
NOP
MOV A,IAP_DATA
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BYTE_DELETREE:;;;;;;擦除整个扇区
MOV IAP_ADDRL,#00H
ORL IAP_CONTR,#10000000B
MOV IAP_CMD,#ISP_IAP_SECTOR_ERASE
MOV IAP_TRIG,#5AH
MOV IAP_TRIG,#0A5H
NOP
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BYTE_PROGRAM:;;;;;;;;字节编程!!!!!!
MOV IAP_DATA,STORED_DIRECT
ORL IAP_CONTR,#10000000B
MOV IAP_CMD,#ISP_IAP_BYTE_PROGRM
MOV IAP_TRIG,#5AH
MOV IAP_TRIG,#0A5H
NOP
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCD_DISP_SETUP:
MOV SJ,#01H;清除屏幕
ACALL ENABLE
MOV SJ,#38H;8位点阵
ACALL ENABLE
MOV SJ,#0CH;开显示
ACALL ENABLE
MOV SJ,#06H;移动光标
ACALL ENABLE
MOV SJ,#80H;显示位置
ACALL ENABLE
mov SJ,#01h
acall enable
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov dptr,#table3;送第一句话
call write1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV SJ,#0C0H;写入显示起始地址(第二行第一个位置)
ACALL ENABLE;调用写入命令子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov dptr,#table4;送第一句话
call write1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;解码程序
INT_1:
push acc
clr ea;

IR:
MOV R5,#10
IR_SB:
lCALL DELAY882 ;调用882微秒延时子程序
JB REMOTE,IR_ERROR ;延时882微秒后判断P3.4脚是否出现高电平如果有就退出解码程序
DJNZ R5,IR_SB ;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
JNB REMOTE, $ ;等待高电平避开9毫秒低电平引导脉冲
lCALL DELAY2400 ;这里为低电平,认为是连发码信号
lCALL DELAY2400 ;延时4.74毫秒避开4.5毫秒的结果码
;以下32数据码的读取,0和1的识别
MOV R1,#3EH ;设定1AH为起始RAM区
MOV R4,#4
IR_4BYTE:
MOV R3,#8
IR_8BIT:
JNB REMOTE,$ ;等待地址码第一位的高电平信号
LCALL DELAY882 ;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
MOV C,REMOTE ;将P3.3引脚此时的电平状态0或1存入C中
JNC IR_8BIT_0 ;如果为0就跳转到IR_8BIT_0
LCALL DELAY1000
IR_8BIT_0:
MOV A,@R1 ;将R1中地址的给A
RRC A ;将C中的值0或1移入A中的最低位
MOV @R1,A ;将A中的数暂时存放在R1中
DJNZ R3,IR_8BIT ;接收地址码的高8位
INC R1 ;对R1中的值加1,换下一个RAM
DJNZ R4,IR_4BYTE ;接收完16位地址码和8位数据码和8位数据,
;存放在1AH/1BH/1CH/1DH的RAM中
;MOV A,3EH
;CPL A
SETB F0
;CJNE A,3eh,IR_ERROR ;用户码
MOV A,40H
CPL A

CJNE A,41H,IR_ERROR ;用户码1不对则退出02是我遥控用户码
CLR LED_4
CLR F0
MOV A,43H
JNZ IR_ERROR
LCALL LLOP
IR_ERROR:setb ea
pop acc
setb LED_4
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LLOP:
MOV A,40H
CJNE A,31H,IR_ERROR_1
LCALL PC_INPUT_KEY
lcall I2C_IN_INPUT_4;
IR_ERROR_1:
MOV A,40H
CJNE A,32H,IR_ERROR_2
LCALL CD_INPUT_KEY
lcall I2C_IN_INPUT_4;?
IR_ERROR_2:
MOV A,40H
CJNE A,33H,IR_ERROR_3
LCALL DVD_INPUT_KEY
lcall I2C_IN_INPUT_4;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
IR_ERROR_3:
MOV A,40H
CJNE A,35H,IR_ERROR_5
LCALL TREBLE_UP_KEY
IR_ERROR_5:
MOV A,40H
CJNE A,36H,IR_ERROR_6
LCALL TREBLE_DOWN_KEY
IR_ERROR_6:
MOV A,40H
CJNE A,37H,IR_ERROR_7
CLR LED_4
IR_ERROR_7:
MOV A,40H
CJNE A,38H,IR_ERROR_8
CLR LED_4
IR_ERROR_8:
MOV A,40H
CJNE A,39H,IR_ERROR_9
LCALL BASS_UP_KEY
IR_ERROR_9:
MOV A,40H
CJNE A,3AH,IR_ERROR_10
LCALL BASS_DOWN_KEY
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
IR_ERROR_10:mov a,40H
CJNE A,3BH,IR_ERROR_11
LCALL VOL_UP_KEY
;;;;;;;;;;;;;;;;;;
IR_ERROR_11:mov a,40H
CJNE A,3CH,IR_ERROR_12
LCALL VOL_DOWN_KEY
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
IR_ERROR_12:mov a,40H
CJNE A,3DH,IR_ERROR_13
CLR LED_4
LCALL DELAY4_S
cpl port1_port2
IR_ERROR_13:mov a,40H
CJNE A,34H,IR_ERROR_14
LCALL MUTE
IR_ERROR_14:NOP
RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;以下是遥控解码程序要用的延时程序!!
DELAY882:;;;0.09*(6XY+5X)=801_uS
MOV R7,#9;x
LOOP1:MOV R6,#165;y155
LOOP2:NOP
NOP
DJNZ R6,LOOP2
DJNZ R7,LOOP1
RET
DELAY2400:MOV R7,#50;x
LOOP3:MOV R6,#88;y
LOOP4:NOP
NOP
DJNZ R6,LOOP4
DJNZ R7,LOOP3
RET
DELAY1000:MOV R7,#30;x
LOOP5:MOV R6,#61;y
LOOP6:NOP
NOP
DJNZ R6,LOOP6
DJNZ R7,LOOP5
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;遥控延时程序结束!
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ENABLE:;送命令
CLR RS
CLR RW
CLR E
LCALL DELAY
SETB E
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
write1:;送字符串
mov r1,#00h
a1:mov a,r1
movc a,@a+dptr
call write2
inc r1
cjne a,#00h,a1;以00H做字符串结束标志
ret
write2:;送单个字符
mov SJ,a
setb rs
clr rw
clr e
Lcall delay
setb e
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
delay:;延时子程序
mov r7,#100
d1:mov r6,#100
d2:djnz r6,d2
djnz r7,d1
ret
;;;;;;;;;;;;;;;;;;;;;
delay1:
mov r7,#90
delay2:mov r6,#90
LOOP7:NOP
NOP
djnz r6,LOOP7
djnz r7,delay2
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PC_INPUT_SET :
MOV SJ,#0C0H;写入显示起始地址(第二行第一个位置)
LCALL ENABLE;调用写入命令子程序
mov dptr,#table8;送第一句话
Lcall write1
LCALL REMOTE_OK_COMMAND
;;;;;;;;;;;;;;;;;;;;
MOV STORED_DIRECT,3EH
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#00H
LCALL BYTE_PROGRAM
MOV STORED_DIRECT,40H
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#01H
LCALL BYTE_PROGRAM
RET
CD_INPUT_SET :
MOV SJ,#0C0H;写入显示起始地址(第二行第一个位置)
ACALL ENABLE;调用写入命令子程序
mov dptr,#table9;送第一句话
Lcall write1

LCALL REMOTE_OK_COMMAND
;;;;;;;;;;;;;;;;;;;;
MOV STORED_DIRECT,3EH
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#02H
LCALL BYTE_PROGRAM
MOV STORED_DIRECT,40H
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#03H
LCALL BYTE_PROGRAM
RET
DVD_INPUT_SET:
MOV SJ,#0C0H;写入显示起始地址(第二行第一个位置)
ACALL ENABLE;调用写入命令子程序
mov dptr,#table10;送第一句话
Lcall write1
LCALL REMOTE_OK_COMMAND
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV STORED_DIRECT,3EH
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#04H
LCALL BYTE_PROGRAM
MOV STORED_DIRECT,40H
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#05H
LCALL BYTE_PROGRAM
RET
MUTE_SET:
MOV SJ,#0C0H;写入显示起始地址(第二行第一个位置)
LCALL ENABLE;调用写入命令子程序
mov dptr,#table11;送第一句话
call write1
LCALL REMOTE_OK_COMMAND
MOV STORED_DIRECT,3EH
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#06H
LCALL BYTE_PROGRAM
MOV STORED_DIRECT,40H
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#07H
LCALL BYTE_PROGRAM
RET
TREBLE_UP_SET :
MOV SJ,#0C0H;写入显示起始地址(第二行第一个位置)
LCALL ENABLE;调用写入命令子程序
mov dptr,#table12;送第一句话
call write1
LCALL REMOTE_OK_COMMAND
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV STORED_DIRECT,3EH
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#08H
LCALL BYTE_PROGRAM
MOV STORED_DIRECT,40H
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#09H
LCALL BYTE_PROGRAM
RET
TREBLE_DOWN_SET:
MOV SJ,#0C0H;写入显示起始地址(第二行第一个位置)
LCALL ENABLE;调用写入命令子程序
mov dptr,#table13;送第一句话
call write1
LCALL REMOTE_OK_COMMAND
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV STORED_DIRECT,3EH
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#0AH
LCALL BYTE_PROGRAM
MOV STORED_DIRECT,40H
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#0BH
LCALL BYTE_PROGRAM
RET
SURROUND_UP_SET:
MOV SJ,#0C0H;写入显示起始地址(第二行第一个位置)
LCALL ENABLE;调用写入命令子程序
mov dptr,#table14;送第一句话
call write1
LCALL REMOTE_OK_COMMAND
MOV STORED_DIRECT,3EH
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#0CH
LCALL BYTE_PROGRAM
MOV STORED_DIRECT,40H
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#0DH
LCALL BYTE_PROGRAM
RET
SURROUND_DOWN_SET:
MOV SJ,#0C0H;写入显示起始地址(第二行第一个位置)
LCALL ENABLE;调用写入命令子程序
mov dptr,#table15;送第一句话
Lcall write1
LCALL REMOTE_OK_COMMAND
MOV STORED_DIRECT,3EH
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#0EH
LCALL BYTE_PROGRAM
MOV STORED_DIRECT,40H
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#0FH
LCALL BYTE_PROGRAM
RET
BASS_UP_SET:
MOV SJ,#0C0H;写入显示起始地址(第二行第一个位置)
LCALL ENABLE;调用写入命令子程序
mov dptr,#table16;送第一句话
Lcall write1
LCALL REMOTE_OK_COMMAND
MOV STORED_DIRECT,3EH
MOV IAP_ADDRH,#13H
MOV IAP_ADDRL,#00H
LCALL BYTE_PROGRAM
MOV STORED_DIRECT,40H
MOV IAP_ADDRH,#13H
MOV IAP_ADDRL,#01H
LCALL BYTE_PROGRAM
RET
BASS_DOWN_SET:
MOV SJ,#0C0H;写入显示起始地址(第二行第一个位置)
LCALL ENABLE;调用写入命令子程序
mov dptr,#table17;送第一句话
Lcall write1
LCALL REMOTE_OK_COMMAND
MOV STORED_DIRECT,3EH
MOV IAP_ADDRH,#13H
MOV IAP_ADDRL,#02H
LCALL BYTE_PROGRAM
MOV STORED_DIRECT,40H
MOV IAP_ADDRH,#13H
MOV IAP_ADDRL,#03H
LCALL BYTE_PROGRAM
RET
VOL_UP_SET:
MOV SJ,#0C0H;写入显示起始地址(第二行第一个位置)地址(第二行第一个位置)
LCALL ENABLE;调用写入命令子程序
mov dptr,#table18;送第一句话
call write1
LCALL REMOTE_OK_COMMAND
MOV STORED_DIRECT,3EH
MOV IAP_ADDRH,#13H
MOV IAP_ADDRL,#04H
LCALL BYTE_PROGRAM
MOV STORED_DIRECT,40H
MOV IAP_ADDRH,#13H
MOV IAP_ADDRL,#05H
LCALL BYTE_PROGRAM
RET
VOL_DOWN_SET:

MOV SJ,#0C0H;写入显示起始地址(第二行第一个位置)
LCALL ENABLE;调用写入命令子程序
mov dptr,#table19;送第一句话
Lcall write1

LCALL REMOTE_OK_COMMAND
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV STORED_DIRECT,3EH
MOV IAP_ADDRH,#13H
MOV IAP_ADDRL,#06H
LCALL BYTE_PROGRAM
MOV STORED_DIRECT,40H
MOV IAP_ADDRH,#13H
MOV IAP_ADDRL,#07H
LCALL BYTE_PROGRAM
RET
LCD_LIGHT_SET:
MOV SJ,#0C0H;写入显示起始地址(第二行第一个位置)
LCALL ENABLE;调用写入命令子程序
mov dptr,#table20;送第一句话
Lcall write1
LCALL REMOTE_OK_COMMAND
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV STORED_DIRECT,3EH
MOV IAP_ADDRH,#13H
MOV IAP_ADDRL,#08H
LCALL BYTE_PROGRAM
MOV STORED_DIRECT,40H
MOV IAP_ADDRH,#13H
MOV IAP_ADDRL,#09H
LCALL BYTE_PROGRAM

RET
;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCD_DELETREE_DIPALY:
MOV SJ,#0C0H;写入显示起始地址(第二行第一个位置)
LCALL ENABLE;调用写入命令子程序
mov dptr,#table5;送第一句话
call write1
RET
LCD_DELETREE_END:
MOV SJ,#0C0H;写入显示起始地址(第二行第一个位置)
LCALL ENABLE;调用写入命令子程序
mov dptr,#table6;送第一句话
call write1
RET
LCD_DISPLAY_SETUP:
MOV SJ,#0C0H;写入显示起始地址(第二行第一个位置)
LCALL ENABLE;调用写入命令子程序
mov dptr,#table7;送第一句话
call write1
RET
REMOTE_OK:MOV SJ,#0CBH;写入显示起始地址(第二行第一个位置)
LCALL ENABLE;调用写入命令子程序
mov dptr,#table21;送第一句话
call write1
RET
REMOTE_OK_COMMAND:
SETB EA
JB F0,$
LCALL REMOTE_OK
CLR EA

SETB F0
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
REMOTE_RAM:
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#00H
LCALL BYTE_READ
MOV 30H,A;;;;;;;;;;;;;;;;;;;;读出EEPROM_0000H地址数据,(0000H)存放的是遥控器用户码!
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#01H
LCALL BYTE_READ
MOV 31H,A
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#03H
LCALL BYTE_READ
MOV 32H,A
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#05H
LCALL BYTE_READ
MOV 33H,A
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#07H
LCALL BYTE_READ
MOV 34H,A
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#09H
LCALL BYTE_READ
MOV 35H,A
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#0BH
LCALL BYTE_READ
MOV 36H,A
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#0DH
LCALL BYTE_READ
MOV 37H,A
MOV IAP_ADDRH,#12H
MOV IAP_ADDRL,#0FH
LCALL BYTE_READ
MOV 38H,A
MOV IAP_ADDRH,#13H
MOV IAP_ADDRL,#01H
LCALL BYTE_READ
MOV 39H,A
MOV IAP_ADDRH,#13H
MOV IAP_ADDRL,#03H
LCALL BYTE_READ
MOV 3AH,A
MOV IAP_ADDRH,#13H
MOV IAP_ADDRL,#05H
LCALL BYTE_READ
MOV 3BH,A
MOV IAP_ADDRH,#13H
MOV IAP_ADDRL,#07H
LCALL BYTE_READ
MOV 3CH,A
MOV IAP_ADDRH,#13H
MOV IAP_ADDRL,#09H
LCALL BYTE_READ
MOV 3DH,A

RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
EEPROM_STATE:
MOV 45H,#00H
MOV R2,#06H
MOV R0,#46H
EEPROM_STATE_REC:
MOV IAP_ADDRH,45H
MOV IAP_ADDRL,#00H
LCALL BYTE_READ
MOV @R0,A
MOV A,45H
ADD A,#02H
MOV 45H,A
INC R0
DJNZ R2,EEPROM_STATE_REC
RET;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY_SCAN:
JB DVD_INPUT,KEY_1
LCALL delay1
JB DVD_INPUT,KEY_1
LCALL DVD_INPUT_KEY
JNB DVD_INPUT,$
KEY_1:JB CD_INPUT,KEY_2
LCALL delay1
JB CD_INPUT,KEY_2
LCALL CD_INPUT_KEY
JNB CD_INPUT,$
KEY_2:JB PC_INPUT,KEY_3
LCALL delay1
JB PC_INPUT,KEY_ERROR
LCALL PC_INPUT_KEY
JNB PC_INPUT,$
KEY_3:JB VOL_UP,KEY_4
LCALL delay1
JB VOL_UP,KEY_4
LCALL VOL_UP_KEY
JNB VOL_UP,$
KEY_4:JB VOL_DOWN,KEY_5
LCALL delay1
JB VOL_DOWN,KEY_5
LCALL VOL_DOWN_KEY
JNB VOL_DOWN,$
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY_5:
JB MUTE_key,KEY_ERROR
LCALL delay1
JB MUTE_key,KEY_ERROR
LCALL MUTE
JNB MUTE_key,$
KEY_ERROR:
NOP
RET
;;;;;;;;;;;;;;;;;;;;;;;;
MUTE:
CPL 2AH.1
JNB 2AH.1,RRTL
LCALL I2C_MUTE_DATA
clr PORT3_VS
CLR VOL_LED
MOV 6EH,#05H
MOV TL1,#00H                ;设置定时初值
MOV TH1,#00H
SETB ET1
SETB TR1
RRTL:
JB 2AH.1,RRTL_1
LCALL I2C_BUS_START
LCALL I2C_IN_INPUT_4
LCALL I2C_BUS_STOP
LCALL I2C_BUS_START
LCALL I2C_VOL_DATA
LCALL I2C_BUS_STOP
setb PORT3_VS
SETB VOL_LED
MOV 6EH,#05H
MOV TL1,#00H                ;设置定时初值
        MOV TH1,#00H
CLR ET1
CLR TR1
RRTL_1:
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PC_INPUT_KEY:
MOV IAP_ADDRH,#00H
MOV IAP_ADDRL,#00H
LCALL BYTE_DELETREE
MOV STORED_DIRECT,#50H
LCALL BYTE_PROGRAM
LCALL EEPROM_INPUT_PC
MOV 46H,#50H
LCALL I2C_IN_INPUT
SETB DVD_LED
SETB CD_LED
CLR MP3_LED
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CD_INPUT_KEY:
MOV IAP_ADDRH,#00H
MOV IAP_ADDRL,#00H
LCALL BYTE_DELETREE
MOV STORED_DIRECT,#51H
LCALL BYTE_PROGRAM
LCALL EEPROM_INPUT_CD
MOV 46H,#51H
LCALL I2C_IN_INPUT
SETB DVD_LED
CLR CD_LED
SETB MP3_LED
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DVD_INPUT_KEY:
MOV IAP_ADDRH,#00H
MOV IAP_ADDRL,#00H
LCALL BYTE_DELETREE
MOV STORED_DIRECT,#52H
LCALL BYTE_PROGRAM
LCALL EEPROM_INPUT_DVD
MOV 46H,#52H
LCALL I2C_IN_INPUT
CLR DVD_LED
SETB CD_LED
SETB MP3_LED
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
VOL_DOWN_KEY:
CLR CY
MOV A,47H
SUBB A,#01H
MOV 47H,A
LCALL VOL_DISP
MOV A,47H
cjne a,#00H,VOL_MIN
MOV 47H,#01H
VOL_MIN:
LCALL VOL_EEPROM_STROE_BUTTON
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;
VOL_UP_KEY:
MOV A,47H
ADD A,#01H
MOV 47H,A
LCALL VOL_DISP
MOV A,47H
cjne a,#20H,VOL_MAX
MOV 47H,#1FH
VOL_MAX:
LCALL VOL_EEPROM_STROE_BUTTON
RET
;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
VOL_EEPROM_STROE_BUTTON:
MOV IAP_ADDRH,#02H
MOV IAP_ADDRL,#00H
LCALL BYTE_DELETREE
MOV STORED_DIRECT,47H
LCALL BYTE_PROGRAM
LCALL I2C_VOL_DATA
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BASS_UP_KEY:
MOV A,48H
ADD A,#01H
MOV 48H,A

MOV A,48H
cjne a,#0AH,BASS_MAX
MOV 48H,#09H
BASS_MAX:
LCALL BASS_EEPROM_STROE_BUTTON
LCALL BASS_DISP

RET
;;;;;;;;;;;;;;;;;;;;;;;;
BASS_EEPROM_STROE_BUTTON:

MOV IAP_ADDRH,#04H
MOV IAP_ADDRL,#00H
LCALL BYTE_DELETREE

MOV STORED_DIRECT,48H
LCALL BYTE_PROGRAM
LCALL I2C_BASS_DATA
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;
BASS_DOWN_KEY:
MOV A,48H
CLR CY
SUBB A,#01H
MOV 48H,A

MOV A,48H
cjne a,#00H,BASS_MIN
MOV 48H,#01H
BASS_MIN:
LCALL BASS_EEPROM_STROE_BUTTON
LCALL BASS_DISP

RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TREBLE_UP_KEY:
MOV A,49H
ADD A,#01H
MOV 49H,A

MOV A,49H
cjne a,#0AH,TREBLE_MAX
MOV 49H,#09H
TREBLE_MAX:
LCALL TREBLE_EEPROM_STROE_BUTTON
LCALL TREBLE_DISP

RET
;;;;;;;;;;;;;;;;;;;;;;;;
TREBLE_EEPROM_STROE_BUTTON:

MOV IAP_ADDRH,#06H
MOV IAP_ADDRL,#00H
LCALL BYTE_DELETREE
MOV STORED_DIRECT,49H
LCALL BYTE_PROGRAM
LCALL I2C_TREBLE_DATA
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TREBLE_DOWN_KEY:
MOV A,49H
CLR CY
SUBB A,#01H
MOV 49H,A
MOV A,49H
cjne a,#00H,TREBLE_MIN
MOV 49H,#01H
TREBLE_MIN:
LCALL TREBLE_EEPROM_STROE_BUTTON
LCALL TREBLE_DISP

RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TREBLE_DISP:
mov dptr,#table27
MOV A,49H
CJNE A,#01H,TREBLE_DISP_1
LCALL TREBLE_DISP_TREBLE_1
TREBLE_DISP_1:
CJNE A,#02H,TREBLE_DISP_2
LCALL TREBLE_DISP_TREBLE_2
TREBLE_DISP_2:
CJNE A,#03H,TREBLE_DISP_3
LCALL TREBLE_DISP_TREBLE_3
TREBLE_DISP_3:
CJNE A,#04H,TREBLE_DISP_4
LCALL TREBLE_DISP_TREBLE_4
TREBLE_DISP_4:
CJNE A,#05H,TREBLE_DISP_5
LCALL TREBLE_DISP_TREBLE_5
TREBLE_DISP_5:
CJNE A,#06H,TREBLE_DISP_6
LCALL TREBLE_DISP_TREBLE_6
TREBLE_DISP_6:
CJNE A,#07H,TREBLE_DISP_7
LCALL TREBLE_DISP_TREBLE_7
TREBLE_DISP_7:
CJNE A,#08H,TREBLE_DISP_8
LCALL TREBLE_DISP_TREBLE_8
TREBLE_DISP_8:
CJNE A,#09H,TREBLE_DISP_9
LCALL TREBLE_DISP_TREBLE_9
TREBLE_DISP_9:
NOP
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TREBLE_DISP_TREBLE_1:
MOV LCD_BIJIAO,#00H
MOV SJ,#0CDH;显示位置
LCALL ENABLE
LCall write3
RET
TREBLE_DISP_TREBLE_2:
MOV LCD_BIJIAO,#01H
MOV SJ,#0CDH;显示位置
LCALL ENABLE
LCall write3
RET
TREBLE_DISP_TREBLE_3:
MOV LCD_BIJIAO,#02H
MOV SJ,#0CDH;显示位置
LCALL ENABLE
LCall write3
RET
TREBLE_DISP_TREBLE_4:
MOV LCD_BIJIAO,#03H
MOV SJ,#0CDH;显示位置
LCALL ENABLE
LCall write3
RET
TREBLE_DISP_TREBLE_5:
MOV LCD_BIJIAO,#04H
MOV SJ,#0CDH;显示位置
LCALL ENABLE
LCall write3
RET
TREBLE_DISP_TREBLE_6:
MOV LCD_BIJIAO,#05H
MOV SJ,#0CDH;显示位置
LCALL ENABLE
LCall write3
RET
TREBLE_DISP_TREBLE_7:
MOV LCD_BIJIAO,#06H
MOV SJ,#0CDH;显示位置
LCALL ENABLE
LCall write3
RET
TREBLE_DISP_TREBLE_8:
MOV LCD_BIJIAO,#07H
MOV SJ,#0CDH;显示位置
LCALL ENABLE
LCall write3
RET
TREBLE_DISP_TREBLE_9:
MOV LCD_BIJIAO,#08H
MOV SJ,#0CDH;显示位置
LCALL ENABLE
LCall write3
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN_START:
LCALL DELAY1
LCALL DELAY1
LCALL DELAY1
LCALL DELAY1
LCALL DELAY1
LCALL CHECK_IC_TDA7313
LCALL EEPROM_STATE
MOV A,46H
CJNE A,#0FFH,EEPROM_HAVE_DATA
MOV A,47H
CJNE A,#0FFH,EEPROM_HAVE_DATA
MOV A,48H
CJNE A,#0FFH,EEPROM_HAVE_DATA
MOV A,49H
CJNE A,#0FFH,EEPROM_HAVE_DATA
MOV A,4AH
CJNE A,#0FFH,EEPROM_HAVE_DATA
MOV A,4BH
CJNE A,#0FFH,EEPROM_HAVE_DATA
LCALL EEPROM_NO_DATA
EEPROM_HAVE_DATA:
LCALL DATA_BIJIAO
EEPROM_ERROR:
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
EEPROM_NO_DATA:;;;;;;EEPROM内部没有数据时, 将固定值写入EEPROM.(在第一次使用时或者回复出厂设置时)。
MOV 52H,#00H
mov 4CH,#50H;;;;PC INPUT;1AH
MOV 4DH,#0AH;;;VOL 10db;1CH
MOV 4EH,#01H;;;BASS 3db;1EH
MOV 4FH,#01H;;TRE 3db;20H
MOV 50H,#0C0H;;;LR 0db
MOV 51H,#0E0H;;;RR 0db
MOV R2,#06H
MOV R0,#4CH
NO_DATA_REC:
MOV IAP_ADDRH,52H
MOV IAP_ADDRL,#00H
MOV STORED_DIRECT,@R0
LCALL BYTE_PROGRAM
MOV A,52H
ADD A,#02H
MOV 52H,A
INC R0
DJNZ R2,NO_DATA_REC
LCALL FIRST_USE_DISP
LCALL DELAY4_s
LCALL DELAY4_s
LCALL DELAY4_s
LCALL DELAY4_s
LCALL DELAY4_s
MOV IAP_CONTR,#60H
LCALL DELAY4_s
LCALL DELAY4_s
LCALL DELAY4_s
LCALL DELAY4_s
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
FIRST_USE_DISP:
MOV SJ,#06H;移动光标
LCALL ENABLE
MOV SJ,#80H;显示位置
LCALL ENABLE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov SJ,#01h
Lcall enable
mov dptr,#table29;送第一句话
LCall write1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV SJ,#0C0H;写入显示起始地址(第二行第一个位置)
LCALL ENABLE;调用写入命令子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov dptr,#table30;送第一句话
Lcall write1
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

MAIN_LCD_DISP_COMMAND_INPUT:
MOV SJ,#01H;清除屏幕
LCALL ENABLE
MOV SJ,#38H;8位点阵
LCALL ENABLE
MOV SJ,#0CH;开显示
LCALL ENABLE
MOV SJ,#06H;移动光标
LCALL ENABLE
MOV SJ,#80H;显示位置
LCALL ENABLE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov SJ,#01h
Lcall enable
mov dptr,#table22;送第一句话
LCall write1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV SJ,#0C0H;写入显示起始地址(第二行第一个位置)
LCALL ENABLE;调用写入命令子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov dptr,#table23;送第一句话
Lcall write1
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DATA_BIJIAO:
LCALL MAIN_LCD_DISP_COMMAND_INPUT
MOV A,46H
CJNE A,#50H,INPUT_PC_BIJIAO;#58H是STERE1输入0DB增益开等响度
LCALL EEPROM_INPUT_PC
INPUT_PC_BIJIAO:
MOV A,46H
CJNE A,#51H,INPUT_DVD_BIJIAO
LCALL EEPROM_INPUT_CD
INPUT_DVD_BIJIAO:
MOV A,46H
CJNE A,#52H,INPUT_CD_BIJIAO
LCALL EEPROM_INPUT_DVD
INPUT_CD_BIJIAO:
LCALL VOL_DISP
LCALL VOL_EEPROM_DATA
LCALL BASS_EEPROM_DATA
LCALL TRE_EEPROM_DATA
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BASS_DISP_BASS_1:
MOV LCD_BIJIAO,#00H
MOV SJ,#0C5H;显示位置
LCALL ENABLE
LCall write3
RET
BASS_DISP_BASS_2:
MOV LCD_BIJIAO,#01H
MOV SJ,#0C5H;显示位置
LCALL ENABLE
LCall write3
RET
;;;;;;;;;;;;;;;;;;;;;;;;
BASS_DISP_BASS_3:
MOV LCD_BIJIAO,#02H
MOV SJ,#0C5H;显示位置
LCALL ENABLE
LCall write3
RET
;;;;;;;;;;;;;;;;;;;;;;;;;
BASS_DISP_BASS_4:
MOV LCD_BIJIAO,#03H
MOV SJ,#0C5H;显示位置
LCALL ENABLE
LCall write3
RET
;;;;;;;;;;;;;;;;;;;;;;;;
BASS_DISP_BASS_5:
MOV LCD_BIJIAO,#04H
MOV SJ,#0C5H;显示位置
LCALL ENABLE
LCall write3
RET
;;;;;;;;;;;;;;;;;;;;;;;;;
BASS_DISP_BASS_6:
MOV LCD_BIJIAO,#05H
MOV SJ,#0C5H;显示位置
LCALL ENABLE
LCall write3
RET
;;;;;;;;;;;;;;;;;;;;;;;;
BASS_DISP_BASS_7:
MOV LCD_BIJIAO,#06H
MOV SJ,#0C5H;显示位置
LCALL ENABLE
LCall write3
RET
;;;;;;;;;;;;;;;;;;;;;
BASS_DISP_BASS_8:
MOV LCD_BIJIAO,#07H
MOV SJ,#0C5H;显示位置
LCALL ENABLE
LCall write3
RET
;;;;;;;;;;;;;;;;;;;;;;;;
BASS_DISP_BASS_9:
MOV LCD_BIJIAO,#08H
MOV SJ,#0C5H;显示位置
LCALL ENABLE
LCall write3
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BASS_DISP:
mov dptr,#table27
MOV A,48H
CJNE A,#01H,BASS_DISP_1
LCALL BASS_DISP_BASS_1
BASS_DISP_1:
CJNE A,#02H,BASS_DISP_2
LCALL BASS_DISP_BASS_2
BASS_DISP_2:
CJNE A,#03H,BASS_DISP_3
LCALL BASS_DISP_BASS_3
BASS_DISP_3:
CJNE A,#04H,BASS_DISP_4
LCALL BASS_DISP_BASS_4
BASS_DISP_4:
CJNE A,#05H,BASS_DISP_5
LCALL BASS_DISP_BASS_5
BASS_DISP_5:
CJNE A,#06H,BASS_DISP_6
LCALL BASS_DISP_BASS_6
BASS_DISP_6:
CJNE A,#07H,BASS_DISP_7
LCALL BASS_DISP_BASS_7
BASS_DISP_7:
CJNE A,#08H,BASS_DISP_8
LCALL BASS_DISP_BASS_8
BASS_DISP_8:
CJNE A,#09H,BASS_DISP_9
LCALL BASS_DISP_BASS_9
BASS_DISP_9:
NOP
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
VOL_DISP:
MOV A,47H
CJNE A,#00H,VOL_DISP_1
LCALL VOL_DISP_VOL1
VOL_DISP_1:CJNE A,#01H,VOL_DISP_2
LCALL VOL_DISP_VOL2
VOL_DISP_2:CJNE A,#02H,VOL_DISP_3
LCALL VOL_DISP_VOL3
VOL_DISP_3:CJNE A,#03H,VOL_DISP_4
LCALL VOL_DISP_VOL4
VOL_DISP_4:CJNE A,#04H,VOL_DISP_5
LCALL VOL_DISP_VOL5
VOL_DISP_5:CJNE A,#05H,VOL_DISP_6
LCALL VOL_DISP_VOL6
VOL_DISP_6:CJNE A,#06H,VOL_DISP_7
LCALL VOL_DISP_VOL7
VOL_DISP_7:CJNE A,#07H,VOL_DISP_8
LCALL VOL_DISP_VOL8
VOL_DISP_8:CJNE A,#08H,VOL_DISP_9
LCALL VOL_DISP_VOL9
VOL_DISP_9:CJNE A,#09H,VOL_DISP_10
LCALL VOL_DISP_VOL10
VOL_DISP_10:CJNE A,#0AH,VOL_DISP_11
LCALL VOL_DISP_VOL11
VOL_DISP_11:CJNE A,#0BH,VOL_DISP_12
LCALL VOL_DISP_VOL12
VOL_DISP_12:CJNE A,#0CH,VOL_DISP_13
LCALL VOL_DISP_VOL13
VOL_DISP_13:CJNE A,#0DH,VOL_DISP_14
       LCALL VOL_DISP_VOL14
VOL_DISP_14:CJNE A,#0EH,VOL_DISP_15
      LCALL VOL_DISP_VOL15
VOL_DISP_15:CJNE A,#0FH,VOL_DISP_16
         LCALL VOL_DISP_VOL16
VOL_DISP_16:CJNE A,#10H,VOL_DISP_17
      LCALL VOL_DISP_VOL17
VOL_DISP_17:CJNE A,#11H,VOL_DISP_18
         LCALL VOL_DISP_VOL18
VOL_DISP_18:CJNE A,#12H,VOL_DISP_19
   LCALL VOL_DISP_VOL19
VOL_DISP_19:CJNE A,#13H,VOL_DISP_20
clr port1_port2;;;;;;;;;;;;;;;;;;;;;;;;;;当音量19,风扇停止运转
      LCALL VOL_DISP_VOL20
VOL_DISP_20:CJNE A,#14H,VOL_DISP_21
   LCALL VOL_DISP_VOL21
VOL_DISP_21:CJNE A,#15H,VOL_DISP_22
   LCALL VOL_DISP_VOL22
VOL_DISP_22:CJNE A,#16H,VOL_DISP_23
      LCALL VOL_DISP_VOL23
VOL_DISP_23:CJNE A,#17H,VOL_DISP_24
setb port1_port2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;当音量23,风扇运转
      LCALL VOL_DISP_VOL24
VOL_DISP_24:CJNE A,#18H,VOL_DISP_25
          LCALL VOL_DISP_VOL25
VOL_DISP_25:CJNE A,#19H,VOL_DISP_26
         LCALL VOL_DISP_VOL26
VOL_DISP_26:CJNE A,#1AH,VOL_DISP_27
         LCALL VOL_DISP_VOL27
VOL_DISP_27:CJNE A,#1BH,VOL_DISP_28
          LCALL VOL_DISP_VOL28
VOL_DISP_28:CJNE A,#1CH,VOL_DISP_29
      LCALL VOL_DISP_VOL29
VOL_DISP_29:CJNE A,#1DH,VOL_DISP_30
         LCALL VOL_DISP_VOL30
VOL_DISP_30:CJNE A,#1EH,VOL_DISP_31
      LCALL VOL_DISP_VOL31
VOL_DISP_31:CJNE A,#1FH,VOL_DISP_32
          LCALL VOL_DISP_VOL32
VOL_DISP_32:CJNE A,#20H,VOL_DISP_33
          LCALL VOL_DISP_VOL33
VOL_DISP_33:
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;以上是比较之后的显示程序!
VOL_DISP_VOL1:
LCALL VOL_DISP_COMMAND_NULL
MOV LCD_BIJIAO,#00H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL2:
LCALL VOL_DISP_COMMAND_NULL
MOV LCD_BIJIAO,#01H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL3:
LCALL VOL_DISP_COMMAND_NULL
MOV LCD_BIJIAO,#02H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL4:
LCALL VOL_DISP_COMMAND_NULL
MOV LCD_BIJIAO,#03H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL5:
LCALL VOL_DISP_COMMAND_NULL
MOV LCD_BIJIAO,#04H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL6:
LCALL VOL_DISP_COMMAND_NULL
MOV LCD_BIJIAO,#05H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL7:
LCALL VOL_DISP_COMMAND_NULL
MOV LCD_BIJIAO,#06H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL8:
LCALL VOL_DISP_COMMAND_NULL
MOV LCD_BIJIAO,#07H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL9:
LCALL VOL_DISP_COMMAND_NULL
MOV LCD_BIJIAO,#08H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL10:
LCALL VOL_DISP_COMMAND_NULL
MOV LCD_BIJIAO,#09H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL11:
LCALL VOL_DISP_COMMAND_1
MOV LCD_BIJIAO,#00H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL12:
LCALL VOL_DISP_COMMAND_1
MOV LCD_BIJIAO,#01H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL13:
LCALL VOL_DISP_COMMAND_1
MOV LCD_BIJIAO,#02H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL14:
LCALL VOL_DISP_COMMAND_1
MOV LCD_BIJIAO,#03H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL15:
LCALL VOL_DISP_COMMAND_1
MOV LCD_BIJIAO,#04H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL16:
LCALL VOL_DISP_COMMAND_1
MOV LCD_BIJIAO,#05H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL17:
LCALL VOL_DISP_COMMAND_1
MOV LCD_BIJIAO,#06H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL18:
LCALL VOL_DISP_COMMAND_1
MOV LCD_BIJIAO,#07H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL19:
LCALL VOL_DISP_COMMAND_1
MOV LCD_BIJIAO,#08H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL20:
LCALL VOL_DISP_COMMAND_1
MOV LCD_BIJIAO,#09H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL21:
LCALL VOL_DISP_COMMAND_2
MOV LCD_BIJIAO,#00H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL22:
LCALL VOL_DISP_COMMAND_2
MOV LCD_BIJIAO,#01H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL23:
LCALL VOL_DISP_COMMAND_2
MOV LCD_BIJIAO,#02H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL24:
LCALL VOL_DISP_COMMAND_2
MOV LCD_BIJIAO,#03H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL25:
LCALL VOL_DISP_COMMAND_2
MOV LCD_BIJIAO,#04H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL26:
LCALL VOL_DISP_COMMAND_2
MOV LCD_BIJIAO,#05H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL27:
LCALL VOL_DISP_COMMAND_2
MOV LCD_BIJIAO,#06H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL28:
LCALL VOL_DISP_COMMAND_2
MOV LCD_BIJIAO,#07H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL29:
LCALL VOL_DISP_COMMAND_2
MOV LCD_BIJIAO,#08H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL30:
LCALL VOL_DISP_COMMAND_2
MOV LCD_BIJIAO,#09H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL31:
LCALL VOL_DISP_COMMAND_3
MOV LCD_BIJIAO,#00H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL32:
LCALL VOL_DISP_COMMAND_3
MOV LCD_BIJIAO,#01H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
VOL_DISP_VOL33:
LCALL VOL_DISP_COMMAND_3
MOV LCD_BIJIAO,#02H
MOV SJ,#8DH;显示位置
LCALL ENABLE
LCall write3
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
VOL_DISP_COMMAND_NULL:
mov dptr,#table27
MOV LCD_BIJIAO,#0AH
MOV SJ,#8cH;显示位置
LCALL ENABLE
LCall write3
RET
;;;;;;;;;;;;;;;;;;;;
VOL_DISP_COMMAND_1:
mov dptr,#table27
MOV LCD_BIJIAO,#01H
MOV SJ,#8cH;显示位置
LCALL ENABLE
LCall write3
RET
;;;;;;;;;;;;;;
VOL_DISP_COMMAND_2:
mov dptr,#table27
MOV LCD_BIJIAO,#02H
MOV SJ,#8cH;显示位置
LCALL ENABLE
LCall write3
RET
;;;;;;;;;;;;;;;
VOL_DISP_COMMAND_3:
mov dptr,#table27
MOV LCD_BIJIAO,#03H
MOV SJ,#8cH;显示位置
LCALL ENABLE
LCall write3
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
EEPROM_INPUT_PC:
mov dptr,#table24
MOV LCD_BIJIAO,#00H
MOV SJ,#83H;显示位置
LCALL ENABLE
LCall write3
MOV LCD_BIJIAO,#01H
MOV SJ,#84H;显示位置
LCALL ENABLE
LCall write3
MOV LCD_BIJIAO,#04H
MOV SJ,#85H;显示位置
LCALL ENABLE
LCall write3
SETB DVD_LED
SETB CD_LED
CLR MP3_LED
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
EEPROM_INPUT_CD:
mov dptr,#table24
MOV LCD_BIJIAO,#01H
MOV SJ,#83H;显示位置
LCALL ENABLE
LCall write3
MOV LCD_BIJIAO,#02H
MOV SJ,#84H;显示位置
LCALL ENABLE
LCall write3
MOV LCD_BIJIAO,#04H
MOV SJ,#85H;显示位置
LCALL ENABLE
LCall write3
SETB DVD_LED
CLR CD_LED
SETB MP3_LED
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
EEPROM_INPUT_DVD:
mov dptr,#table24
MOV LCD_BIJIAO,#02H
MOV SJ,#83H;显示位置
LCALL ENABLE
LCall write3
MOV LCD_BIJIAO,#03H
MOV SJ,#84H;显示位置
LCALL ENABLE
LCall write3
MOV LCD_BIJIAO,#02H
MOV SJ,#85H;显示位置
LCALL ENABLE
LCall write3
CLR DVD_LED
SETB CD_LED
SETB MP3_LED
RET
;;;;;;;;;;;;;;;;;;;
VOL_EEPROM_DATA:
LCALL VOL_DISP
RET
BASS_EEPROM_DATA:
LCALL BASS_DISP
RET
TRE_EEPROM_DATA:
LCALL TREBLE_DISP
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
write3:;送字符串
mov a,LCD_BIJIAO
movc a,@a+dptr
call write4
ret
write4:;送单个字符
mov SJ,a
setb rs
clr rw
clr e
Lcall delay
setb e
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
I2C_MUTE_DATA:
LCALL I2C_BUS_START
MOV I2C_STRING_DATA,#88H
LCALL SEND
LCALL CACK
MOV I2C_STRING_DATA,#9FH
LCALL SEND
LCALL CACK
LCALL I2C_BUS_STOP
LCALL I2C_BUS_START
MOV I2C_STRING_DATA,#88H
LCALL SEND
LCALL CACK
MOV I2C_STRING_DATA,#0BFH
LCALL SEND
LCALL CACK
LCALL I2C_BUS_STOP
LCALL I2C_BUS_START
MOV I2C_STRING_DATA,#88H
LCALL SEND
LCALL CACK
MOV I2C_STRING_DATA,#0DFH
LCALL SEND
LCALL CACK
LCALL I2C_BUS_STOP
LCALL I2C_BUS_START
MOV I2C_STRING_DATA,#88H
LCALL SEND
LCALL CACK
MOV I2C_STRING_DATA,#0FFH
LCALL SEND
LCALL CACK
LCALL I2C_BUS_STOP
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
I2C_VOL_DATA:
mov dptr,#table28
MOV A,47H
movc a,@a+dptr
MOV I2C_VOL_RAM,A
LCALL I2C_BUS_START
MOV I2C_STRING_DATA,#88H
LCALL SEND
LCALL CACK
MOV I2C_STRING_DATA,I2C_VOL_RAM
LCALL SEND
LCALL CACK
LCALL I2C_BUS_STOP
RET
I2C_BASS_DATA:
mov dptr,#table31
MOV A,48H
movc a,@a+dptr
MOV I2C_BASS_RAM,A
LCALL I2C_BUS_START
MOV I2C_STRING_DATA,#88H
LCALL SEND
LCALL CACK
MOV I2C_STRING_DATA,I2C_BASS_RAM
LCALL SEND
LCALL CACK
LCALL I2C_BUS_STOP
RET
I2C_TREBLE_DATA:
mov dptr,#table32
MOV A,49H
movc a,@a+dptr
MOV I2C_TRE_RAM,A
LCALL I2C_BUS_START
MOV I2C_STRING_DATA,#88H
LCALL SEND
LCALL CACK
MOV I2C_STRING_DATA,I2C_TRE_RAM
LCALL SEND
LCALL CACK
LCALL I2C_BUS_STOP
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
I2C_IN_INPUT:
MOV I2C_STRING_DATA,#88H
LCALL SEND
LCALL CACK
MOV I2C_STRING_DATA,46H
LCALL SEND
LCALL CACK
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
I2C_IN_INPUT_4:;;;;;4个声道的开启值!
MOV I2C_STRING_DATA,#88H;;;;;地址是88
LCALL SEND
LCALL CACK
MOV I2C_STRING_DATA,#80H;;;;右前
LCALL SEND
LCALL CACK
MOV I2C_STRING_DATA,#0a0H;;;;左前
LCALL SEND
LCALL CACK
MOV I2C_STRING_DATA,#0C0H;;;左后
LCALL SEND
LCALL CACK
MOV I2C_STRING_DATA,#0E0H;;;;右后
LCALL SEND
LCALL CACK
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TDA7313:
LCALL I2C_BUS_START
LCALL I2C_IN_INPUT_4
LCALL I2C_BUS_STOP
LCALL I2C_BUS_START
LCALL I2C_IN_INPUT
LCALL I2C_BUS_STOP
LCALL I2C_BUS_START
LCALL I2C_VOL_DATA
LCALL I2C_BUS_STOP
LCALL I2C_BUS_START
LCALL I2C_TREBLE_DATA
LCALL I2C_BUS_STOP
LCALL I2C_BUS_START
LCALL I2C_BASS_DATA
LCALL I2C_BUS_STOP
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CHECK_IC_TDA7313:
LCALL I2C_BUS_START
MOV I2C_STRING_DATA,#88H;;;;;;;;;;;#88h是TDA7313的地址
LCALL SEND
LCALL CACK
LCALL I2C_BUS_STOP
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;以下是I2C总线全部的程序
I2C_BUS_START:
SETB I2C_SDATA
SETB I2C_SCL
LCALL I2C_DELAY_10uS
CLR I2C_SDATA
LCALL I2C_DELAY_10uS
CLR I2C_SCL
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
I2C_BUS_STOP:
CLR I2C_SDATA
SETB I2C_SCL
LCALL I2C_DELAY_10uS
SETB I2C_SDATA
LCALL I2C_DELAY_10uS
CLR I2C_SDATA
CLR I2C_SCL
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;
cack:setb I2C_SDATA
SETB I2C_SCL
MOV C,I2C_SDATA
JC CEND
JMP DQ
CEND: LCALL TDA7313_error
DQ:CLR I2C_SCL
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;
SEND:
MOV A,I2C_STRING_DATA
MOV R2,#08h
WLP:RLC A
JC WR1
lcall WR9
WLP1:DJNZ R2,WLP
RET
WR1:SETB I2C_SDATA
SETB I2C_SCL
LCALL I2C_DELAY_10uS
CLR I2C_SCL
CLR I2C_SDATA
ljmp wlp1
WR9:CLR I2C_SDATA
SETB I2C_SCL
LCALL I2C_DELAY_10uS
CLR I2C_SCL
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;I2C总线程序结束
TDA7313_error:
mov SJ,#01h
Lcall enable
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov dptr,#table25;送第一句话
Lcall write1
MOV SJ,#0C0H;写入显示起始地址(第二行第一个位置)
LCALL ENABLE;调用写入命令子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov dptr,#table26;送第一句话
Lcall write1
JMP $
RET
;;;;;;;;;;;;;;;;;;;;;;;;
I2C_DELAY_10uS:
MOV R7,#100
DJNZ R7,$
RET
;;;;;;;;;;;;;;;;;;;;;
DELAY4_s:
mov r7,#255
d11:mov r6,#255
d21:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
djnz r6,d21
djnz r7,d11
ret

;以下每个表格都是一句话,以00H作为每句话的结尾.
table1:db 'AUDIO CONTROLLER',00h;;;;为了模块化结构和便于阅读和便于移植!TABLE1-TABLE23.
table2:db 'MADE IN (HUADU) ',00h
table3:db 'REMOTESETTING ',00h
table4:db 'PROGRAM BY WEIQI',00h
table5:db 'DELEALL STORE ',00h
table6:db '    Deleted   ',00h
table7:db 'PLEASE WAIT.....',00h
table8:db ' PC ID:         ',00h
table9:db ' CD ID:         ',00h
table10:db 'DVD ID:         ',00h
table11:db 'MUTE ID:      ',00h
table12:db 'TREBLE+ ID:   ',00h
table13:db 'TREBLE- ID:   ',00h
table14:db 'SURROUND+ :   ',00H
table15:db 'SURROUND- :   ',00H
table16:db 'BASS+ ID:       ',00H
table17:db 'BASS- ID:       ',00H
table18:db 'VOL+ ID:      ',00H
table19:db 'VOL- ID:      ',00H
table20:db 'FAN CON:      ',00H
table21:db 'OK   ',00H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
table22:DB 'IN:PCVol:   db',00H
table23:DB 'BASS: db TRE: db',00H
table24:DB 'P','C','D','V',' ','0','1','2','3','4','5','6','7','8','9','M','A','X','d','b',00H
table25:DB ' TDA7313ERROR ',00H
table26:DB 'Check IC TDA7313',00H
table27:DB '0','1','2','3','4','5','6','7','8','9',' ' ,00H
table28:DB3fH,3DH,3BH,39H,37H,35H,33H,31H,2FH,2DH,2BH,29H,27H,25H,23H,21H,1FH,1DH,1BH,19H,17H,15H,13H,11H,0FH,0DH,0BH,09H,07H,05H,03H,01H,00H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;table28是主音量分贝表;;;01H,03H,05H,07H,09H,0BH,0DH,0FH,11H,13H,15H,17H,19H,1BH,1DH,1FH,21H,23H,25H,27H,29H,2BH,2DH,2FH,31H,33H,35H,37H,39H,3BH,3DH,3FH,00H
table29:DB 'For the 1st time',00h
table30:DB 'PLEASE WAIT   ',00H
table31:DB 00H,63H,64H,65H,66H,67H,6FH,6EH,6DH,6BH,00H;;;BASS
table32:DB 00H,75H,76H,77H,7FH,7EH,7DH,7BH,7AH,79H,00H;;;;TRE
end

卡西利亚斯 发表于 2014-11-14 22:00

楼主还是打包上传 文件吧,贴出来会有表情的。

weiqiac 发表于 2014-11-14 22:05

本帖最后由 weiqiac 于 2014-11-14 22:07 编辑

今天上传不了啊!

kiven_chen 发表于 2014-11-14 22:37

佩服,支持,顶,赞。

thz6339 发表于 2014-11-14 23:02

有成品板卖吗?刚好想自己搞一套自己车上的音响,为立体声怎么转换为前后4声道烦恼,有成品转让请pm

751757389 发表于 2014-11-14 23:55

有块7313,哈哈

夜如风 发表于 2014-11-15 01:10

本帖最后由 夜如风 于 2014-11-15 08:41 编辑

直接上源文件看,等

weiqiac 发表于 2014-11-15 09:49

上磁动力论坛搜我这个ID名有详细制作PcB和源文件

csc670 发表于 2014-11-15 09:54

厉害,膜拜

weiqiac 发表于 2014-11-15 11:06

我怎么上传附件上传不了,在200K以内ZIP都不行,

aibtel 发表于 2015-1-18 13:48

真心赞一个;

zds4468 发表于 2015-1-18 13:58

会软件编程的就是好,楼主无私分享更是值得称赞。

yhq8501 发表于 2015-1-18 16:41

有套件卖或者谁开板转让一套pcb吗?

阿甲1 发表于 2015-1-18 21:20

会软件编程的就是好,楼主无私分享更是值得称赞。

weiqiac 发表于 2015-1-18 21:25

无所谓,大家玩玩吧

城市季风 发表于 2015-1-19 09:12

路过学习下:lol

fgtzjl 发表于 2015-1-19 09:19

wshp12 发表于 2015-1-24 20:26

TDA7313开源,先收藏,回头再看

audio123 发表于 2015-1-24 21:05

本帖最后由 audio123 于 2015-1-24 21:08 编辑

这里有个C语言的,:) http://bbs.hifidiy.net/forum.php?mod=viewthread&tid=748950&extra=
页: [1] 2
查看完整版本: TDA7313音频芯片控制(开源)