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

📄 遥控开关程序.asm

📁 此程序能遥控开、关家用电器
💻 ASM
字号:

     ORG 0000H
     ljmp kkp                             ;摇控器采用常见的M50462AP遥控器
     ORG 0003H
     LJMP LOOP
 kkp:                 
     MOV P2,#0ffH                      ;主程序开放中断
     SETB EA
     SETB EX0                           ;开放外部中断0
     SETB IT0                           ;外部中断0下降沿触发有效
     MOV 50H,#00H
     mov 51h,#00h
     mov r1,#0ah
  rp:Cpl P3.5                           ;让蜂鸣器响一会儿指示已经接通电源
     lcall d3s
     djnz r1,rp
     clr p3.5
LP2: MOV A,50H                            ;定时初始化
     CJNE A,#00H,LP                        
     SJMP LP2
 LP: LCALL D60S                           ;调用1 分钟程序
     DJNZ 50H,LP                           ;判断定时到了没有
     MOV A,51H
     cjne A,#00H,RP2
     SJMP LP2
 RP2:MOV R1,#08H
 RP1:CLR P3.3                              ;定时结束
     CLR P3.5                              ;发光二极管闪烁8次
     LCALL D3S
     SETB P3.3                             ;蜂鸣器响8次
     SETB P3.5
     LCALL D3S
     LCALL D3S
     DJNZ R1,RP1
     MOV P2,#0FFH                          ;关闭电风扇电源
     MOV 50H,#00H                           ;定时清零
     MOV P1,#0FFH                          ; 关闭档位显示,数码管不显示
     MOV P0,#0FFH                          ;关闭定时指示灯
     clr P3.5
     SJMP LP2


LOOP:CLR EX0                             ;中断子程序,关闭外部中断
     MOV R0,#30H                          ;
     MOV R3,#00H                           ;8位计数清零
     LCALL IRIN                           ;调用红外判断程序
     SETB EX0                              ;开放中断
     RETI                                  ;中断返回
IRIN:JNB P3.2,ILL2                         ;等待红外信号出现
     RET
ILL2:JB P3.2,IRIN
     LCALL DEL                             ;延迟一次
     JB P3.2,IRIN
ILL:JB P3.2,I5                              ;确认红外信号出现
    SJMP ILL
 I5:MOV R2,#00H                           ;脉冲宽度计数
 L1:LCALL DEL                              ;0.1ms计数
    JNB P3.2,L3                            ;等待红外信号变为高电平
    INC R2
    CJNE R2,#1DH,L1
    RET
 L3:MOV A,#13                                ;判断0和1装入数据
    CLR C
    SUBB A,R2                                ;判断高低位
    MOV A,@R0
    RRC A
    MOV @R0,A
    INC R3
    CJNE R3,#8,ILL                           ;8位用户码接收完了吗
    MOV R3,#00H
    INC R0

 ILL1:JB P3.2,I51                              ;接收8位功能码
    SJMP ILL1
 I51:MOV R2,#00H
 L11:LCALL DEL                                  ;调用0.1MS延时程序
    JNB P3.2,L31
    INC R2                                       
    CJNE R2,#1DH,L11
 kp:RET

 L31:MOV A,#13                              ;判断0和1装入数据
    CLR C
    SUBB A,R2
    MOV A,@R0
    RRC A
    MOV @R0,A
    INC R3
    CJNE R3,#8,ILL1                          ;8位功能码接收完了吗
    ;*************************

 
    MOV A,30H                        ;判断用户码=47H吗
    CJNE A,#47H,KP
      CLR P3.3                       ;蜂鸣器响一下
      LCALL D3S
      SETB P3.3
      MOV A,31H                       ;将31H的功能码送入A
      CJNE A,#00H,KP1                 ;判断功能码进入相应的子程序
      MOV P2,#0FEH                   ;1档(最慢)
      MOV P1,#0F9H                    ;数码管显示1
      SETB P3.5
      LCALL D3S
      RET
  KP1:CJNE A,#08H,KP2                 ;2档
      MOV P2,#0FDH
      MOV P1,#0a4h                    ;数码管显示2
      SETB P3.5
      LCALL D3S
      RET
    KP2:CJNE A,#10H,KP3               ;3档
       MOV P2,#0FBH
       MOV P1,#0b0h                   ;数码管显示3
       SETB P3.5
       LCALL D3S
       RET

  KP3:CJNE A,#18H,KP4                 ;4档
      MOV P2,#0F7H
      MOV P1,#99h                        ;数码管显示4
      SETB P3.5
      LCALL D3S
     RET

  KP4:CJNE A,#20H,KP5                 ;5档(最快)
       MOV P2,#0EFH
      MOV P1,#92h                      ;数码管显示5
      SETB P3.5
      LCALL D3S
      RET

  KP5:CJNE A,#22H,KP6                     ;定时判断
      MOV A,51H
      CJNE A,#01H,OP6
      MOV P0,#0FDH                        ;音量增大键第二次按下定时30分钟
      mov 50h,#30
      MOV 51H,#02H
      lcall D3S
      RET
  OP6:jc OP7
      CJNE A,#02H,OP8                      ;音量增大键第三次按下定时45分钟
      MOV P0,#0FBH
      MOV 50H,#45
      MOV 51H,#03H
      LCALL D3S
      RET
 OP7:MOV P0,#0FEH                          ;音量增大键第一次按下定时15分钟
     MOV 50H,#15
     MOV 51H,#01H
     LCALL D3S
     RET
 OP8:CJNE A,#03H,OP9                       ;音量增大键第四次按下定时60分钟
     MOV P0,#0FAH
     MOV 50H,#60
     MOV 51H,#04H
     LCALL D3S
     RET
 OP9:CJNE A,#04H,OP10                     ;音量增大键第五次按下定时90分钟
     MOV P0,#0F8H
     MOV 50H,#90
     MOV 51H,#05H
     LCALL D3S
     RET
 OP10:MOV P0,#0FFH                        ;音量增大键第六次按下取消定时
      MOV 50H,#01H
      mov 51H,#00H
      lcall d3s
      ret

 kp6:CJNE A,#02H,KP8                       ;红色关机键按下时关机
     MOV P1,#0FFH
     MOV P2,#0FFH
     CLR P3.5
     MOV P0,#0FFH
     MOV 50H,#01H
     mov 51h,#00h
     LCALL D3S
     RET
 KP8:RET
 DEL:MOV R5,#01H                        ;时间1ms
 DELAY1:MOV R6,#02H
 E1:MOV R7,#11H
 E2:DJNZ R7,E2
    DJNZ R6,E1
    DJNZ R5,DELAY1
    RET

  D3S:MOV R4,#01H                      ;时间260MS
  TP14: MOV R6,#0FFH
  TP12: MOV R5,#0FFH
  TP11: NOP
      NOP
      DJNZ R5,TP11
      DJNZ R6,TP12
      DJNZ R4,TP14
      RET

D60S:MOV R4,#0C0H                      ;1分钟
 QP3:MOV R6,#0ECH
 QP2:MOV R5,#0FDH
 QP1: NOP
      NOP
      NOP
      DJNZ R5,QP1
      DJNZ R6,QP2
      DJNZ R4,QP3
      RET

⌨️ 快捷键说明

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