|
DQ EQU P3.3
ADDR0 EQU P1.0
ADDR1 EQU P1.1
ADDR2 EQU P1.2
ADDR3 EQU P1.3
ENLED EQU P1.4
ORG 000H
LJMP MAIN
ORG 000BH
LJMP ZD
MAIN:
MOV TH0,#0FEH
MOV TL0,#0FEH
MOV TMOD,#01H
SETB ET0
SETB TR0
SETB EA
CLR ENLED
CLR ADDR0
CLR ADDR1
CLR ADDR2
SETB ADDR3
SJMP $
ZD:
CLR EA
MOV R3,#10
SB: LCALL YS1 ;延時9000微妙
DJNZ R3,SB
JB DQ,EXIT
;---------------以上對檢測9000微妙的初始低電平
JNB DQ,$
LCALL YS2 ;延時4.74毫秒避開4.5毫秒結(jié)果碼
MOV R1,#40H ;設(shè)定起始RAM區(qū)
MOV R2,#4 ;四組八位數(shù)據(jù)
PP: MOV R3,#8
JJJ: JNB DQ,$ ;等待地址碼第一個高電平信號
LCALL YS1 ;延時882微妙去判斷此時的信號高低電平狀態(tài)
MOV C,DQ
JNC UU
LCALL YS3 ;延時1000微妙
UU: MOV A,@R1 ;將R1的地址給它
RRC A ;將C轉(zhuǎn)到最低位
MOV @R1,A ;再將A存到r1中
DJNZ R3,JJJ ;循環(huán)接受地址碼的高8位
INC R1
DJNZ R2,PP ;接受完16位地址碼和8位數(shù)據(jù)嗎和8位數(shù)據(jù)反碼
;---------------以上將16位地址碼和8位數(shù)據(jù)嗎和8位數(shù)據(jù)反碼存放在1AH,1BH,1CH,1DH
MOV A,42H
CPL A
XRL A,43H ;將兩數(shù)據(jù)作比較
JNZ EXIT ;不相同則丟棄退出解碼
MOV DPTR,#TABLE
MOV A,43H
ANL A,#0FH ;求與取其低四位
MOVC A,@A+DPTR
MOV 44H,A ;將查表得到的數(shù)字存到1EH中
MOV A,43H
SWAP A ;高四位與低四位交換
ANL A,#0FH ;求與取其高四位
MOVC A,@A+DPTR
MOV 45H,A ;將查表到的數(shù)據(jù)放在1FH中
;---------------以上將接受到的數(shù)據(jù)碼與數(shù)據(jù)反碼經(jīng)過查表后存放在1EH和1FH中
MOV R7,#20H
DISP:
MOV P0,45H ;將數(shù)據(jù)送到數(shù)碼管中
CLR P2.1
LCALL YS2
SETB P2.1
MOV P0,44H
CLR P2.2
LCALL YS2
SETB P2.2
CLR P1.6
LCALL YS2
SETB P1.6
DJNZ R7,DISP
EXIT: SETB EA
RETI ;退出解碼程序
;延時882微秒
YS1: MOV R4,#03H
DL0:
MOV R5,#91H
DJNZ R5,$
DJNZ R4,DL0
RET
YS2:
;延時4740微秒
MOV R6,#03H
DL1:
MOV R4,#08H
DL2:
MOV R5,#61H
DJNZ R5,$
DJNZ R4,DL2
DJNZ R6,DL1
RET
YS3:
;延時1000微秒
MOV R4,#01H
DL3:
MOV R6,#8EH
DL4:
MOV R5,#02H
DJNZ R5,$
DJNZ R6,DL4
DJNZ R4,DL3
RET
TABLE: DB 0C0h,0F9h,0A4h,0B0h,99h,92h
DB 82h,0F8h,80h,90h,88h,83h,0C6h,0A1h,86h,8Eh
它現(xiàn)在亮了但是不是按每個按鍵他都能亮,而且它顯示的數(shù)字也不對,大佬幫幫忙吧 |
|