- 积分
- 13
- 在线时间
- 29 小时
- 最后登录
- 2021-2-2
- 阅读权限
- 40
- 精华
- 0
- UID
- 36245
- 帖子
- 10
- 精华
- 0
- 经验
- 13 点
- 金钱
- 13 ¥
- 注册时间
- 2008-2-26
|
T200B关电源后开机不记忆音量,开机后总是一个很小的音量,用起来很不方便。我对t200b的音量控制电路软件、硬件进行了研究,修改了控制软件,实现了开机记忆音量功能。
首先说说我发现T200B软件的一些问题:
1.开机不记忆上次关机音量,这是最大的问题。
2.开机没有对音量调整芯片AT89C2051。CS3310规格书明确要求上电开机mute脚要拉低,以实现CS3310内部补偿校正,T200B软件没有做这个工作。
3.音量设置有偏差,也就是即使每次设置同样的音量,音量大小会有三四个dB的误差,这是我通过示波器观察单片机设置CS3310的波形时发现的,这是软件算法不准确造成的。不过听觉一般感觉不到。
4。禁音时音箱灯没有禁音警示。
由T200B音量控制电路图可见,实现音量记忆其实是很容易实现的,因为电路中有24C02,24C02是个EEPROM,断电记忆数据的。可以把音量信息存在24C02中,开机时再读出来。AT89C2051是个阉割版的51单片机,用来控制CS3310,遥控解码,步进电位器控制等功能,软件也就在这个芯片里面。我修改了AT89C2051的软件,在以下方面进行了优化:
1。记忆音量开机。开机时读取24C02中存储的上次关机音量数据,并按上次关机时的音量设置音箱。
2.开机CS3310内部补偿校正,也就是使MUTE脚拉低2.5ms
3.改进音量控制算法,实现每次都精确控制。
4禁音时指示灯变为红色,提示为禁音状态。
5。渐进式启动,保护扬声器。由于记忆音量,可能开机音量会很大,所以开机时单片机控制CS3310音量渐增到记忆的音量,不是一步到位,这个过程为1S.如果记忆音量为63则以40音量启动。
本修改不需要该硬件。附图为T200B中的AT89C2051照片,它是有插座的,可以随便拔下来,烧写新软件就可以了。如果要保留以前的软件,直接重新买一块AT89C2051烧写就可以了。要用回老软件就直接换回原来的AT89C2051。
下面是软件:
SDA BIT P1.6
SCL BIT P1.7
ORG 0000H
JMP START
ORG 000BH
JMP INTT0
ORG 001BH
SETB P1.5
JMP INTR
START: CLR P3.7
CLR P1.4
CLR P1.3
MOV SP,#60H
CLR P1.5
MOV R6,#50
CALL DELLAY
SETB P1.5
CALL READIIC
MOV 50H,A
SUBB A,#189
JC NORMAL
MOV A,#120
MOV 50H,A
NORMAL: MOV A,50H
-----------------------------------
渐进式启动软件,保密
-------------CALL SENDCS
MOV TMOD,#61H
MOV TH1,#0FFH
MOV TL1,#0FFH
SETB ET1
SETB ET0
SETB EA
SETB TR1
L7: JB P1.1,$
CALL RC
JZ L7
MOV 50H,A
CALL SENDCS
SETB P3.7
CLR P1.0
MOV R1,#3
MOV R2,#3
MOV TH0,#00H
MOV TL0,#00H
SETB TR0
JMP L7
INTT0: DJNZ R1,GOON
CPL P1.0
MOV R1,#3
DJNZ R2,GOON
CLR TR0
JNB P1.5,MU
CLR P3.7
SETB P1.0
PUSH ACC
MOV A,50H
CALL WRITEIIC
POP ACC
RETI
MU: CLR P1.0 ;MUTE红灯亮
SETB P3.7
PUSH ACC
MOV A,50H
CALL WRITEIIC
POP ACC
GOON: RETI
INTR: JB P3.4,DEVOL
MOV A,50H
CJNE A,#10111101B,ADDVOL
JMP RETIINTR
ADDVOL: CJNE A,#00000001B,NO1
MOV A,#00000011B
MOV 50H,A
CALL SENDCS
JMP RETIINTR
NO1: INC A
INC A
INC A
MOV 50H,A
CALL SENDCS
JMP RETIINTR
DEVOL: MOV A,50H
CJNE A,#00000001B,DECRVOL
JMP RETIINTR
DECRVOL: CJNE A,#00000011B,NO3
MOV A,#00000001B
MOV 50H,A
CALL SENDCS
JMP RETIINTR
NO3: DEC A
DEC A
DEC A
MOV 50H,A
CALL SENDCS
RETIINTR: SETB P3.7
CLR P1.0
MOV R1,#3
MOV R2,#3
MOV TH0,#00H
MOV TL0,#00H
SETB TR0
RETI
WRITEIIC: MOV A,#10100000B ;将50H单元的数据存EEPROM
CALL STARTIIC
CALL SENDIIC
SETB SCL
MOV C,SDA
JC WRITEIIC
CLR SCL
MOV A,#11000000B ;存在11000000B单元
CALL SENDIIC
SETB SCL
MOV C,SDA
JC WRITEIIC
CLR SCL
MOV A,50H
CALL SENDIIC
SETB SCL
MOV C,SDA
JC WRITEIIC
CLR SCL
CALL ENDIIC
RET
READIIC: MOV A,#10100000B ;读数据到A
CALL STARTIIC
CALL SENDIIC
SETB SCL
MOV C,SDA
JC READIIC
CLR SCL
MOV A,#11000000B ;读11000000B单元
CALL SENDIIC
SETB SCL
MOV C,SDA
JC READIIC
CLR SCL
CALL STARTIIC
MOV A,#10100001B
CALL SENDIIC
SETB SCL
MOV C,SDA
JC READIIC
MOV R7,#8
READIICBIT: CLR SCL
NOP
SETB SCL
MOV C,SDA
RLC A
DJNZ R7,READIICBIT
CLR SCL
NOP
SETB SCL
NOP
CLR SCL
CALL ENDIIC
RET
STARTIIC: SETB SDA
SETB SCL
NOP
CLR SDA
NOP
CLR SCL
RET
ENDIIC: CLR SDA
NOP
SETB SCL
NOP
SETB SDA
RET
SENDIIC: MOV R7,#8 ;发送A的内容
LOOPIIC: RLC A
MOV SDA,C
SETB SCL
NOP
CLR SCL
DJNZ R7,LOOPIIC
SETB SDA
RET
RC : MOV R0,#30H ;遥控接收子程序
MOV R5,#9
L1: MOV R6,#16
CALL DELLAY
JB P1.1,OUT
DJNZ R5,L1
JNB P1.1,$
MOV R5,#5
L2: MOV R6,#15
CALL DELLAY
JNB P1.1,OUT
DJNZ R5,L2
MOV R6,#11
CALL DELLAY
MOV R3,#8
READBYTE: MOV R4,#8
READBIT: JNB P1.1,$
MOV R6,#17
CALL DELLAY
MOV C,P1.1
JNC ZERO
MOV R6,#22
CALL DELLAY
ZERO: RRC A
DJNZ R4,READBIT
MOV @R0,A
INC R0
DJNZ R3,READBYTE
MOV R6,50
CALL DELLAY
---------------------------------------------
---保密部分
----------------------------------------------
RET
DELLAY: MOV R7,#25
DJNZ R7,$
DJNZ R6,DELLAY
RET
SENDCS: CLR P1.2 ;将A的内容发送到CS3310
MOV R5,#16
LOOPCS: MOV C,ACC.7
MOV P1.3,C
NOP
SETB P1.4
NOP
CLR P1.4
RL A
DJNZ R5,LOOPCS
CLR P1.3
SETB P1.2
RET
END--------------------- |
-
|