📄 ir_lcm_0k.a51
字号:
ORG 0000H
AJMP 0100H
;cycle=12/f=(12/12)us
ORG 0100H
MOV 1CH,#0FFH ;CODE REGISTER
mov 1ah,#0FFh
mov 1bh,#0FFh
mov 1dh,#0FFh
MOV R7,#00H ;?????
START:MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
;XXXXXXXXXXXXXXXXXXXXXXX
;X LCM44780 DISPLAY X
;XXXXXXXXXXXXXXXXXXXXXXX
START1:
RS EQU P0.0
RW EQU P0.1
E EQU P0.2
mov p0,#0ffh
MOV P2,#01H ;清除屏幕
ACALL ENABLE
MOV p2,#38H ;8位点阵
ACALL ENABLE
MOV p2,#06H ;移动光标/进入模式设定
ACALL ENABLE
MOV p2,#80H ;显示位置
MOV P2,#01H ;清除屏幕
ACALL ENABLE
MOV p2,#0FH ;开显示
ACALL ENABLE
l3: mov p2,#01h ;清屏
call enable
mov p2,#0c0h ; 设置显示在第一行
acall enable
mov p2,#01h
ACALL ENABLE
mov dptr,#table2 ;送第一句话
acall write1
mov p2,#0c2h ;显示在第二行
acall enable
mov p2,#0a8h
acall enable
mov dptr,#table1
mov a,1ah ;send 1ah data
anl a,#0f0h
swap a
movc a,@a+dptr
acall write2
mov a,1ah
anl a,#0fh
movc a,@a+dptr
acall write2
mov a,1bh ;send 1bh data
anl a,#0f0h
swap a
movc a,@a+dptr
acall write2
mov a,1bh
anl a,#0fh
movc a,@a+dptr
acall write2
mov a,1ch ;send 1ch data
anl a,#0f0h
swap a
movc a,@a+dptr
acall write2
mov a,1ch
anl a,#0fh
movc a,@a+dptr
acall write2
mov a,1dh ;send 1dh data
anl a,#0f0h
swap a
movc a,@a+dptr
acall write2
mov a,1dh
anl a,#0fh
movc a,@a+dptr
acall write2
;XXXXXXXXXXXXXXXXXXXXXXXXX
int0: jb p3.2,int0
MOV R6,#0AH
SB: ACALL YS1 ;调用882微秒延时子程序
JB P3.2,exit ;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
DJNZ R6,SB ;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
JNB P3.2,$ ;等待高电平避开9毫秒低电平引导脉冲
ACALL YS2 ;延时4.74毫秒避开4.5毫秒的结果码
JB P3.2,EXIT
MOV R1,#1AH
MOV R2,#4
PP: MOV R3,#8
JJJJ: JNB P3.2,$
LCALL YS1
MOV C,P3.2
JNC UUU
JB P3.2,$
UUU: MOV A,@R1
RRC A
MOV @R1,A
DJNZ R3,JJJJ
INC R1
DJNZ R2,PP
MOV A,1AH
XRL A,#00000000B
JNZ EXIT
MOV A,1BH
XRL A,#11111111B
JNZ EXIT
MOV A,1CH
CPL A
XRL A,1DH
JNZ EXIT
;XXXXXXXXXXXXXXXXXXXXXXXXX
AA: MOV R1,#25
XX: ACALL YS2
JNB p3.2,HH
DJNZ R1,XX
EXIT: setb p3.2
ajmp start1
HH: MOV R6,#4
S: ACALL YS1
JB P3.2,EXIT
DJNZ R6,S
JNB P3.2,$
ACALL YS3
AJMP AA
;xxxxxxxxxxxxxxxxxxxxxxxxx
;YS1
YS1: MOV R4,#20 ;DELAY 882US
D1: MOV R5,#20
D11:
DJNZ R5,D11
DJNZ R4,D1
RET
;YS2
YS2: MOV R4,#10 ;DELAY 4740US
D2: MOV R5,#235
DJNZ R5,$
DJNZ R4,D2
RET
YS3: MOV R4,#2 ;DELAY 1000US
DD3: MOV R5,#248
DJNZ R5,$
DJNZ R4,D3
RET
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENABLE: ;送命令
CLR RS ;rs=0 send command
CLR RW
CLR E
ACALL DELAY
SETB E
RET
write1: ;送字符串
mov r1,#00h
a1:mov a,r1
movc a,@a+dptr
call write2
inc r1
cjne a,#3ah,a1 ;以3aH做字符串结束标志
ret
write2: ;送单个字符
mov p2,a
setb rs ;rs=1 send data
clr rw
clr e
call delay
setb e
ret
delay: ;延时子程序
d3:mov r7,#10
dd1:mov r6,#255
dd2:nop
nop
nop
nop
nop
djnz r6,dd2
djnz r7,dd1
ret
table1: db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,41h,42h,43h,44h,45h,46h
table2: db 54h,48h,49h,53h,20h,4bh,45h,59h,20h,43h,4fh,44h,45h,3ah
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -