⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 av.asm

📁 一套全遥控6声道AV机的汇编程序,该程序已经商业化的
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;;;;;;;;;;;;;;;;;;;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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -