📄 av-p06a.asm
字号:
;******************************************************************************************
;* 文件: AV-P06A.ASM *
;* 型号: AV-P06A 5.1CH功率放大器 *
;* 器件: 89C52+12M+PT2314+PT2315+2*M62429+PT6311+CS16210+6221+VFDGDT1313A *
;* 编写: 张绍斌 *
;* 日期: 2007-03-27 *
;* 版本: VER1.0 *
;******************************************************************************************
MAIN_MUTE EQU P0.0 ;功率输出继电器控制
AD_OUT EQU P0.3 ;A/D转换充放电控制
AD_IN EQU P0.4 ;A/D比较器输入端
PT2314_5_DATA EQU P1.1 ;PT2314/PT2315数据线
PT2314_5_CLK EQU P1.2 ;PT2314/PT2315时钟线
FAN_ON_OFF EQU P1.3 ;功放散热器风扇开关
M62429_CK1 EQU P1.4 ;M62429(1)时钟线,SL为通道1,CEN为通道2
M62429_DAT EQU P1.5 ;M62429(1)(2)数据线
M62429_CK2 EQU P1.6 ;M62429(2)时钟线,SR为通道1,SUBWOOF为通道2
AC_3 EQU P1.7 ;CD4053控制2CH/5.1CH输入
PT6311_DATA EQU P2.0 ;PT6311数据线
PT6311_CLK EQU P2.1 ;PT6311时钟线
PT6311_STB EQU P2.2 ;PT6311片选线
MIC_CAK EQU P2.3 ;话筒插入检测
CS16210_CP EQU P2.4 ;输入时钟线
CS16210_DIN EQU P2.5 ;数据串行输入线
CS16210_EN EQU P2.6 ;数据输出控制
SCLK EQU P3.5 ;24C02时钟线
SDAT EQU P3.6 ;24C02数据线
KEY_CELL EQU 1AH ;(1AH-1FH为10个面板按键值缓存)
GIF_SIGN EQU 40H ;字幕进程标志
GIF_TIME EQU 41H ;字幕速度
GIF_LONG EQU 42H ;字幕长度
DISP_BUFFER EQU 43H ;PT6311显示缓冲区地址指针
DISP_INDEX EQU 44H ;PT6311内部地址指针
INPUT_DATA EQU 45H ;DVD/LD=1,VCD/CD=2,AUX=3,ML/MR=4
BASS_DATA EQU 46H
TREB_DATA EQU 47H
BALN_DATA EQU 48H
MAIN_DATA EQU 49H
MVOL_DATA EQU 4AH
ECHO_DATA EQU 4BH
SURL_DATA EQU 4CH
SURR_DATA EQU 4EH
CEN_DATA EQU 4FH
BW_DATA EQU 50H
DELAY_DATA EQU 51H
DSP_DATA EQU 52H
CH_DATA EQU 53H ;5.1CH=#0,3.1CH=#1,2.1CH=#2,2CH=#3
KEY_NUM EQU 54H ;按键扫描值
KEYNUM_SAVE EQU 55H
SYS_SIGN EQU 56H ;系统运行标记
KEY_DELAY EQU 57H ;键盘调用延时缓存
DIV_16 EQU 58H ;16进制数缓存
DP_NUM EQU 59H ;自动屏谱当前进度的格数
DP_MODE EQU 5AH ;屏谱显示模式
DP_SAVE EQU 5BH
REM_FIX EQU 5CH ;遥控用户码
REM_FIX1 EQU 5DH ;遥控用户反码
REM_KEY EQU 5EH ;遥控按键码
REM_KEY1 EQU 5FH ;遥控按键反码
REM_TIME EQU 60H
REM_SIGN EQU 61H ;遥控进程标记
AD_SIGN EQU 62H ;A/D进程标记(#0电容放电,#1数据检测,#2完成检测存入数据AD_DATA)
AD_CLR EQU 63H ;A/D放电时间记忆单元
AD_CYC EQU 64H ;A/D周期判断
AD_TEM EQU 65H ;A/D数据暂存
AD_TIME1 EQU 66H ;A/D模拟运算速度
AD_TIME2 EQU 67H ;A/D自动屏谱上升速度
AD_SIM1 EQU 68H
AD_SIM2 EQU 69H
AD_SIM3 EQU 6AH
AD_SIM4 EQU 6BH
AD_SIM5 EQU 6CH
AD_SIM6 EQU 6DH
AD_DATA1 EQU 6EH
AD_DATA2 EQU 6FH
AD_DATA3 EQU 70H
AD_DATA4 EQU 71H
AD_DATA5 EQU 72H
AD_DATA6 EQU 73H
AUTO_NUM EQU 74H ;AD_DATA1连续为0的数量统计标记
AUTO_TIME EQU 75H
TIME1 EQU 76H ;主循环执行时间
TIME2 EQU 77H ;显示缓冲区数据处理间隔时间
DISP_H EQU 78H
DISP_L EQU 79H
MTD5 EQU 7AH ;做数据保护缓存
MTD4 EQU 7BH
MTD3 EQU 7CH
MTD2 EQU 7DH
MTD1 EQU 7EH
DATA_16210 EQU 7FH
BOOT_START EQU 20H.0 ;开机置0,读完预置1
LOUND_FLAG EQU 20H.1 ;#0为LOUND OFF,#1为LOUND ON
MUTE_FLAG EQU 20H.2 ;#0为MUTE OFF,#1为MUTE ON
START_FLAG EQU 20H.3 ;第一次运行标记,#0为未初始化,#1已初始化
AUTO_FLAG EQU 20H.4 ;屏谱标记,#0为自动模式,#1信号模式
POWER_FLAG EQU 20H.5
;/////////////////////////////////////////////////////////////////////////////////////////
ORG 0000H
JMP MAIN
ORG 0003H
JMP INT_REM
ORG 000BH
JMP TIME
ORG 001BH
JMP AD_GO
;-----------------------------------------------------------------------------------------
MAIN: MOV R0,#95
MOV R1,#20H
CLEAR_RAM: MOV @R1,#0 ;20H-7FH全部清0
INC R1
DJNZ R0,CLEAR_RAM
MOV P2,#0FFH
CALL DESTINE ;调用开机预设
MOV TL1,#06H
MOV TH1,#06H
MOV SP,#10H ;堆栈用10H-24H共20个单元
MOV IE,#138
MOV TMOD,#33
MOV IP,#195
CALL REST_16210
CALL START_VFD ;PT6311段位设置
CALL BRIGHT ;PT6311亮度设置
SETB IT0
SETB TR1
;/////////////////////////////////////////////////////////////////////////////////////////
RUN_STA: MOV A,TIME1
CJNE A,#1,RUN2
JMP GIF_1 ;跳转到显示
GIF_END: INC TIME1
JMP RUN_END
;-----------------------------------------------------------------------------------------
RUN2: MOV A,TIME1
CJNE A,#3,RUN3
JB START_FLAG,RUN2_01 ;字幕左移和音量自动提升完成则跳转
MOV A,GIF_SIGN
CJNE A,#1,RUN2_3
JMP RUN2_4
RUN2_3: CALL STA ;调用开机音量自动提升
RUN2_4: JMP RUN2_1
RUN2_01: JMP KEY_GO ;键盘处理
RUN2_02: JMP KEY_REST ;键盘复位
RUN2_1: INC TIME1
JMP RUN_END
;-----------------------------------------------------------------------------------------
RUN3: MOV A,TIME1
CJNE A,#5,RUN4
JMP AUTO_RUN ;调用无信号自动频谱设定子程序(改变AUTO_SIGN值)
RUN3_1: JMP AD_INTO ;调用AD模拟值运算
RUN3_2: INC TIME1
JMP RUN_END
RUN4: MOV A,TIME1
CJNE A,#7,RUN16210
CLR TR1
JMP WR_VFD ;写入PT6311数据
RUN4_1: SETB TR1
INC TIME1
JMP RUN_END
RUN16210: MOV A,TIME1
CJNE A,#15,RUN5
JMP VFD_16210
RUN16210_1: INC TIME1
JMP RUN_END
;-----------------------------------------------------------------------------------------
RUN5: MOV A,TIME1
CJNE A,#21,RUN_END
JMP RD_KEY ;读如按键值并把他分析结果存放到KEY_NUM中
RUN5_1: MOV TIME1,#0
RUN_END: JMP RUN_STA ;主程循环
;/////////////////////////////////////////////////////////////////////////////////////////
START_VFD:
CLR PT6311_STB
MOV A,#0CH
CALL OUTDATA
SETB PT6311_STB
RET
BRIGHT: CLR PT6311_STB
MOV A,#0BeH
CALL OUTDATA
SETB PT6311_STB
RET
REST_16210:
SETB CS16210_EN
MOV A,#0
CALL SEND_16210
SETB CS16210_CP
CLR CS16210_EN
CLR CS16210_CP
RET
;/////////////////////////////////////////////////////////////////////////////////////////
VFD_16210:
SETB CS16210_EN
MOV A,#0EFH
CALL SEND_16210
SETB CS16210_CP
CLR CS16210_EN
CLR CS16210_CP
JMP RUN16210_1
SEND_16210:
mov r0,#8
setb CS16210_din
nop
send_16210_1: clr CS16210_cp
rrc a
mov CS16210_din,c
setb CS16210_cp
djnz r0,send_16210_1
ret
;/////////////////////////////////////////////////////////////////////////////////////////
;开机音量提升
STA: INC DELAY_DATA
MOV A,DELAY_DATA
CJNE A,#45,STA_RET
MOV DELAY_DATA,#0
CALL RM1
CALL DATA_IN
MOV A,MAIN_DATA
CJNE A,#21,STA_RET
MOV SYS_SIGN,#17
SETB EX0
SETB START_FLAG
SETB AUTO_FLAG
STA_RET: RET
;/////////////////////////////////////////////////////////////////////////////////////////
AUTO_RUN: JNB START_FLAG,AUTO_RET
JMP AUTO2
; MOV A,AD_DATA1
; JZ AUTO1
; SETB AUTO_FLAG
; MOV AUTO_NUM,#0
; MOV DP_MODE,DP_SAVE
; MOV AD_TIME2,#0
; MOV AUTO_NUM,#0
; JMP AUTO_RET
;-----------------------------------------------------------------------------------------
AUTO1: JNB AUTO_FLAG,AUTO2
INC AD_TIME2
MOV A,AD_TIME2
CJNE A,#20,AUTO_RET
MOV AD_TIME2,#0
INC AUTO_NUM
MOV A,AUTO_NUM
CJNE A,#100,AUTO_RET
MOV AUTO_NUM,#0
CLR AUTO_FLAG
MOV DP_MODE,#0
MOV DP_NUM,#0
JMP AUTO_RET
;-----------------------------------------------------------------------------------------
AUTO2: INC AD_TIME2
MOV A,AD_TIME2
CJNE A,#80,AUTO_RET
MOV AD_TIME2,#0
INC DP_NUM
MOV A,DP_NUM
CJNE A,#11,AUTO_RET
MOV DP_NUM,#0
BB0: MOV A,DP_MODE
CJNE A,#0,BB1
MOV DP_MODE,#1
JMP AUTO_RET
BB1: CJNE A,#1,BB2
MOV DP_MODE,#2
JMP AUTO_RET
BB2: CJNE A,#2,BB3
MOV DP_MODE,#3
JMP AUTO_RET
BB3: MOV DP_MODE,#0
AUTO_RET: JMP RUN3_1
;/////////////////////////////////////////////////////////////////////////////////////////
;A/D显示屏谱值运算
AD_INTO: INC AD_TIME1
IN01: MOV A,AD_TIME1
CJNE A,#10,IN02
MOV A,AD_SIM1
CJNE A,AD_DATA1,INTO_01
JMP IN02
INTO_01: SUBB A,AD_DATA1
JNC AD_SUB
AD_UP: MOV A,AD_SIM1
INC A
MOV AD_SIM1,A
JMP IN02
AD_SUB: MOV A,AD_SIM1
DEC A
MOV AD_SIM1,A
JMP INTO_RET
;-----------------------------------------------------------------------------------------
IN02: MOV A,AD_TIME1
CJNE A,#20,IN03
MOV A,AD_SIM2
CJNE A,AD_DATA1,INTO_02
JMP IN03
INTO_02: SUBB A,AD_DATA1
JNC AD_SUB2
AD_UP2: MOV A,AD_SIM2
INC A
MOV AD_SIM2,A
JMP IN03
AD_SUB2: MOV A,AD_SIM2
DEC A
MOV AD_SIM2,A
JMP INTO_RET
;-----------------------------------------------------------------------------------------
IN03: MOV A,AD_TIME1
CJNE A,#30,IN04
MOV A,AD_SIM3
CJNE A,AD_DATA1,INTO_03
JMP IN04
INTO_03: SUBB A,AD_DATA1
JNC AD_SUB3
AD_UP3: MOV A,AD_SIM3
INC A
MOV AD_SIM3,A
JMP IN04
AD_SUB3: MOV A,AD_SIM3
DEC A
MOV AD_SIM3,A
JMP INTO_RET
;-----------------------------------------------------------------------------------------
IN04: MOV A,AD_TIME1
CJNE A,#40,IN05
MOV A,AD_SIM4
CJNE A,AD_DATA1,INTO_04
JMP IN05
INTO_04: SUBB A,AD_DATA1
JNC AD_SUB4
AD_UP4: MOV A,AD_SIM4
INC A
MOV AD_SIM4,A
JMP IN05
AD_SUB4: MOV A,AD_SIM4
DEC A
MOV AD_SIM4,A
JMP INTO_RET
;-----------------------------------------------------------------------------------------
IN05: MOV A,AD_TIME1
CJNE A,#50,IN06
MOV A,AD_SIM5
CJNE A,AD_DATA1,INTO_05
JMP IN06
INTO_05: SUBB A,AD_DATA1
JNC AD_SUB5
AD_UP5: MOV A,AD_SIM5
INC A
MOV AD_SIM5,A
JMP IN06
AD_SUB5: MOV A,AD_SIM5
DEC A
MOV AD_SIM5,A
JMP INTO_RET
;-----------------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -