📄 remote.asm
字号:
;----------------------------------
; 单片机无线遥控实例
; 功能:通过无线遥控实现对继电器的控制
;-----------------------------------
ORG 0000H
LJMP START
START:
MOV SP,#50H ; 将堆栈起点设为60H
CLR P1.0
CLR P1.1
CLR P1.2
CLR P1.3
NOP
CLR A ; 将0-9的显示情况都走一遍
SHOW_LOOP:
CALL SHOW_SEG
INC A
CJNE A,#10,SHOW_LOOP
CLR A
CALL SHOW_SEG ; 清除显示
MAIN:
SETB P3.2 ; 等待信号来
LCALL RX ; 进入等待、接收子程序
JMP MAIN
OP_RELAY:
;---------------------------
; 操作函数,根据输入的值进行对应的操作,参数从r1输入
;---------------------------
MOV A,R1
ANL A,#80H ; 判断输入值是否80h
JNZ OP_NEXT1
MOV A,#1 ; 显示1
CALL SHOW_SEG
SETB P1.3 ; 对应的LED亮
MOV R5,#0FFH
CALL DELAY ; 延时
CLR P1.3 ; 对应的LED灭
JMP OP_OUT
OP_NEXT1:
MOV A,R1
ANL A,#20H ; 判断输入值是否20h
JNZ OP_NEXT2
MOV A,#3 ; 显示3
CALL SHOW_SEG
SETB P1.1 ; 对应的LED亮
MOV R5,#0FFH
CALL DELAY ; 延时
CLR P1.1 ; 对应的LED灭
JMP OP_OUT
OP_NEXT2:
MOV A,R1
ANL A,#10H ; 判断输入值是否10h
JNZ OP_NEXT3
MOV A,#2 ; 显示2
CALL SHOW_SEG
SETB P1.2 ; 对应的LED亮
MOV R5,#0FFH
CALL DELAY ; 延时
CLR P1.2 ; 对应的LED灭
JMP OP_OUT
OP_NEXT3:
MOV A,R1
ANL A,#40H ; 判断输入值是否40h
JNZ OP_OUT
MOV A,#4 ; 显示4
CALL SHOW_SEG
SETB P1.0 ; 对应的LED亮
MOV R5,#0FFH
CALL DELAY ; 延时
CLR P1.0 ; 对应的LED灭
OP_OUT:
RET
SHOW_SEG:
;--------------------------
; 显示函数,参数从A输入
;--------------------------
CJNE A,#0,SHOW_1 ; 接收到0的显示
CLR P3.5
CLR P3.4
CLR P3.3
CLR P3.7
JMP SHOW_OUT
SHOW_1: ; 接收到1的显示
CJNE A,#0,SHOW_2
CLR P3.5
CLR P3.4
CLR P3.3
SETB P3.7
JMP SHOW_OUT
SHOW_2: ; 接收到2的显示
CJNE A,#0,SHOW_3
CLR P3.5
CLR P3.4
SETB P3.3
CLR P3.7
JMP SHOW_OUT
SHOW_3: ; 接收到3的显示
CJNE A,#0,SHOW_4
CLR P3.5
CLR P3.4
SETB P3.3
SETB P3.7
JMP SHOW_OUT
SHOW_4: ; 接收到4的显示
CJNE A,#0,SHOW_5
CLR P3.5
SETB P3.4
CLR P3.3
CLR P3.7
JMP SHOW_OUT
SHOW_5: ; 接收到5的显示
CJNE A,#0,SHOW_6
CLR P3.5
SETB P3.4
CLR P3.3
SETB P3.7
JMP SHOW_OUT
SHOW_6: ; 接收到6的显示
CJNE A,#0,SHOW_7
CLR P3.5
SETB P3.4
SETB P3.3
CLR P3.7
JMP SHOW_OUT
SHOW_7: ; 接收到7的显示
CJNE A,#0,SHOW_8
CLR P3.5
SETB P3.4
SETB P3.3
SETB P3.7
JMP SHOW_OUT
SHOW_8: ; 接收到8的显示
CJNE A,#0,SHOW_9
SETB P3.5
CLR P3.4
CLR P3.3
CLR P3.7
JMP SHOW_OUT
SHOW_9: ; 接收到9的显示
SETB P3.5
CLR P3.4
CLR P3.3
SETB P3.7
SHOW_OUT:
RET
RX:
;---------------------------
; 接收操作函数,读入无线模块接收的数据
;---------------------------
MOV A,P3
ANL A,#04H ; 判断是否有信号来
JNZ RX_OUT
MOV A,P1
MOV R1,A ; 接收数据
RX_WAIT:
MOV A,P3
ANL A,#04H
CJNE A,#04,RX_WAIT ; 判断是否完成
CALL OP_RELAY
RX_OUT:
RET
DELAY:
;------------------
; 延时函数,参数从R5输入
;-------------------
MOV R4,#10
DELAY_LOOP:
DJNZ R4,DELAY_LOOP
DJNZ R5,DELAY
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -