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

📄 学习型电话网络远程控制器源程序.asm.txt

📁 带红外学习功能的电话远程遥控
💻 TXT
📖 第 1 页 / 共 4 页
字号:
SENT1:
            SETB       SDA
            NOP
SENT:
            NOP
            SETB       SCL
            NOP
            NOP
            NOP
            NOP
            NOP
            CLR        SCL
            DJNZ       BITCNT,SENTB
            NOP
            NOP            
            SETB       SDA
            NOP
            NOP
            SETB       SCL
            NOP
            NOP
            CLR        F0
            JNB        SDA,ACKEND
            SETB       F0
ACKEND:
            NOP
            CLR        SCL
            RET
;3.4---------------------------------------------------
;接收1个字节数据
RCVBYTE:
            SETB       SDA            ;设置总线为读
            MOV        BITCNT,#08H
RCV:
            NOP
            CLR        SCL            ;清总线,准备读数据
            NOP
            NOP
            NOP
            NOP
            NOP
            SETB       SCL
            NOP
            NOP
            CLR        C
            JNB        SDA,RCV0
            SETB       C
RCV0:
            RLC        A
            NOP
            NOP
            DJNZ       BITCNT,RCV
            CLR        SCL
            NOP
            NOP
            NOP
            CLR        SDA
            JNB        ACK,SENTACKB
            SETB       SDA
SENTACKB:
            NOP
            NOP
            SETB       SCL
            NOP
            NOP
            NOP
            NOP
            NOP
            CLR        SCL
            CLR        ACK
            RET
;**************************************************************************
;延时20MS子程序
DEL_20MS:       SETB     RS0
                MOV      R0,#100 
DEL_20MS1:      MOV      R1,#100
                DJNZ     R1,$
                DJNZ     R0,DEL_20MS1
                CLR      RS0
                RET

;-------------------------------------------------------------------------
;蜂鸣器发生子程序,0.5s
BZ_800:         SETB   RS0
                MOV    R0,#80                    
BZ_800_1:       SETB   BZ_AUD
                SETB   BZ_AUD1
                MOV    R1,#200
                DJNZ   R1,$
                MOV    R1,#200
                DJNZ   R1,$
               


                                              
                CLR    BZ_AUD
                CLR    BZ_AUD
                MOV    R1,#200 
                DJNZ   R1,$
                MOV    R1,#200
                DJNZ   R1,$
               


                DJNZ   R0,BZ_800_1
                SETB   BZ_AUD
                SETB   BZ_AUD1
                CLR    RS0
                RET
;-------------------------------------------------------------------------
;蜂鸣器发生子程序,0.5s
BZ_MU:          SETB   RS0
                MOV    R4,#4             
                MOV    R5,#250
                MOV    R6,#250
BZ_MU0:         MOV    R0,#200
BZ_MU1:         SETB   BZ_AUD
                SETB   BZ_AUD1
                MOV    R1,#200
                DJNZ   R1,$

                MOV    A,R5
                MOV    R2,A
                DJNZ   R2,$
              

                CLR    BZ_AUD
                CLR    BZ_AUD1
                MOV    R3,#200
                DJNZ   R3,$
                MOV    A,R6
                MOV    R2,A
                DJNZ   R2,$


                DJNZ   R0,BZ_MU1
                MOV    A,R5
                CLR    C
                SUBB   A,#40
                MOV    R5,A

                MOV    A,R6
                CLR    C
                SUBB   A,#40
                MOV    R6,A
                DJNZ   R4,BZ_MU0

                CLR    BZ_AUD
                CLR    BZ_AUD1
                CLR    RS0
                RET
;**************************************************************************
;电话控制子程序
PH_CON:         CLR     EX0
                CLR     LED1
                LCALL   PH_IN
                MOV     A,RING_CON
                JNZ     PH_CON1
                LCALL   DTMF
PH_CON1:        SETB    LED1
                SETB    EX0
                RET
;**************************************************************************
;模拟摘机子程序
PH_IN:          JB      PH_RING,PH_INBC       ;无低电平信号退出
                JNB     JP1,PH_IN0
                MOV     RING_CON,#3
                JMP     PH_IN01

PH_IN0:         MOV     RING_CON,#5
 
PH_IN01:        SETB    GV_XSFLAG           
                MOV     GV_XS,#10

PH_IN1:         JNB     PH_RING,PH_IN2
                MOV     C,GV_XSFLAG           ;5S无信号退出
                JNC     PH_INBC
                JMP     PH_IN1                ;等待低电平
    
             
PH_IN2:         LCALL   DEL_20MS
                JB      PH_RING,PH_IN21       ;冗余
                DEC     RING_CON
                MOV     GV_XS,#10              ;RESET   TIMER
PH_IN21:        MOV     A,RING_CON            ;达到设定值退出
                JZ      PH_IN3
                JNB     PH_RING,$             ;等待高电平
                JMP     PH_IN1
              
PH_IN3:         SETB    PIK_HANG
                MOV     R3,#50                ;延时1S
PH_IN4:         LCALL   DEL_20MS
                DJNZ    R3,PH_IN4

                LCALL   BZ_MU                ;摘机5声短低音
                CLR     GV_XSFLAG
                
PH_INBC:        CLR     GV_XSFLAG
                RET
;**************************************************************************
;双音多频控制
DTMF:           MOV     OPER_CON,#00H
DTMF1:          LCALL   DTMF_DE            

DTMF2:          MOV     A,R1
                JNZ     DTMF_BC             ;超过10S不够位退出返回,需重拨
                MOV     A,DTMF_CON
                CJNE    A,#3,DTMF5  
                JB      PW_FLAG,DTMF3               
                LCALL   CONTROL             ;3位数并且无密码进行开关机
                INC     OPER_CON
                MOV     A,OPER_CON
                CJNE    A,#4,DTMF1          ;超过4次操作退出
                JMP     DTMF_BC
                
DTMF3:          LCALL   CH_PW               ;3位数并且有密码进行密码检测
                JB      PW_OK,DTMF31
                INC     OPER_CON
                MOV     A,OPER_CON
                CJNE    A,#3,DTMF1          ;超过3次操作退出
                JMP     DTMF_BC                
                                
DTMF31:         LCALL   DTMF_DE
                MOV     A,R1
                JNZ     DTMF_BC             ;超过10S不够位退出返回,需重拨
 
                MOV     A,D_DATA1
                CJNE    A,#0CH,DTMF4        ;为*号进行密码设定!!!!!!!!!!!!1
                MOV     A,DTMF_CON
                CJNE    A,#05,DTMF_BC
                LCALL   SET_PW
                JMP     DTMF_BC

DTMF4:          LCALL   CONTROL             ;第1位不为*号进行开关机
                INC     OPER_CON
                MOV     A,OPER_CON
                CJNE    A,#4,DTMF31         ;超过10次操作退出
                JMP     DTMF_BC    
                   

DTMF5:          MOV     A,DTMF_CON
                CJNE    A,#05,DTMF_BC
                JB      PW_FLAG,DTMF_BC     ;密码存在,错误退出
                LCALL   SET_PW              ;5位数进行密码设定 
                JMP     DTMF_BC

DTMF_BC:        CLR     PIK_HANG
                RET
;-------------------------------------------------------------------------
;双音多频解码
DTMF_DE:        MOV     GV_XS,#10           ;10S内无按键操作退出
                SETB    GV_XSFLAG
                MOV     DTMF_CON,#00H
                MOV     R0,#15H

DTMF_DE01:      JB      DTMF_REQ,DTMF_DE02  ;高电平读数据
                JB      GV_XSFLAG,DTMF_DE01
                JMP     DTMF_DE4            ;超过10S退出

DTMF_DE02:      LCALL   DEL_20MS 
                MOV     A,P2
                ANL     A,#0FH
                MOV     @R0,A
                INC     R0
                MOV     P0,A
                INC     DTMF_CON
                MOV     R2,#100
DTMF_DE03:      LCALL   DEL_20MS
                DJNZ    R2,DTMF_DE03

                JB      DTMF_REQ,$          ;等待低电平重新读取数据
                MOV     A,15H
                CJNE    A,#0CH,DTMF_DE00    
                MOV     R1,#4
                JMP     DTMF_DE0

DTMF_DE00:      MOV     R1,#2               ;第1位不为*号则计数3位           

DTMF_DE0:       JB      DTMF_REQ,DTMF_DE1   ;高电平读数据
                JB      GV_XSFLAG,DTMF_DE0    
                JMP     DTMF_DE4            ;超过10S退出
              
DTMF_DE1:       LCALL   DEL_20MS
                MOV     A,P2
                ANL     A,#0FH              ;屏蔽高4位
                MOV     @R0,A
                MOV     P0,A
                INC     R0
                INC     DTMF_CON
                DEC     R1
                MOV     R2,#100
DTMF_DE11:      LCALL   DEL_20MS
                DJNZ    R2,DTMF_DE11
                MOV     A,R1                ;超过位退出
                JZ      DTMF_DE3

              
DTMF_DE2:       JB      DTMF_REQ,$          ;等待低电平重新读取数据
                JMP     DTMF_DE0
             
              
DTMF_DE3:       CLR     GV_XSFLAG
                CLR     LED1
                LCALL   DEL_20MS
                SETB    LED1
                LCALL   DEL_20MS

DTMF_DE4:       RET
;-------------------------------------------------------------------------
;控制开关机
CONTROL:        MOV     A,D_DATA1
                CJNE    A,#1,CON_OFF        ;第1位不为1,转关机控制
                MOV     A,D_DATA2 
                CJNE    A,#1,CON_BC         ;第1位为1,第2位不为1,退出
                MOV     A,D_DATA3
                CJNE    A,#1,CON_BC
                LCALL   KEY_1
                JMP     CON_BC

CON_OFF:        MOV     A,D_DATA1
                CJNE    A,#0AH,CON_BC        ;不为0退出
                MOV     A,D_DATA2
                CJNE    A,#0AH,CON_BC
                MOV     A,D_DATA3
                CJNE    A,#0AH,CON_BC
                CLR     LED1
                LCALL   KEY_2
                LCALL   BZ_800
                LCALL   BZ_800
                LCALL   BZ_800
                LCALL   BZ_800

CON_BC:         LCALL   BZ_800
                RET


;-------------------------------------------------------------------------
;密码检测 
CH_PW:          CLR     PW_OK
                MOV     A,D_DATA1
                CJNE    A,PW1,CH_PW2
                MOV     A,D_DATA2
                CJNE    A,PW2,CH_PW2
                MOV     A,D_DATA3
                CJNE    A,PW3,CH_PW2
                SETB    PW_OK                              
                LCALL   BZ_MU                ;密码正确5声短低音              
                JMP     CH_PWBC
            
CH_PW2:         MOV     R3,#2                ;密码不正确2声短低音
CH_PW3:         LCALL   BZ_800
                MOV     R4,#40 
                LCALL   DEL_20MS
                DJNZ    R3,CH_PW3

CH_PWBC:        RET
;-------------------------------------------------------------------------
;密码设定 
SET_PW:         MOV     A,D_DATA1
                CJNE    A,#0CH,SET_PWBC      ;第1位不为#号则退出
                MOV     A,D_DATA5
                CJNE    A,#0CH,SET_PWBC      ;第5位不为#号则退出
                MOV     PW1,D_DATA2
                MOV     PW2,D_DATA3
                MOV     PW3,D_DATA4
                MOV     A,PW1
                CJNE    A,#0AH,SET_PW0
                MOV     A,PW2
                CJNE    A,#0AH,SET_PW0
                MOV     A,PW3
                CJNE    A,#0AH,SET_PW0
                CLR     PW_FLAG                ;取消密码
                LCALL   BZ_MU
                JMP     SET_PWBC

SET_PW0:        SETB    PW_FLAG              
SET_PW1:        LCALL   BZ_MU                 ;密码设定或取消密码正确5声短低音
              
SET_PWBC:       RET


;**************************************************************************
                END



         

⌨️ 快捷键说明

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