?? 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 + -