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

📄 av.asm

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

⌨️ 快捷键说明

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