历史上的今天
今天是:2025年01月07日(星期二)
2018年01月07日 | 遥控6声道AV机PT6311的汇编程序
2018-01-07 来源:eefocus
;;;;;;;;;;;;;;;;;;;6CH AMPLIFIER;;;;;;;;;;;;;;;;
;----脚位定义-----
;;;;;;;;;;;;;;;;;;;6CH AMPLIFIER;;;;;;;;;;;;;;;;
;----脚位定义-----
PT6311_CLK EQU P3.4
PT6311_STB EQU P3.5
PT6311_DATA EQU P3.3
UP EQU P3.1
DOEN EQU P3.0
PT2313_DATA EQU P0.7
PT2313_CLK EQU P2.7
AC3 EQU P2.6 ;(控制4053的信号)
M62429_DA EQU P2.3 ;(SURL/R)
M62429_CK EQU P2.4
M62429_CK1 EQU P2.5 ;(C/BW)
M62429_CK3 EQU P0.0 ;(ECHO,MVOL)
M62429_DA3 EQU P1.7
M_DELAY1 EQU P0.1
M_DELAY2 EQU P0.2
AD_OUT BIT P0.5
AD_IN BIT P0.6
;----片内RAM定义--------
GIF_SIGN EQU 40H ; 动画进程标记(=1,走过场字幕 )
GIF_TIME1 EQU 41H ; 动画跑字的时间间隔速度
GIF_LONG EQU 42H ; 动画字幕的长度
DISP_BUFFER EQU 43H ; 显示缓冲区地址指针
DISP_INDEX EQU 44H ; PT6311片内地址指针
INPUT_DATA EQU 60H ;(CD/VCD=1,TUNER=2,AC3=3)
BASS_DATA EQU 45H
TR_DATA EQU 46H
MAIN_DATA EQU 47H
BAL_DATA EQU 48H
MVOL_DATA EQU 49H
ECHO_DATA EQU 4AH
SURL_DATA EQU 4BH
SURR_DATA EQU 4CH
CEN_DATA EQU 4EH
BW_DATA EQU 4FH
DELAY_DATA EQU 50H
DSP_DATA EQU 51H
CH_DATA EQU 52H ;CH_DATA=#0,5.1CH CH_DATA=#1,3.1CH CH_DATA=#2,2.1CH CH_DATA=#3,2.0CH
KEY_NUM EQU 53H ;按键编号,INPUT=2,MAIN=3,OK=4,V-=5,V+=1
KEYNUM_SAVE EQU 54H ;按键过去式记录
SYS_SIGN EQU 55H ;真值表
KEY_DELAY EQU 56H ;每执行一次按键处理所间隔的时间
DIV_16 EQU 57H
DP_NUM EQU 58H ;自动电平当前进度的格数
DP_MODE EQU 59H ;电平显示模式,分单针显示,双针显示等多种多样
REM_SIGN EQU 5AH ;
REM_FIX EQU 5BH ;
REM_KEY EQU 5DH ;
REM_KEY1 EQU 5EH ;
REM_TIME EQU 5FH ;
AD_SIGN EQU 61H ;AD进程标记 (=0则把电容放电,=1则进行数据检测,=2则表示检测完成,存入数据到AD_DATA)
AD_CLR EQU 62H ;AD放电时间记忆单元
AD_CYC EQU 6AH ;AD判断周期记忆单元
AD_TEM EQU 63H ;AD数据临时保存单元
AD_DATA1 EQU 64H ;AD转换最终存放数据
AD_TIME EQU 65H ;AD模拟运算速度调节
AD_SIM1 EQU 66H ;AD模拟运算结果保存单元1
AD_SIM2 EQU 67H ;AD模拟运算结果保存单元2
AD_SIM3 EQU 68H ;AD模拟运算结果保存单元3
AD_SIM4 EQU 69H ;AD模拟运算结果保存单元4
AD_TIME2 EQU 21H ;AD自动电平上升时间
AD_DATA2 EQU 6BH ;AD转换最终存放数据2
AD_DATA3 EQU 6CH ;AD转换最终存放数据3
AD_DATA4 EQU 6DH ;AD转换最终存放数据4
AUTO_NUM EQU 6EH ;AD_DATA1连续为0的数量统计标记
AUTO_TIME EQU 6FH
DP_SAVE EQU 70H ;显示模式记忆单元
TIME1 EQU 71H ;主循环执行时间
TIME2 EQU 72H ;显示缓冲区数据处理间隔时间
DISP_H EQU 73H
DISP_L EQU 74H
MTD5 EQU 75H
MTD4 EQU 76H
MTD3 EQU 77H
MTD2 EQU 78H
MTD1 EQU 79H
KEY_CELL EQU 7AH ;(7FH-7AH为6个键值保存单元)
POWER EQU 20H.4 ;开关机标记,POWER=0,开机 POWER=1,关机
BOOT_STR EQU 20H.5 ;开机初始化标记,首次开机时候置0,读完预置后置1
MUTE_DATA EQU 20H.0 ;MUTE=1,开 MUTE=0,关
LOUND_DATA EQU 20H.1 ;LOUND_DATA=1,开等响,LOUND=0,关等响
STA_DATA EQU 20H.2 ;STA_DATA=0,表示第一次开机 STA_DATA=1,表示开机初始化结束
AUTO_SIGN EQU 20H.3 ;AUTO=0,频谱自走 AUTO=1,显示AD转换结果
;;;;;;;资源占用情况;;;;;;;;
;R7: DISP子程序占用,可通用
;R4,R5 复位占用,独立
;R0,R1,R2 I2C协议占用,可通用
;R3 NC
;R6 通用
;-------------------
ORG 00H
JMP MAIN
ORG 0003H ;EX0中断程序入口,遥控占用
JMP INT
ORG 000BH ;T0溢出中断入口,遥控接收码时间脉宽测量
JMP TIME
ORG 001BH ;T1中断入口
JMP AD_GO
;显示中断入口
MAIN: SETB P2.0
JNB P2.0,$
MOV R0,#95 ;把所有单元数据清0
MOV R1,#20H
FRIST1: MOV @R1,#0
INC R1
DJNZ R0,FRIST1
MOV P3,#0FFH
CALL DESTINE ;调用预设,并把显示缓冲区清0,把动画进程置1
MOV TL1,#06H ;T1中断时间:250ns
MOV TH1,#06H
MOV SP,#10H ;10H-24H共20个单元作为堆栈
MOV IE,#138 ;开中断总开关、允许EX0、T0,T1中断
MOV TMOD,#33 ;设T0为16位定时器,软启动,T1为自动重装8位计数器
MOV IP,#195 ;设定T0,EX0为高级中断,T1为低级中断(设定后遥控不受T1工作干扰)
CALL START_VFD ;设置PT6311显示段数 (13位15段)
CALL BRIGHT ;设置PT6311亮度子程序14/16
SETB IT0 ;外部中断0为边沿触发方式
SETB TR1 ;T1是显示中断入口
;------------------------------主循环-------------------------------------------
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
RUN_STA : JNB P2.0,$
MOV A,TIME1
CJNE A, #1,RUN2
JMP GIF_1 ;
DISP_B: INC TIME1
JMP RUN_END
;xxxxxxxxxxxxxxXXXXXXXXXXXXXXXXXXXXX
RUN2: MOV A,TIME1
CJNE A,#3,RUN3
JB STA_DATA,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
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
RUN3: MOV A,TIME1
CJNE A,#5,RUN4
JMP AUTO ;调用无信号自动频谱设定子程序(改变AUTO_SIGN值)
RUN3_1: JMP AD_INTO ;调用AD模拟值运算
RUN3_2: INC TIME1
JMP RUN_END
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
RUN4: MOV A,TIME1
CJNE A,#7,RUN5
CLR TR1
JMP WR_VFD ;写入PT6311数据
RUN4_1: SETB TR1
INC TIME1
JMP RUN_END
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
RUN5: MOV A,TIME1
CJNE A,#21,RUN_END
JMP RD_KEY ;读如按键值并把他分析结果存放到KEY_NUM中
RUN5_1: MOV TIME1,#0
;xxxxxxxxxxxxxx
RUN_END: JMP RUN_STA
;;;;;;;;;;;;;;;;;;;开机自走程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
STA: INC DELAY_DATA ;借用DELAY_DATA
MOV A,DELAY_DATA
CJNE A,#45,SAT_RET
MOV DELAY_DATA,#0
CALL RM1 ;每调用一次音量+1
CALL DATA_IN ;初始化结束,调用一次芯片输入程序
MOV A,MAIN_DATA
CJNE A,#20,SAT_RET
MOV SYS_SIGN,#17 ;自跑字幕结束后显示INPUT选项
SETB EX0 ;音量提升完后才开启EX0遥控接口
SETB STA_DATA ;开始程序结束,STA_DATA置1
SETB AUTO_SIGN
SAT_RET: RET
;;;;;;;;;;;;;;;;;;无信号自动频谱设定子程序;;;;;;;;;;;;;;;;;;;;;;;;;;
AUTO: JNB STA_DATA,AUTO_RET ;开机状态下无需改变AUTO_SIGN值,直接退出
MOV A,AD_DATA1
JZ AUTO1 ;检测到没信号转无信号处理
SETB AUTO_SIGN ;只要一检测到AD_CYCA有信号,马上把AUTO_SIGN=1,使自走程序停止
MOV AUTO_NUM,#0 ;AD转换值连续=0的计数器
MOV DP_MODE,DP_SAVE ;恢复自走前设定的频谱模式
MOV AD_TIME2,#0
MOV AUTO_NUM,#0
JMP AUTO_RET ;检测到有信号则跳过自动频谱处理
;---------------------------------
AUTO1: JNB AUTO_SIGN,AUTO2 ;产生自跑信号自跑程序(令AUTO_SIGN=0)
INC AD_TIME2
MOV A,AD_TIME2
CJNE A,#20,AUTO_RET
MOV AD_TIME2,#0
INC AUTO_NUM ;AUTO_NUM产生自动电平的时间值
MOV A,AUTO_NUM
CJNE A,#100,AUTO_RET
MOV AUTO_NUM,#0
CLR AUTO_SIGN ;检测到200次AD_DATA为0,即100次无信号,SIGN置0
MOV DP_MODE,#0
MOV DP_NUM,#0
JMP AUTO_RET
;----------------------------------- ;自动频谱处理
AUTO2 : INC AD_TIME2 ;AD自动电平上升进程
MOV A,AD_TIME2
CJNE A,#80,AUTO_RET
MOV AD_TIME2,#0
INC DP_NUM
MOV A,DP_NUM
CJNE A,#13,AUTO_RET ;自动电平上升极限是不是14格(0也算1格)
MOV DP_NUM,#0
BB0: MOV A,DP_MODE ;每隔14个步长自动转换一次频谱
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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AD模拟值运算;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
AD_INTO: INC AD_TIME
MOV A,AD_TIME
CJNE A,#10,IN02 ;------------------------------------------模拟比较1
MOV A,AD_SIM1
CJNE A,AD_DATA1,INTO_01
JMP IN02 ;如果前后电平没变化,则AD_SIM1保持不变
INTO_01: SUBB A,AD_DATA1
JNC AD_SUB ;AD_SIM1大于当前AD_DATA值,转AD_SUB减处理
AD_UP: MOV A,AD_SIM1 ;AD_SIM1小于当前AD_DATA值,转AD_CYC减处理
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_TIME ;------------------------------------------模拟比较2
CJNE A,#20,IN03
MOV A,AD_SIM2
CJNE A,AD_DATA1,INTO_02
JMP IN03 ;如果前后电平没变化,则AD_SIM2保持不变
INTO_02: SUBB A,AD_DATA1
JNC AD_SUB2 ;AD_SIM2大于当前AD_DATA2值,转AD_SUB减处理
AD_UP2: MOV A,AD_SIM2 ;AD_SIM2小于当前AD_DATA2值,转AD_CYC减处理
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_TIME ;;------------------------------------------模拟比较3
CJNE A,#30,IN04
MOV A,AD_SIM3
CJNE A,AD_DATA1,INTO_03
JMP IN04 ;如果前后电平没变化,则AD_SIM2保持不变
INTO_03: SUBB A,AD_DATA1
JNC AD_SUB3 ;AD_SIM2大于当前AD_DATA2值,转AD_SUB减处理
AD_UP3: MOV A,AD_SIM3 ;AD_SIM2小于当前AD_DATA2值,转AD_CYC减处理
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_TIME ;------------------------------------------模拟比较4
CJNE A,#40,INTO_RET
MOV AD_TIME,#0
MOV A,AD_SIM4
CJNE A,AD_DATA1,INTO_04
JMP INTO_RET ;如果前后电平没变化,则AD_SIM2保持不变
INTO_04: SUBB A,AD_DATA1
JNC AD_SUB4 ;AD_SIM2大于当前AD_DATA2值,转AD_SUB减处理
AD_UP4: MOV A,AD_SIM4 ;AD_SIM2小于当前AD_DATA2值,转AD_CYC减处理
INC A
MOV AD_SIM4,A
JMP INTO_RET
AD_SUB4: MOV A,AD_SIM4
DEC A
MOV AD_SIM4,A
INTO_RET: JMP RUN3_2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示数据的处理;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
GIF_1: JNB POWER,GIF_V1
JMP GIF_V2
GIF_V1: CALL CLR_ALL ;查看是否有关机标记,有则把显示缓冲区清0
JMP RET1
GIF_V2: MOV 3AH,#0CH ;G13的数据数据输入(点亮装析图标)
MOV 3BH,#111111B
JNB STA_DATA,GIF_V9 ;开机初始化时候不显示频谱
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;频谱输入;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV R0,#22H ;显示频谱时先把旧显示数据清空
MOV R1,#8
GIF_V3: MOV @R0,#0
INC R0
DJNZ R1,GIF_V3
V3_0: MOV A,DP_MODE ; 频谱模式的转换
CJNE A,#0,V3_1
MOV DPTR,#TAB26
V3_1: CJNE A,#1,V3_2
MOV DPTR,#TAB27
V3_2: CJNE A,#2,V3_3
MOV DPTR,#TAB28
V3_3: CJNE A,#3,V3_4
MOV DPTR,#TAB29
V3_4: CJNE A,#4,V3_5
MOV DPTR,#TAB30
V3_5: CJNE A,#5,V3_8
MOV DPTR,#TAB31
V3_8: JB AUTO_SIGN, V3_12 ;是信号频谱则转相关处理
MOV R0,#29H ;是自动频谱转相关处理
MOV R1,#4
V3_11: MOV A,DP_NUM
RL A
MOVC A,@A+DPTR
MOV @R0,A
DEC R0
MOV A,DP_NUM
RL A
INC A
MOVC A,@A+DPTR
MOV @R0,A
DEC R0
DJNZ R1,V3_11
JMP GIF_1D
V3_12: MOV R0,#29H ;-------------;G1-G4数据输入(显示频谱)
MOV R1,#AD_SIM1
MOV R2,#4 ;-----------一个循环输入2个字节,4次刚好把8个缓冲区数据处理完毕
GIF_V4: MOV A,@R1
RL A
MOVC A, @A+DPTR
MOV @R0,A
DEC R0
MOV A,@R1
RL A
INC A
MOVC A,@A+DPTR
MOV @R0,A
DEC R0
INC R1
DJNZ R2,GIF_V4
GIF_1D: MOV A, 23H ;加上装饰条
ADD A, #40H
MOV 23H,A
MOV A, 29H ;加上装饰条
ADD A, #40H
MOV 29H,A
JMP GIF_1C
;-------------------------------------------------------------
GIF_V9: MOV 22H,#0 ;开机音量自跑过程中不显示频谱,把G1-G4数据清空(!!!!!!!!!)
MOV 23H,#60H ;留下装惜条和显示最低位频谱(20H+40H)
MOV 24H,#0
MOV 25H,#20H ;显示最低位频谱
MOV 26H,#0
MOV 27H,#20H ;显示最低位频谱
MOV 28H,#0
MOV 29H,#60H ;留下装惜条和显示最低位频谱(20H+40H)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 跑过场字幕;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GIF_1C: MOV A,GIF_SIGN
CJNE A,#1,GIF_2
INC GIF_TIME1
MOV A,GIF_TIME1
CJNE A,#70,GIF_A1 ;跑字速度
MOV GIF_TIME1,#0
MOV DPTR,#TAB2
CALL GIF_LEFT ;调用左移一位子程序
INC GIF_LONG ;动画字幕长度
MOV A,GIF_LONG
CJNE A,#23,C5_1 ;跑23步后结束
MOV GIF_LONG,#0
MOV GIF_SIGN,#2 ;开机序幕结束,SIGN=2
GIF_A1: JMP RET1
;;-----------------------------------------------------------------------------------------------
;;-----------------------------------------------------------------------------------------------
GIF_2: MOV A,GIF_SIGN ;;;;;;;;;--------------------------显示带功能的数值,如VOL,BASS,ECHO等
CJNE A,#2,GIF_X1
MOV R0,#2CH ;G6-G12字母区数据前先把该处理区的数据清空免得重叠
MOV R1,#14
GIF_2X: MOV @R0,#0
INC R0
DJNZ R1,GIF_2X
GIF_2A: INC GIF_TIME1 ;GIF_SIGN=2的持续时间
MOV A,GIF_TIME1
CJNE A,#150, GIF_0B
MOV GIF_TIME1,#0
INC GIF_LONG
MOV A,GIF_LONG
CJNE A,#30,GIF_0B
MOV GIF_LONG,#0
MOV GIF_SIGN,#3
JMP RET1
GIF_0B: MOV R7,SYS_SIGN ;处理G9-G13的显示缓冲区数据
CJNE R7,#0,GIF_C
MOV DPTR,#TAB4 ;----------主音量显示 (NO1)
CALL GIF_DIG4 ;----------调用高4位显示(G12-G9的显示)
MOV DPTR,#TAB3
MOV A, MAIN_DATA ;----------主音量分解
CALL GIF_DG3A ;----------调用低3位显示数据(G8-G6的显示)
JMP RET1
GIF_X1: LJMP GIF_3
GIF_C: ;-----------------------------输入INPUT显示 (NO2)
CJNE R7,#17,GIF_D
MOV R6,INPUT_DATA
CJNE R6,#1,GIF_C2
MOV DPTR,#TAB18 ;显示CD/VCD
CLR AC3 ;4053的控制信号
JMP GIF_C5
GIF_C2: CJNE R6,#2,GIF_C3
MOV DPTR,#TAB19 ;显示TUNER
CLR AC3
JMP GIF_C5
GIF_C3: MOV DPTR,#TAB20 ;显示AC-3
SETB AC3
GIF_C5: CALL GIF_DIG7 ;-----------调用7位显示数据(G6-G12)
C5_1: JMP RET1
GIF_D: CJNE R7,#1,GIF_E;-----------输入BASS显示 (NO3)
MOV DPTR,#TAB5
CALL GIF_DIG4
MOV DPTR,#TAB21
MOV A,BASS_DATA
CALL GIF_DG3B
JMP RET1
GIF_E: CJNE R7,#2,GIF_F;-----------输入TREBLE显示 (NO4)
MOV DPTR,#TAB6
CALL GIF_DIG4
MOV DPTR,#TAB21
MOV A,TR_DATA
CALL GIF_DG3B
JMP RET1
GIF_F: CJNE R7,#3,GIF_G
MOV DPTR,#TAB13 ;----------MVOL显示 (NO5)
CALL GIF_DIG4 ;----------调用高4位显示(G12-G9的显示)
MOV DPTR,#TAB3
MOV A, MVOL_DATA ;----------MVOL音量分解
CALL GIF_DG3A ;----------调用低3位显示数据(G8-G6的显示)
JMP RET1
GIF_G: CJNE R7,#4,GIF_H
MOV DPTR,#TAB12 ;----------MECHO显示 (NO6)
CALL GIF_DIG4 ;----------调用高4位显示(G12-G9的显示)
MOV DPTR,#TAB3
MOV A, ECHO_DATA ;----------ECHO分解
CALL GIF_DG3A ;----------调用低3位显示数据(G8-G6的显示)
JMP RET1
GIF_H: CJNE R7,#5,GIF_I
MOV DPTR,#TAB14 ;----------DELAY显示 (NO7)
CALL GIF_DIG4 ;----------调用高4位显示(G12-G9的显示)
MOV DPTR,#TAB3
MOV A, DELAY_DATA ;----------DELAY分解
CALL GIF_DG3A ;----------调用低3位显示数据(G8-G6的显示)
JMP RET1
GIF_I: CJNE R7,#6,GIF_J
MOV DPTR,#TAB8 ;----------SL显示 (NO8)
CALL GIF_DIG4 ;---------调用高4位显示(G12-G9的显示)
MOV DPTR,#TAB3
MOV A, SURL_DATA ;----------SL音量分解
CALL GIF_DG3A ;----------调用低3位显示数据(G8-G6的显示)
JMP RET1
GIF_J: CJNE R7,#7,GIF_K
MOV DPTR,#TAB9 ;----------SR显示 (NO9)
CALL GIF_DIG4 ;---------调用高4位显示(G12-G9的显示)
MOV DPTR,#TAB3
MOV A, SURR_DATA ;----------SUR音量分解
CALL GIF_DG3A ;----------调用低3位显示数据(G8-G6的显示)
JMP RET1
GIF_K: CJNE R7,#8,GIF_L
MOV DPTR,#TAB11 ;---------CEN显示 (NO10)
CALL GIF_DIG4 ;---------调用高4位显示(G12-G9的显示)
MOV DPTR,#TAB3
MOV A, CEN_DATA ;----------CEN音量分解
CALL GIF_DG3A ;----------调用低3位显示数据(G8-G6的显示)
JMP RET1
GIF_L: CJNE R7,#9,GIF_M
MOV DPTR,#TAB10 ;----------BW显示 (NO11)
CALL GIF_DIG4 ;---------调用高4位显示(G12-G9的显示)
MOV DPTR,#TAB3
MOV A, BW_DATA ;----------BW音量分解
CALL GIF_DG3A ;----------调用低3位显示数据(G8-G6的显示)
JMP RET1
GIF_M: CJNE R7,#11,GIF_N
MOV DPTR,#TAB15 ;----------DISP显示 (NO12)
CALL GIF_DIG4 ;---------调用高4位显示(G12-G9的显示)
MOV DPTR,#TAB3
MOV A, DSP_DATA ;----------DSP分解
CALL GIF_DG3A ;----------调用低3位显示数据(G8-G6的显示)
JMP RET1
GIF_N: CJNE R7,#15,GIF_O ; (NO13)
MOV DPTR,#TAB22
JNB MUTE_DATA,GIF_N1 ;不是静音状态不显示静音, 显示主音量值
CALL GIF_DIG7
JMP RET1
GIF_N1: MOV SYS_SIGN,#0
JMP RET1
GIF_O: CJNE R7,#13,GIF_P ;显示5.1ch (NO12)
MOV DPTR,#TAB16
CALL GIF_DIG7
JMP RET1
GIF_P: CJNE R7,#12,GIF_Q ;显示2.1CH (NO13)
MOV DPTR,#TAB17
CALL GIF_DIG7
JMP RET1
GIF_Q: CJNE R7,#14,GIF_R ; (NO14)
JB LOUND_DATA,GIF_Q1
MOV DPTR,#TAB24
JMP GIF_Q2
GIF_Q1: MOV DPTR,#TAB23
GIF_Q2: CALL GIF_DIG7
JMP RET1
GIF_R: CJNE R7,#20,GIF_S
MOV DPTR,#TAB40
CALL GIF_DIG7
GIF_S: NOP
RET5: JMP RET1
;;--------------------------------------------------------------------------
;;--------------------------------------------------------------------------
GIF_3: CALL CLR_ALL
MOV GIF_SIGN,#1
JMP RET1
RET1: JMP DISP_B
;++++++++++++++++++++++++显示缓冲区清空子程序++++++++++++++++++++++++++++
CLR_ALL: MOV R2,#26 ;把显示缓冲区共28个单元数值清0
MOV R1,#22H
DES2: MOV @R1,#0
INC R1
DJNZ R2,DES2
RET
;+++++++++++++++++++++++++G12-G67位字母左移子程序;++++++++++++++++++++++
GIF_LEFT:MOV 39H,37H;-------------------;G11转G12 ;左移一位子程序
MOV 38H,36H;
MOV 37H,35H;-------------------;G10转G11
MOV 36H,34H
MOV 35H,33H;-------------------;G9转G10
MOV 34H,32H
MOV 33H,31H;-------------------;G8转G9
MOV 32H,30H
MOV 31H,2FH;-------------------;G7转G8
MOV 30H,2EH
MOV 2FH,2DH;-------------------;G6转G7
MOV 2EH,2CH
MOV A,GIF_LONG ;;更新最低位数值
RL A
MOVC A,@A+DPTR
MOV 2CH,A
MOV A,GIF_LONG
RL A
INC A
MOVC A,@A+DPTR
MOV 2DH,A
RET
;+++++++++++++++++++++++++G12-G9高4位字母存入子程序;++++++++++++++++++++++
GIF_DIG4:MOV R1,#8
MOV R2,#0
MOV R0,#39H
DIG4_1: MOV A,R2
MOVC A,@A+DPTR
MOV @R0,A
DEC R0
INC R2
DJNZ R1,DIG4_1
RET
;++++++++++++++++++++++++G6-G8低3位数值输入程序A;++++++++++++++++++++++++++++++++
GIF_DG3A:MOV DIV_16,A
CALL DIV10
MOV A,DISP_H ;输入个位显示数值到显示缓冲区(G8)
RL A
MOVC A,@A+DPTR
MOV 2FH,A
MOV A,DISP_H
RL A
INC A
MOVC A,@A+DPTR
MOV 2EH,A
MOV A,DISP_L ;输入个位显示数值到显示缓冲区(G8)
RL A
MOVC A,@A+DPTR
MOV 2DH,A
MOV A,DISP_L
RL A
INC A
MOVC A,@A+DPTR
MOV 2CH,A
RET
;++++++++++++++++++++++++G6-G8低3位数值输入程序A;++++++++++++++++++++++++++++++++
GIF_DG3B:
MOV B,#6
MUL AB
MOV R1,A
MOV R0,#31H
MOV R2,#6
DG3B_1: MOV A,R1
MOVC A,@A+DPTR
MOV @R0,A
DEC R0
INC DPTR
DJNZ R2,DG3B_1
RET
;+++++++++++++++++++++++++G12-G9 7位字母存入子程序;++++++++++++++++++++++
GIF_DIG7:MOV R1,#14 ;处理14个显示缓冲区,即G6-G12的显示区间
MOV R2,#0 ;DPTR指针
MOV R0,#39H
DIG7_1: MOV A,R2
MOVC A,@A+DPTR
MOV @R0,A
DEC R0
INC R2
DJNZ R1,DIG7_1
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;T1中断部分;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;T1中断部分;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AD模拟值运算;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;T1中断部分;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
AD_GO : INC TIME1
PUSH ACC
PUSH PSW
AD: MOV R3,AD_SIGN
CJNE R3,#0,AD_1
SETB AD_OUT
INC AD_CLR
MOV R3,AD_CLR
MOV AD_TEM,#0
CJNE R3,#50,AD_RET ;;放电250ms (调节该参数的另一功能是可以使显示刷新时间改变)
MOV AD_CLR,#0
MOV AD_CYC,#0
MOV AD_SIGN,#1 ;放电完毕,AD_SIGN置1
JMP AD_RET
AD_1: MOV R3,AD_SIGN
CJNE R3,#1,AD_RET
CLR AD_OUT
INC AD_CYC ;AD检测周期+1
JNB AD_IN,AD_1_1 ;检测到为低电平,AD数据不+1
INC AD_TEM ;检测到为高电平,AD数据不+1
AD_1_1: MOV R3,AD_CYC
CJNE R3,#13,AD_RET ;检测周期为13次
MOV AD_CYC,#0
MOV AD_DATA1,AD_TEM
MOV AD_SIGN,#0 ;AD数据检测结束,AD_SIGN置0
AD_RET: POP PSW
POP ACC
RETI
NOP
NOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PT16311读写程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WR_VFD :
CLR PT6311_STB ;写入一组8位数据
MOV A,#70H ;设置为正常工作,地址增量,写显示数据模式
CALL OUTDATA
SETB PT6311_STB
NOP
NOP
CLR PT6311_STB
MOV A,DISP_INDEX ;设置写入地址指针
MOV DPTR,#TABLE1
MOVC A,@A+DPTR
ADD A,#0C0H ;修正
CLR C
CALL OUTDATA ;
MOV R1,DISP_BUFFER ;把显示缓冲区数据写入PT16311
WR_VFD1: MOV A,@R1
CALL OUTDATA
INC DISP_BUFFER
INC DISP_INDEX
MOV A,DISP_INDEX
CJNE A,#26,WR_QUT ;;扫描完13列后PT6311片内地址指针复0(每列需要2个数据缓冲区数据)
MOV DISP_BUFFER,#22H ;显示缓冲区首址复位
MOV DISP_INDEX,#0H ;片内地址指针复位
WR_QUT: SETB PT6311_STB
NOP
NOP
JMP RUN4_1
OUTDATA: MOV R0,#8 ;写入一个字节子程序
SETB PT6311_DATA
NOP
W1: CLR PT6311_CLK
RRC A
MOV PT6311_DATA,C
SETB PT6311_CLK ;时钟上升沿写入数据
DJNZ R0,W1
RET
START_VFD: CLR PT6311_STB
MOV A,#0CH ;13位15段
CALL OUTDATA ;输入一组数据
SETB PT6311_STB
RET
BRIGHT: CLR PT6311_STB ;设置亮度子程序14/16
MOV A,#0BDH
CALL OUTDATA
SETB PT6311_STB
RET
INDATA: MOV R6,#8 ;读入一个字节子程序(读键盘)
SETB PT6311_DATA ;令PT6311_DATA接口有效
INDATA1: SETB PT6311_CLK ;时钟的下降沿读出数据(??)
CLR PT6311_CLK ;读出一个位
MOV C,PT6311_DATA ;读出的数据暂存位积存器C
RRC A ;位数据入ACC
DJNZ R6,INDATA1
RET
;;------------------------------------------------------------------
RD_KEY: MOV R1,#KEY_CELL ;读键值子程序
MOV R2,#06H ;要读入的键值单元数为6
CLR PT6311_STB ;
MOV A,#76H ;01110110 命令字:读键盘值
CALL OUTDATA ;写入控制字
RD_1: CALL INDATA ;读入键盘键值
MOV @R1,A
INC R1
DJNZ R2,RD_1
SETB PT6311_STB
NOP
CLR PT6311_STB
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;按键键值判断程序(把键值整理后放KEY_NUM中);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY_EX: MOV A,7AH ;判断那一行闭合
JZ KEY_2
MOV R6,#00
JMP TAKE
KEY_2 : MOV A,7BH
JZ KEY_3
MOV R6,#08
JMP TAKE
KEY_3 : MOV A,7CH
JZ KEY_4
MOV R6,#16
JMP TAKE
KEY_4 : MOV A,7DH
JZ KEY_5
MOV R6,#024
JMP TAKE
KEY_5 : MOV A,7EH
JZ KEY_6
MOV R6,#32
JMP TAKE
KEY_6 : MOV A,7FH
JZ RET2 ;无按键按下退出
MOV R6,#40
TAKE: JNB ACC.0,N2 ;判断那一列闭合
MOV R7,#1
JMP ADD_KEY
N2: JNB ACC.1,N3
MOV R7,#2
JMP ADD_KEY
N3: JNB ACC.2,N4
MOV R7,#3
JMP ADD_KEY
N4: JNB ACC.3,N5
MOV R7,#4
JMP ADD_KEY
N5: JNB ACC.4,N6
MOV R7,#5
JMP ADD_KEY
N6: JNB ACC.5,N7
MOV R7,#06
JMP ADD_KEY
N7: JNB ACC.6,N8
MOV R7,#07
JMP ADD_KEY
N8: JNB ACC.7,RET2
MOV R7,#08
ADD_KEY: MOV A,R6
ADD A,R7
MOV KEY_NUM,A
JMP RET3
RET2: MOV KEY_NUM,#00H ;无按键按下键值清0
RET3: JMP RUN5_1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;进制转换子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
DIV10: MOV A,DIV_16 ; 十六进转十进制子程序
MOV B,#100
DIV AB
MOV A,B
MOV B,#10
DIV AB
MOV DISP_H,A ;把十位数值存入高位显示缓冲区
MOV DISP_L,B ;把个位数值存入低位显示缓冲区
RET
;------------------------------------按键处理子程序----------------------------------------
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
KEY_GO: MOV A,KEY_NUM
JZ DELAY_4 ;没按键按下退出
INC KEY_DELAY
MOV A,KEY_DELAY
CJNE A,#130,OUT
MOV A,KEY_NUM
CJNE A,#9,DELAY_0 ;带功能复合键跳过单键处理(KEY_NUM=9,1,5是功能复合键)
JMP DELAY_2
DELAY_0: CJNE A,#1,DELAY_1
JMP DELAY_2
DELAY_1: CJNE A,#5,DELAY_3
DELAY_2: MOV A,KEYNUM_SAVE ;=====================连发/单发的原理=============================
CJNE A,KEY_NUM,DELAY_3 ;如果检测到连续两次都不是同一键按下的,执行该按键的功能的处理
JMP OUT ;如果检测到连续两次都是同一键按下的,不执行该按键的功能处理
DELAY_3: CALL BIJIAO ;调用按键处理程序(要隔2x8x23ms才调用一次按键比较程序,连发一次大约0.5S)
MOV R4,#00
MOV R5,#00
MOV KEY_DELAY,#00H
JMP OUT
DELAY_4: MOV KEY_DELAY,#129
OUT: MOV KEYNUM_SAVE,KEY_NUM
JMP RUN2_02
;---------------------------------按键处理---------------------------------------------
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
BIJIAO: MOV R6,KEY_NUM
CJNE R6,#09,BA_1
MOV SYS_SIGN,#17
CALL INPUT
JMP RET4
BA_1 : CJNE R6,#1,BA_2
CALL MUISE
JMP RET4
BA_2 : CJNE R6,#5,BA_3
CALL KARAOKE
JMP RET4
BA_3 : CJNE R6,#6,BA_4
CALL FRIST ;调用优先比较程序,当在输入状态或等响显示状态下时,按下UP键会把VOL值优先调用提升
CALL VOL_UP
JMP RET4
BA_4 : CJNE R6,#10,RET9
CALL FRIST ;调用优先比较程序,当在输入状态或等响显示状态下时,按下UP键会把VOL值优先调用提升
CALL VOL_DOWN
RET4: CALL DATA_IN
RET9: RET
;-----------
;-----------
INPUT: MOV R5,INPUT_DATA ; (CD/VCD=1,TUNER=2,AC3=3)
CJNE R5,#1,IN1
MOV INPUT_DATA,#2
RET
IN1: CJNE R5,#2,IN2
MOV INPUT_DATA,#3
RET
IN2: MOV INPUT_DATA,#1
RET
;-----------
;-----------
MUISE: MOV R5,SYS_SIGN ;主音量复合键切换
CJNE R5,#0,MUISE1
MOV SYS_SIGN,#1 ;设置为低音
MOV DSP_DATA,#0
RET
MUISE1: CJNE R5,#1,MUISE2
MOV SYS_SIGN,#2 ;设置为高音
MOV DSP_DATA,#0
RET
MUISE2: CJNE R5,#2,MUISE3
MOV SYS_SIGN,#6
RET
MUISE3: CJNE R5,#6,MUISE4
MOV SYS_SIGN,#7
RET
MUISE4: CJNE R5,#7,MUISE5
MOV SYS_SIGN,#8
RET
MUISE5: CJNE R5,#8,MUISE6
MOV SYS_SIGN,#9
RET
MUISE6: MOV SYS_SIGN,#0
RET
;-----------
;-----------
KARAOKE: MOV R5,SYS_SIGN ;卡拉OK真值切换
CJNE R5,#3,KARAOKE1
MOV SYS_SIGN,#4
RET
KARAOKE1:CJNE R5,#4,KARAOKE2
MOV SYS_SIGN,#5
RET
KARAOKE2:CJNE R5,#5,KARAOKE3
MOV SYS_SIGN,#3
RET
KARAOKE3:MOV SYS_SIGN,#3
RET
;-----------
;-----------
VOL_UP: MOV R5,SYS_SIGN
VOL1: CJNE R5,#0,VOL2 ;总音量调节,上限为64
RM1: MOV A,MAIN_DATA ;(遥控占用)
INC A
CJNE A,#65,VOL_1A
JMP VOL_1B
VOL_1A: MOV MAIN_DATA,A
VOL_1B: MOV A,SURL_DATA
INC A
CJNE A,#65,VOL_1C
JMP VOL_1D
VOL_1C: MOV SURL_DATA,A
VOL_1D: MOV A,SURR_DATA
INC A
CJNE A,#65,VOL_1E
JMP VOL_1F
VOL_1E: MOV SURR_DATA,A
VOL_1F: MOV A,CEN_DATA
INC A
CJNE A,#65,VOL_1G
JMP VOL_1H
VOL_1G: MOV CEN_DATA,A
VOL_1H: MOV A,BW_DATA
INC A
CJNE A,#65,VOL_1I
JMP VOL_1J
VOL_1I: MOV BW_DATA,A
VOL_1J: RET
VOL2: CJNE R5,#1,VOL3 ;低音量调节,上限为14
RM3: MOV A,BASS_DATA
INC A
CJNE A,#15,VOL_2A
RET
VOL_2A: MOV BASS_DATA,A
RET
VOL3: CJNE R5,#2,VOL4 ;高音量调节,上限为14
RM4: MOV A,TR_DATA
INC A
CJNE A,#15,VOL_3A
RET
VOL_3A: MOV TR_DATA,A
RET
VOL4: CJNE R5,#3,VOL5 ;卡拉OK量调节,上限为16
RM5: MOV A,MVOL_DATA
INC A
CJNE A,#17,VOL_4A
RET
VOL_4A: MOV MVOL_DATA,A
RET
VOL5: CJNE R5,#4,VOL6 ;ECHO量调节,上限为16
RM6: MOV A,ECHO_DATA
INC A
CJNE A,#17,VOL_5A
RET
VOL_5A: MOV ECHO_DATA,A
RET
VOL6: CJNE R5,#5,VOL7 ;DELAY调节
MOV A,DELAY_DATA
CJNE A,#25,VOL6A
MOV DELAY_DATA,#10
SETB M_DELAY1
SETB M_DELAY2
RET
VOL6A: CJNE A,#10,VOL6B
MOV DELAY_DATA,#15
CLR M_DELAY1
SETB M_DELAY2
RET
VOL6B: CJNE A,#15,VOL6C
MOV DELAY_DATA,#20
SETB M_DELAY1
CLR M_DELAY2
RET
VOL6C: MOV DELAY_DATA,#25
CLR M_DELAY1
CLR M_DELAY2
VOL7: CJNE R5,#6,VOL8 ;SURL调节,上限为64
RM7: MOV A,SURL_DATA
INC A
CJNE A,#65,VOL_7A
RET
VOL_7A: MOV SURL_DATA,A
RET
VOL8: CJNE R5,#7,VOL9 ;SURR调节,上限为64
RM8: MOV A,SURR_DATA
INC A
CJNE A,#65,VOL_8A
RET
VOL_8A: MOV SURR_DATA,A
RET
VOL9: CJNE R5,#8,VOL10 ;CEN调节,上限为64
RM9: MOV A,CEN_DATA
INC A
CJNE A,#65,VOL_9A
RET
VOL_9A: MOV CEN_DATA,A
RET
VOL10: CJNE R5,#9,VOL_11 ;SW调节,上限为64
RM10: MOV A,BW_DATA
INC A
CJNE A,#65,VOL_10A
RET
VOL_10A: MOV BW_DATA,A
VOL_11: RET
;-------------------------------"VOL-"------------------------
VOL_DOWN:MOV R5,SYS_SIGN
V1: CJNE R5,#0,VL2 ;总音量调节,下限为0
RM2: MOV A,MAIN_DATA ;(遥控占用)
DEC A
CJNE A,#255,VL_1A
JMP VL_1B
VL_1A: MOV MAIN_DATA,A
VL_1B: MOV A,SURL_DATA
DEC A
CJNE A,#255,VL_1C
JMP VL_1D
VL_1C: MOV SURL_DATA,A
VL_1D: MOV A,SURR_DATA
DEC A
CJNE A,#255,VL_1E
JMP VL_1F
VL_1E: MOV SURR_DATA,A
VL_1F: MOV A,CEN_DATA
DEC A
CJNE A,#255,VL_1G
JMP VL_1H
VL_1G: MOV CEN_DATA,A
VL_1H: MOV A,BW_DATA
DEC A
CJNE A,#255,VL_1I
JMP VL_1J
VL_1I: MOV BW_DATA,A
VL_1J: RET
VL2: CJNE R5,#1,VL3 ;低音量调节,下限为0
RM12: MOV A,BASS_DATA
DEC A
CJNE A,#255,VL_2A
RET
VL_2A: MOV BASS_DATA,A
VL3: CJNE R5,#2,VL4 ;高音量调节,下限为0
RM13: MOV A,TR_DATA
DEC A
CJNE A,#255,VL_3A
RET
VL_3A: MOV TR_DATA,A
VL4: CJNE R5,#3,VL5 ;卡拉OK量调节,下限为0
RM14: MOV A,MVOL_DATA
DEC A
CJNE A,#255,VL_4A
RET
VL_4A: MOV MVOL_DATA,A
VL5: CJNE R5,#4,VL6 ;ECHO量调节,下限为0
RM15: MOV A,ECHO_DATA
DEC A
CJNE A,#255,VL_5A
RET
VL_5A: MOV ECHO_DATA,A
VL6: CJNE R5,#5,VL7 ;DELAY调节
MOV A,DELAY_DATA
CJNE A,#25,VL6A
MOV DELAY_DATA,#20
CLR M_DELAY2
SETB M_DELAY1
RET
VL6A: CJNE A,#20,VL6B
MOV DELAY_DATA,#15
CLR M_DELAY1
SETB M_DELAY2
RET
VL6B: CJNE A,#15,VL6C
MOV DELAY_DATA,#10
SETB M_DELAY1
SETB M_DELAY2
RET
VL6C: MOV DELAY_DATA,#25
CLR M_DELAY1
CLR M_DELAY2
VL7: CJNE R5,#6,VL8 ;SURL调节,下限为0
RM16: MOV A,SURL_DATA
DEC A
CJNE A,#255,VL_7A
RET
VL_7A: MOV SURL_DATA,A
VL8: CJNE R5,#7,VL9 ;SURR调节,下限为0
RM17: MOV A,SURR_DATA
DEC A
CJNE A,#255,VL_8A
RET
VL_8A: MOV SURR_DATA,A
VL9: CJNE R5,#8,VL10 ;CEN调节,下限为0
RM18: MOV A,CEN_DATA
DEC A
CJNE A,#255,VL_9A
RET
VL_9A: MOV CEN_DATA,A
VL10: CJNE R5,#9,VL11 ;SW调节,下限为0
RM19: MOV A,BW_DATA
DEC A
CJNE A,#255,VL_10A
RET
VL_10A: MOV BW_DATA,A
VL11: RET
;;-------------------------操作优先排位子程序--------------------------------
FRIST: MOV A,SYS_SIGN
CJNE A,#17,FRI_2 ;处在INPUT显示模式下,按下加减键会把VOL操作排在第一位
MOV SYS_SIGN,#0
FRI_2: CJNE A,#13,FRI_3 ;处在5.1显示模式下,按下加减键会把VOL操作排在第一位
MOV SYS_SIGN,#0
FRI_3: CJNE A,#12,FRI_4 ;处在2.0显示模式下,按下加减键会把VOL操作排在第一位
MOV SYS_SIGN,#0
FRI_4: CJNE A,#14,FRI_5 ;处在LOUND显示模式下,按下加减键会把VOL操作排在第一位
MOV SYS_SIGN,#0
FRI_5: CJNE A,#15,FRI_6 ;处在MUTE显示模式下,按下加减键会把VOL操作排在第一位
MOV SYS_SIGN,#0
CLR MUTE_DATA ;顺便把静音也关闭了
FRI_6: RET
;;--------------------------无按键按下自动复位子程序----------------------------
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
KEY_REST: MOV A,KEY_NUM
JNZ BCK_1 ;
BCK_0: INC R4 ;
CJNE R4,#150,BCK_2 ;
BCK_3 : MOV R4,#00H
INC R5
CJNE R5,#16,BCK_2
MOV R5,#00H
MOV SYS_SIGN,#17 ;把SYS_SIGN预置为"INPUT状态"
MOV KEY_DELAY,#129
JMP BCK_2
BCK_1: MOV R4,#00
MOV R5,#00
MOV GIF_SIGN,#2 ;有按键按把GIF_SIGN置2
MOV GIF_LONG,#0
BCK_2: JMP RUN2_1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;I2C协议(PT6311);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;;;;;;;;;;;;;;;;;;;;;;I2C协议;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;; 启动子程序;;;;;;;;;;;;;;;;;;;;;;
START: CLR PT2313_CLK ; CLK在高电平期间PT2313_DATA由高到低变化
SETB PT2313_DATA
NOP
SETB PT2313_CLK
NOP
CLR PT2313_DATA
NOP
CLR PT2313_CLK
RET
;;;;;;;;;;;;;;;;;;;停止子程序;;;;;;;;;;;;;;;;;;;;;;;;
STOP: CLR PT2313_CLK
CLR PT2313_DATA
NOP
NOP
SETB PT2313_CLK
NOP
NOP
SETB PT2313_DATA
NOP
NOP
CLR PT2313_CLK
RET
;;;;;;;;;;;;;;;;;;接收一个应答位;;;;;;;;;;;;;;;;;;;;;;;;;
ACKI: SETB PT2313_CLK
NOP
NOP
MOV C,PT2313_DATA
CLR PT2313_CLK
RET
;;;;;;;;;;;;;;;;;;;发送一个字节子程序;;;;;;;;;;;;;;;;;
SEND: MOV R0,#08H ;要发送的数据字节为8
SEND0: RLC A
MOV PT2313_DATA,C
NOP
NOP
SETB PT2313_CLK
NOP
NOP
CLR PT2313_CLK
NOP
NOP
DJNZ R0,SEND0
SETB PT2313_DATA
RET
;;;;;;;;;;;;;;;;;;;;发送n个字节;;;;;;;;;;;;;;;;;;;;;;;;;;;
OUT_DA: LCALL START
MOV A,#88H ;送写控制字节
LCALL SEND
LCALL ACKI
JC QUIT_1
OUT1: MOV A,MTD1
CALL SEND
CALL ACKI
JC QUIT_1
CALL STOP
RET
QUIT_1: CALL STOP
LJMP OUT_DA ;重发
TIME : PUSH ACC
PUSH PSW
SETB RS0
MOV A, REM_SIGN
CJNE A,#03H,EXIT1 ;不是连发的定时溢出标记清0
INC R1 ;执行一次遥控按键处理后,T0延事超过60ms,R1+1
INC R2 ;T0中断次数存储单元,当T0中断3次(每次60ms),本次遥控结束
MOV A,R2
SUBB A,#3 ;判断在250ms内有无连发码出现
JNC EXIT0 ;无则清0
MOV TH0,#15H ;定时值60MS
MOV TL0,#0A0H
SETB TR0
JMP EXIT2
EXIT0: CLR TR0
MOV R2,#00H
EXIT1: MOV REM_SIGN,#00H
EXIT2: POP PSW
POP ACC
RETI
NOP
NOP
INT : MOV MTD2,A
MOV MTD3,PSW
MOV MTD4,DPH
MOV MTD5,DPL
SETB RS0 ;使用另一组寄存器
MOV R2,#00H
CLR TR0
CLR EX0
MOV R5,REM_SIGN
CJNE R5,#00H,INT_2 ;初始化原始数据
MOV R0,#REM_FIX ;遥控数据接收的首址
MOV R1,#0 ;
MOV R2,#0 ;R2是连发溢出标记,当T0延时60ms*3后仍未检测到有遥控中断,本次遥控结束
MOV R3,#8 ;每个字节的位数
MOV R6,#0 ;数据对比单元
MOV R7,#4 ;要接收的字节数
MOV REM_SIGN,#01H ;建立标记01
JMP INT_OFF
INT_2: CJNE R5,#01H,INT_3 ;起始码和结果码的判断
MOV A,#30H ;
MOV R6,TH0
SUBB A,R6
JNC ERR_OUT ;启动码+结果码<12.55ms退出(忽略TL0的值)
MOV A,#039H
SUBB A,R6
JC ERR_OUT ;启动码+结果码〉14.6ms推出(忽略TL0的值)
MOV REM_SIGN,#02H ;建立标记02
JMP INT_OFF
INT_3: CJNE R5,#02H,INT_4 ;(old key_out)
MOV A,#03H
MOV R6,TH0
SUBB A,R6 ;R6内存TH0的值
JNC ERR_OUT ;周期<1ms退出
MOV A,#0BH
SUBB A,R6
JC ERR_OUT ;周期>2.69ms退出
MOV A,#6H ;输入检测周期1.6ms用来判断1或0
SUBB A,R6 ;
MOV A,@R0 ;
RRC A ;存入一位数值
MOV @R0,A
DJNZ R3,INT_OFF
INT_3_1 :INC R0
MOV R3,#08H
DJNZ R7,INT_OFF
MOV A,REM_KEY1
CPL A
CJNE A,REM_KEY,ERR_OUT ;正反码比较,错则退
MOV REM_TIME,#8 ;
;----------------------------------------------------------
INT_4: ;
;----------------------------------------------------------
KY_OUT: MOV A,REM_SIGN
CJNE A,#3,ODD ;判断遥控是出于第一次按键触发还是处于连发阶段,连发阶段的标记是REM_SIG=3
MOV A,R1 ;连发最小时间判断,过滤掉<60ms的脉冲,因<60ms的脉冲不会令T0溢出
JZ NORUN
ODD : INC REM_TIME ;每连发一次连发记忆单元+1
NORUN: MOV A,REM_TIME ;因为跳过上一步IREM_TIME+1,所以不会执行BIJIAO(不够减)
SUBB A,#5 ;连发5次调用一次按键处理程序
JNC GO_0
JMP GO_1
GO_0: MOV REM_TIME,#00H ;每调用一次按键处理子程序连发记忆单元清0
JMP BIJIAO2
BI_RET: MOV R1,#00
MOV REM_SIGN,#03H ;执行一次按键处理后建立遥控标记#03
GO_1: SETB TR0
JMP INT_OFF1
ERR_OUT: MOV REM_SIGN,#00H ;报错标记清0
LJMP INT_OFF1 ;报错返回不启动定时器
INT_OFF: SETB TR0
INT_OFF1:MOV TH0,#00H
MOV TL0,#00H
SETB EX0
MOV DPL,MTD5
MOV DPH,MTD4
MOV PSW,MTD3
MOV A,MTD2
MOV R4,#0
MOV R5,#0 ;确定遥控结束后的参数复位时间
RETI
NOP
NOP
BIJIAO2: MOV GIF_SIGN,#2 ;动画进程置2,让他显示功能内容
MOV GIF_LONG,#0
MOV R4,REM_KEY
CJNE R4,#2,BI1
CALL RM1 ;总音量调节+
MOV SYS_SIGN,#0
BI1: CJNE R4,#1,BI2
CALL RM2 ;总音量调节-
MOV SYS_SIGN,#0
BI2: CJNE R4,#56H,BI3
MOV DSP_DATA,#0
CALL RM3 ;BASS+
MOV SYS_SIGN,#1 ;调整显示参数
BI3: CJNE R4,#11H,BI4
MOV DSP_DATA,#0
CALL RM4 ;TR+
MOV SYS_SIGN,#2
BI4: CJNE R4,#1DH,BI5
CALL RM5 ;MVOL+
MOV SYS_SIGN,#3
BI5: CJNE R4,#1CH,BI6
CALL RM6 ;ECHO+
MOV SYS_SIGN,#4
BI6: CJNE R4,#50H,BI7 ;SL+
CALL RM7
MOV SYS_SIGN,#6
BI7: CJNE R4,#46H,BI8 ;SR+
CALL RM8
MOV SYS_SIGN,#7
BI8: CJNE R4,#44H,BI9 ;CEN+
CALL RM9
MOV SYS_SIGN,#8
BI9: CJNE R4,#5EH,BI10 ;BW+
CALL RM10
MOV SYS_SIGN,#9
BI10: CJNE R4,#57H,BI11 ;BASS-
MOV DSP_DATA,#0
CALL RM12
MOV SYS_SIGN,#1
BI11: CJNE R4,#0DH,BI12
MOV DSP_DATA,#0
CALL RM13 ;TR-
MOV SYS_SIGN,#2
BI12: CJNE R4,#16H,BI13
MOV DSP_DATA,#0
CALL RM14 ;MVOL-
MOV SYS_SIGN,#3
BI13: CJNE R4,#17H,BI14
CALL RM15 ;ECHO-
MOV SYS_SIGN,#4
BI14: CJNE R4,#53H,BI15
CALL RM16 ;SL-
MOV SYS_SIGN,#6
BI15: CJNE R4,#03H,BI16
CALL RM17 ;SR-
MOV SYS_SIGN,#7
BI16: CJNE R4,#13H,BI17
CALL RM18 ;CEN-
MOV SYS_SIGN,#8
BI17: CJNE R4,#1FH,BI18
CALL RM19 ;BW-
MOV SYS_SIGN,#9
BI18: CJNE R4,#42H,BI19
MOV INPUT_DATA,#1 ;AUX
MOV SYS_SIGN,#17
BI19: CJNE R4,#43H,BI20
MOV INPUT_DATA,#2 ;VCD
MOV SYS_SIGN,#17
BI20: CJNE R4,#0FH,BI21 ;AC3
MOV INPUT_DATA,#3
MOV CH_DATA,#0 ;AC3状态下启动5.1ch
MOV SYS_SIGN,#17
BI21: CJNE R4,#0BH,BI22
MOV DELAY_DATA,#10 ;100MS
SETB M_DELAY2
SETB M_DELAY1
MOV SYS_SIGN,#5
BI22: CJNE R4,#0AH,BI23
MOV DELAY_DATA,#15 ;150MS
CLR M_DELAY1
SETB M_DELAY2
MOV SYS_SIGN,#5
BI23: CJNE R4,#1AH,BI24
MOV DELAY_DATA,#20 ;200MS
CLR M_DELAY2
SETB M_DELAY1
MOV SYS_SIGN,#5
BI24: CJNE R4,#40H,BI25
MOV DELAY_DATA,#25 ;250MS
CLR M_DELAY2
CLR M_DELAY1
MOV SYS_SIGN,#5
BI25: CJNE R4,#0CH,BI26 ;平衡L
MOV SYS_SIGN,#10
MOV A,BAL_DATA
INC A
CJNE A,#9,BI25_0
JMP RET6
BI25_0: MOV BAL_DATA,A
JMP RET6
BI26: CJNE R4,#05H,BI27 ;平衡R
MOV SYS_SIGN,#10
MOV A,BAL_DATA
DEC A
CJNE A,#255,BI26_0
JMP RET6
BI26_0: MOV BAL_DATA,A
JMP RET6
BI27: CJNE R4,#45H,BI28
MOV DSP_DATA,#1 ;DSP1
JMP RET7
BI28: CJNE R4,#8H,BI29
MOV DSP_DATA,#2 ;DSP2
JMP RET7
BI29: CJNE R4,#7H,BI30
MOV DSP_DATA,#3 ;DSP3
JMP RET7
BI30: CJNE R4,#9H,BI31
MOV DSP_DATA,#4 ;DSP4
JMP RET7
BI31: CJNE R4,#47H,BI32
MOV DSP_DATA,#5 ;DSP5
JMP RET7
BI32: CJNE R4,#4CH,BI33
MOV DSP_DATA,#6 ;DSP6
JMP RET7
BI33: CJNE R4,#4AH,BI34
MOV DSP_DATA,#7 ;DSP7
JMP RET7
BI34: CJNE R4,#1BH,BI35
MOV DSP_DATA,#0 ;DSP8
JMP RET7
BI35: CJNE R4,#4DH,BI36 ;MUTE
MOV SYS_SIGN,#15
MOV A,REM_SIGN ;MUTE连发调用无效(REM_SIGN=#3是连发阶段)
CJNE A,#3,BI35A
JMP RET6
BI35A: JNB MUTE_DATA,MUTE1
CLR MUTE_DATA
JMP RET6
MUTE1: SETB MUTE_DATA
BI36: CJNE R4,#49H,BI37 ;2.0CH
; MOV CH_DATA,#3H
MOV A,INPUT_DATA
CJNE A,#3,BI36_1 ;在DVD状态下声道模式不能切换
MOV SYS_SIGN,#20
JMP BI37
BI36_1: MOV SYS_SIGN,#12
MOV CH_DATA,#3H
BI37: CJNE R4,#48H,BI38 ;5.1CH
MOV CH_DATA,#0
MOV SYS_SIGN,#13
BI38: CJNE R4,#5FH,BI39 ;LOUND
MOV SYS_SIGN,#14
MOV A,REM_SIGN ;LOUND连发调用无效(REM_SIGN=#3是连发阶段)
CJNE A,#3,BI38A
JMP RET6
BI38A: JNB LOUND_DATA,LOU1
CLR LOUND_DATA
JMP RET6
LOU1: SETB LOUND_DATA
BI39: CJNE R4,#4FH,BI40
MOV A,REM_SIGN ;DISP_MODE连发调用无效(REM_SIGN=#3是连发阶段)
CJNE A,#3,BI39A
JMP RET6
BI39A: MOV A,DP_MODE ;各种显示模式的切换
CJNE A,#0,BI39B
MOV DP_MODE,#1
BI39B: CJNE A,#1,BI39C
MOV DP_MODE,#2
BI39C: CJNE A,#2,BI39D
MOV DP_MODE,#3
BI39D: CJNE A,#3,BI39F
MOV DP_MODE,#4
BI39F: CJNE A,#4,BI39G
MOV DP_MODE,#5
BI39G: CJNE A,#5,BI39E
MOV DP_MODE,#0
BI39E: MOV DP_SAVE,DP_MODE ; 把DP_MODE模式保存起来
JMP RET6
BI40: CJNE R4,#04H,BI40B ;POWER
MOV A,REM_SIGN ;POWER连发调用无效(REM_SIGN=#3是连发阶段)
CJNE A,#3,BI40A
JMP RET6
BI40A: JNB POWER,destine ;读预设,开机
CLR POWER ;
SETB MUTE_DATA ;收到关机指令后开静音
JMP RET6
BI40B: JMP BI41
DESTINE: ;*******调用预设值********
SETB POWER ;启动电源标记 (只有但POWER=1,才可令MUTE=0关闭静音和关闭显示,关闭显示可以清空显示缓冲)
MOV GIF_SIGN,#1 ;初始化动画进程
MOV GIF_TIME1,#0 ;动画跑字速度间隔时间清0
MOV GIF_LONG,#0 ;动画字幕长度清0
MOV AD_SIM1,#0
MOV AD_SIM2,#0
MOV AD_SIM3,#0
MOV AD_SIM4,#0
MOV AD_TEM,#0 ;电平临时数据
MOV AD_SIGN,#0 ;AD转换进程标记(=0,C放电 =1,测量数据 =2,测量结束)
MOV AD_TIME,#0
MOV DP_MODE,#0 ;电平显示模式
MOV DP_NUM,#0 ;自动电平的当前进度格数
MOV DP_SAVE,#0
CLR STA_DATA ;STA_DATA=0,表示第一次开机 STA_DATA=0,表示开机初始化结束
CLR AUTO_SIGN ;AUTO_SIGN=0,频谱自走 AUTO_SIGN=1,显示AD
MOV AUTO_NUM,#0
MOV KEY_DELAY,#129 ;按键连发执行间隔时间
MOV TIME1,#0 ;总时间刷新
MOV INPUT_DATA,#1 ;预置#1,CD/VCD选通 ;(CD/VCD=1,TUNER=2,AC3=3)
MOV BASS_DATA,#8 ;
MOV TR_DATA,#8
MOV MAIN_DATA,#0
MOV BAL_DATA,#4 ;平衡设置
MOV DSP_DATA,#0 ;预置为DSP关闭
MOV CH_DATA,#0 ;预置为5.1CH
MOV MVOL_DATA,#9
MOV ECHO_DATA,#15
MOV DELAY_DATA,#25 ; 卡拉OK延时时间预设为250mS
CLR M_DELAY1
CLR M_DELAY2
MOV SURL_DATA,#0
MOV SURR_DATA,#0
MOV CEN_DATA,#0
MOV BW_DATA,#0
CLR MUTE_DATA ;关静音
CLR LOUND_DATA ;关等响
MOV SYS_SIGN,#0 ;开机后显示主音量
MOV DISP_BUFFER,#22H ;显示缓冲区首址复位
MOV DISP_INDEX,#0H ;片内地址指针复位
MOV R2,#26 ;把显示缓冲区共28个单元数值清0
MOV R1,#22H
DES1: MOV @R1,#0
INC R1
DJNZ R2,DES1
JNB BOOT_STR,BI40C ;!!!!!!!!!!1检测是第一次开机读预置还是遥控读预置,判断返回地址
BI41: JMP RET6
BI40C: SETB BOOT_STR
RET
RET7: MOV SYS_SIGN,#11 ;设置对应显示标记
RET6: ; 每调用一次BIJIAO2,则调用一次芯片数据输入程序
;;-----------------------------把数据输入到PT2313/M62429芯片中------------------------------------------
DATA_IN: CLR TR1 ;PT2313数据写入
MAN_INPUT:MOV A,INPUT_DATA ;(CD/VCD=1,TUNER=2,AC3=3)
MOV DPTR,#TABLE9
MOVC A,@A+DPTR
JNB LOUND_DATA,MM1 ;ACC.2对应PT2313的LOUND位
CLR ACC.2
JMP MM2
MM1: SETB ACC.2
MM2: MOV MTD1,A ;存入INPUT,增益,等响度关
CALL OUT_DA
MAN_VOL1 :MOV A,BAL_DATA
MOV DPTR,#TABLE10
MOVC A,@A+DPTR
ADD A,#80H
MOV MTD1,A ;存入左前声道
CALL OUT_DA
MAN_VOL2 :MOV A,BAL_DATA
MOV DPTR,#TABLE10A
MOVC A,@A+DPTR
ADD A,#0A0H
MOV MTD1,A ;存入右前声道
CALL OUT_DA
MAN_VOL3 :JNB MUTE_DATA,MV3_1 ;静音判断
MOV A,#0
JMP MV3_2
MV3_1: MOV A,MAIN_DATA
MV3_2: MOV DPTR,#TABLE11
MOVC A,@A+DPTR
MOV MTD1,A ;存入主声道
CALL OUT_DA
MAN_BASS :MOV A,DSP_DATA ;根据DSP_DATA内保存的数据判断是输入DSP数据或是手动调节数据
JZ BASS1 ;DSP_DATA模式=0说明DSP关闭,跳到BASS2
MOV A,DSP_DATA ;DSP模式开启动,输入DSP模式数据
MOV DPTR,#TABLE15
JMP BASS3
BASS1: MOV A,BASS_DATA
BASS2: MOV DPTR,#TABLE12
BASS3: MOVC A,@A+DPTR
ADD A,#60H
MOV MTD1,A ;存入BASS
CALL OUT_DA
MAN_TR : MOV A,DSP_DATA
JZ TR_1 ;根据DSP_DATA内保存的数据判断是输入DSP数据或是手动调节数据
MOV A,DSP_DATA
MOV DPTR,#TABLE16
JMP TR_3
TR_1: MOV A,TR_DATA
TR_2: MOV DPTR,#TABLE12
TR_3: MOVC A,@A+DPTR
ADD A,#70H
MOV MTD1,A ;存入TREBLE
CALL OUT_DA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;M62429;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLR C ; 选通通道1(SURL)
CALL ML_1A
JB MUTE_DATA,M_SL0 ; 判断SL是否静音
MOV A,CH_DATA
CJNE A,#0,M_SL0 ;除非CH_DATA=0(5.1CH),否则SL静音
JMP M_SL1
M_SL0: MOV A,#0
JMP M_SL2
M_SL1: MOV A,SURL_DATA ;
M_SL2: MOV DPTR,#TABLE13
MOVC A,@A+DPTR
MOV R6,#8
CALL ML_1B ; 输入音量数据
CALL ML_1C ; 输入结尾符号(2位1)
;-------
SETB C ; 选通通道2(SURR)
CALL ML_1A
JB MUTE_DATA,M_SR0 ; 判断SR是否静音
MOV A,CH_DATA
CJNE A,#0,M_SR0 ; 除非CH_DATA=0(5.1CH),否则SR静音
JMP M_SR1
M_SR0: MOV A,#0
JMP M_SR2
M_SR1: MOV A,SURR_DATA
M_SR2: MOV DPTR,#TABLE13
MOVC A,@A+DPTR
MOV R6,#8
CALL ML_1B
CALL ML_1C
;;-----------------------------
CLR C ; 选通通道1(BW)
CALL ML_2A
JB MUTE_DATA,M_BW0 ; 判断BW是否静音
MOV A,CH_DATA
CJNE A,#3,M_BW1 ; 除非CH_DATA=3(2CH),否则重低音开启
M_BW0: MOV A,#0
JMP M_BW2
M_BW1: MOV A,BW_DATA ;
M_BW2: MOV DPTR,#TABLE13
MOVC A,@A+DPTR
MOV R6,#8
CALL ML_2B
CALL ML_2C ; 输入结尾符号(2位1)
SETB C ; 选通通道2(CEN)
CALL ML_2A
JB MUTE_DATA,M_CEN0 ; 判断CEN是否静音
MOV A,CH_DATA
CJNE A,#3,CEN_A ; 2CH则中置静音
JMP M_CEN0
CEN_A: CJNE A,#2,M_CEN1 ; 2.1CH则中置静音
M_CEN0: MOV A,#0
JMP M_CEN2
M_CEN1: MOV A,CEN_DATA
M_CEN2: MOV DPTR,#TABLE13
MOVC A,@A+DPTR
MOV R6,#8
CALL ML_2B
CALL ML_2C
;;-----------------------------
CLR C ; 选通通道1(MVOL)
CALL ML_3A
JNB MUTE_DATA,M_OK1 ; 判断MVOL是否静音
MOV A,#0
JMP M_OK2
M_OK1: MOV A,MVOL_DATA ;
M_OK2: MOV DPTR,#TABLE14
MOVC A,@A+DPTR
MOV R6,#8
CALL ML_3B
CALL ML_3C ; 输入结尾符号(2位1)
SETB C ; 选通通道2(ECHO)
CALL ML_3A
MOV A,ECHO_DATA
MOV DPTR,#TABLE14
MOVC A,@A+DPTR
MOV R6,#8
CALL ML_3B
CALL ML_3C
SETB TR1
MOV A,REM_SIGN
JZ XX1
JMP BI_RET
XX1: RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ML_1A: CLR M62429_DA
CLR M62429_CK
NOP
NOP
MOV M62429_DA ,C
SETB M62429_CK ;CK上升沿串入数据
NOP
NOP
CLR M62429_DA
CLR M62429_CK
RET
ML_1B: RLC A ;串入音量数据
MOV M62429_DA,C
SETB M62429_CK
NOP
NOP
CLR M62429_DA
CLR M62429_CK
NOP
NOP
DJNZ R6,ML_1B
RET
ML_1C: SETB C
NOP
NOP
MOV M62429_DA,C
SETB M62429_CK
NOP
NOP
CLR M62429_DA
CLR M62429_CK
NOP
NOP
MOV M62429_DA,C
SETB M62429_CK
NOP
NOP
NOP
NOP
CLR M62429_CK
NOP
NOP
RET
;----------------
ML_2A: CLR M62429_DA
CLR M62429_CK1
NOP
NOP
MOV M62429_DA ,C
SETB M62429_CK1 ;CK上升沿串入数据
NOP
NOP
CLR M62429_DA
CLR M62429_CK1
RET
ML_2B: RLC A ;串入音量数据
MOV M62429_DA,C
SETB M62429_CK1
NOP
NOP
CLR M62429_DA
CLR M62429_CK1
NOP
NOP
DJNZ R6,ML_2B
RET
ML_2C: SETB C ;结尾
NOP
NOP
MOV M62429_DA,C
SETB M62429_CK1
NOP
NOP
CLR M62429_DA
CLR M62429_CK1
NOP
NOP
MOV M62429_DA,C
SETB M62429_CK1
NOP
NOP
NOP
NOP
CLR M62429_CK1
NOP
NOP
RET
;---------------------
ML_3A: CLR M62429_DA3
CLR M62429_CK3
NOP
NOP
MOV M62429_DA3 ,C
SETB M62429_CK3 ;CK上升沿串入数据
NOP
NOP
CLR M62429_DA3
CLR M62429_CK3
RET
ML_3B: RLC A ;串入音量数据
MOV M62429_DA3,C
SETB M62429_CK3
NOP
NOP
CLR M62429_DA3
CLR M62429_CK3
NOP
NOP
DJNZ R6,ML_3B
RET
ML_3C: SETB C ;结尾
NOP
NOP
MOV M62429_DA3,C
SETB M62429_CK3
NOP
NOP
CLR M62429_DA3
CLR M62429_CK3
NOP
NOP
MOV M62429_DA3,C
SETB M62429_CK3
NOP
NOP
NOP
NOP
CLR M62429_CK3
NOP
NOP
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;数据表格;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TABLE1: DB 00H,01H, 03H,04H, 06H,07H, 09H,0AH, 0CH,0DH, 0FH,10H, 12H,13H ,15H,16H
DB 18H,19H, 1BH,1CH, 1EH,1FH, 21H,22H, 24H,25H ;(PT6311片内积存器地址)
TAB2: DB 227,17, 34,49, 7,41, 9,36, 35,49, 0,0 , 227,17, 43,21, 227,16
DB 32,48, 9,36, 225,16, 9,36, 225,48 ,226,16,00,00,00,00,00,00,00,00,00
DB 00,00,00,00,00,00,00,00;(英文:AUDIO AMPLIFIER)
TAB3: DB 49,35, 4,8, 48,195, 33,195 , 1,226
DB 33,225, 49,225, 1,3, 49,227, 33,227;(数字0-9)
TAB4: DB 00,00,24,48,49,35,48,32,00,00 ;(字符串 VOL)
TAB5: DB 49,224,17,227,33,225,33,225 ;(字符串 BASS)
TAB6: DB 4,9,16,226,48,225,49,224 ;(字符串TREB)
TAB7: DB 49,227,48,32,17,227,19,38 ;(字符串 BLAN)
TAB8: DB 00,00,00,00,33,225,48,32 ;(字符串 SL)
TAB9: DB 00,00,00,00,33,225,16,226 ;(字符串 SR)
TAB10: DB 00,00,00,00,33,225,53,42 ;(字符串 SW)
TAB11: DB 00,00,48,33,48,225,19,38 ;(字符串 CEN)
TAB12: DB 48,225,48,33,17,226,49,35 ;(字符串 ECHO)
TAB13: DB 21,43,24,48,49,35,48,32 ;(字符串 MVOL)
TAB14: DB 00,00,41,7,48,225,48,32 ;(字符串 DEL)
TAB15: DB 00,00,41,7,33,225,16,227 ;(字符串 DSP)
TAB16: DB 48,33,17,226,0,192,33,225,64,0,4,8,00,00 ;(字符串 CH-5.1)
TAB17: DB 48,33,17,226,0,192,48,195,64,0,49,35,00,00 ;(字符串 CH-2.O)
TAB18: DB 00,00, 48,33, 41,7 ,8,16, 24,48, 48,33, 41,7 ;(字符串 CD/VCD)
TAB19: DB 00,00, 4,9, 49,34 ,19,38, 48,225, 16,226,00,00 ;(字符串 TUNER)
TAB20: DB 00,00, 00,00, 41,7, 24,48, 41,7 ,00,00,00,00 ;(字符串 AC3)
TAB21: DB 0,192,4,8,1,226, 0,192,4,8,48,195 ,0,192,4,8,49,35, 0,192,0,0,49,227
DB 0,192,0,0,49,225, 0,192,0,0,1,226, 0,192,0,0,48,195, 0,0,0,0,49,35
DB 4,200,0,0,48,195, 4,200,0,0,1,226, 4,200,0,0,49,225, 4,200,0,0,49,227
DB 4,200,4,8,49,35, 4,200,4,8,48,195, 4,200,4,8,1,226;(BASS和TREBLE的显示表格)
TAB22: DB 0,0,0,0,21,43,49,34,4,9,48,225,0,0 ; (字符串 MUTE)
TAB23: DB 48,32,49,35,49,34,41,7,0,0,49,35,19,38 ;(字符串 LOUD ON)
TAB24: DB 48,32,49,35,49,34,41,7,0,0,49,35,16,225;(字符串 LOUD OF)
TAB26: DB 32,0, 48,0, 56,0, 60,0, 62,0, 63,0, 63,128, 63,192, 63,224, 63,240, 63, 248, 63, 252, 63,254, 63,255 ;(柱状频谱1)
TAB27: DB 0,1, 0,3, 0,7, 0,15, 0,31, 0,63, 0,127, 0,255, 1,255, 3,255, 7,255, 15,255, 31,255, 63,255 ;(柱状频谱2)
TAB28: DB 32,0, 16,0, 8,0, 4,0, 2,0, 1,0, 0,128,0,64,0,32,0,16,0,8,0,4,0,2,0,1 ;(点状频谱1)
TAB29: DB 0,1,0,2,0,4,0,8,0,16,0,32,0,64,0,128,1,0,2,0,4,0,8,0,16,0,32,0 ;(点状频谱2)
TAB30: DB 31,255, 47,255,55,255,59,255,61,255,62,255,63,127,63,191,63,223, 63,239,63,247,63,251,63,253,63,254
TAB31: DB 63,254,63,253,63,251,63,247,63,239,63,223,63,191,63,127,62,255,61,255,59,255,55,255,47,255,31,255
TAB40: DB 00,00,00,00,00,00,48,225,16,226,16,226,00,00 ;(ERR字符串)
TABLE9: DB 0,5CH, 5DH,5EH ; (PT2313,+0dB,等响关,通道选择1-3)
TABLE10: DB 0,0,0,0,0,5,8,13,31 ; (PT2313前L声道控制)
TABLE10A: DB 31,13,8,5,0,0,0,0,0 ; (PT2313前R声道控制)
TABLE11: DB 63,62,61,60,59,58,57,56,55,54,53,52,51,50 ;(PT2313主音量)
DB 49,48,47,46,45,44,43,42,41,40,39,38,37,36
DB 35,34,33,32,31,30,29,28,27,26,25,24,23,22
DB 21,20,19,18,17,16,15,14,13,12,11,10,9,8
DB 7,6,5,4,3,2,1,0
TABLE12: DB 0, 1, 2, 3, 4, 5, 6, 7, 14, 13, 12, 11, 10, 9, 8 ;(PT2313高低音)
; -14,-12,-10,-8,-6,-4,-2, 0, +2, +4, +6, +8, +10, +12, +14
TABLE13: DB 192,192,162,162,225,225,147,147,176,176 ;(M62429音量,SR,CEN,BW)
DB 240,240,136,136,200,200,168,168,232,232
DB 235,235,153,153,218,218,184,184,187,187
DB 250,250,251,251,134,134,135,135,198,198
DB 199,199,166,166,167,167,230,230,231,231
DB 150,150,151,151,212,212,214,214,213,213
DB 215,215,215,215,215,215
TABLE14: DB 192,147,136,232,218,187,134,199,167,231,151,212,214,213,215,215,215 ;(M62429音量,MVOL,ECHO)
TABLE15: DB 7,7,8,8,11,3,7,11 ;(DSP模式设定,共8种,该表用在PT2313查值)
TABLE16: DB 7,8,7,8,11,7,3,3
END
上一篇:1602液晶显示按键键值程序
下一篇:PT16312VFD驱动C程序
史海拾趣
|
被同一个坑绊倒了两次-俺的100mWZIGBEE节点调试心得 拿到一个新的PAIC,台湾某厂的UP2202,2.4G频段专用,号称增益25db,输出功率能轻而易举的达到20dbm,恰好有个zigbee项目需要增加功率,于是毫不犹豫的上了它,嘿嘿! 按照原理图,俺画了块板子,看起来貌似该ic使用起来很“弱智” ...… 查看全部问答> |
|
知足 只要有吃有穿,腹饱体暖,就感到满足。这种人对生活没有一点欲求,怎么会创造富有与成功呢? 自满 自己的总是最好的,甚至认为自己应该成为别人效仿的标准。这种人不屑于与外界来往,他们根本不知道社会进步到什么程度,怎么可能有更 ...… 查看全部问答> |
|
m_pConn->put_Provider(L\"\\\\DiskOnChip\\\\pda\\\\myce.sdf\"); m_pConn->Open(L\"Provider=microsoft.sqlserver.oledb.ce.2.0;Data Source=\\\\DiskOnChip\\\\pda\\\\myce.sdf\",TEXT(\"\"),TEXT(\"\"),adOpenUns ...… 查看全部问答> |
|
VxWorks下实现了RPC Server,我在WINDOWS的PC上怎么访问? 我的设备上跑的是VxWorks,上面实现了一个RPC服务器,文档里面说是遵循SUN 的RPC规范(RFC1057),现在我在Windows平台下需要访问这个RPC服务器,这个要怎么做?… 查看全部问答> |
|
三星2440的芯片,想使用看门狗, 我现在写了一个驱动,看门狗做如下初始化: //Prescaler value=254, the clock division factor=128,Enable bit of the interrupt. int nCounts = 30000; v_pWatchRegs->rWTCON &= ~0xffff; v_pWatchRegs->rWT ...… 查看全部问答> |
|
在应用高速计数器时往往会碰到,计数器与输入计数脉冲信号的脉冲电平不匹配、旋转编码器、光栅尺数据输出是TTL电平,而PLC高速计数器却要求接受的是0 - 24v传输脉冲信号、有的编码器为了提高编码器的可靠性,提供A+、A-,B+、B-,Z+、Z- 对称反相计 ...… 查看全部问答> |




