紅外遙控鍵值解碼之液晶、數碼管、發光管等顯示程序案例分享
大小:0.2 MB 人氣: 2017-09-06 需要積分:1
標簽:紅外遙控(44690)
1、紅外遙控鍵值解碼
;******************************************************************************????????? DATA1?? EQU??? 30H??? ;
?? DATA2?? EQU??? 31H??? ;
????????? DATA3?? EQU??? 32H??? ;
?? DATA4?? EQU??? 33H??? ;
????????? RMT???? EQU??? P3.2?? ;
;-------------------------------------------
????????? ORG???? 0000H???????? ;程序執行開始地址
????????? LJMP??? START???????? ;跳至START
????????? ORG???? 0003H???????? ;外中斷0中斷程序入口
????????? RETI????????? ;中斷返回
????????? ORG???? 000BH???????? ;定時器T0中斷程序入口
????????? RETI????????? ;中斷返回
????????? ORG???? 0013H???????? ;外中斷1中斷入口
????????? RETI????????? ;跳至INTEX1中斷服務程序
????????? ORG???? 001BH???????? ;定時器T1中斷程序入口
????????? RETI????????? ;跳至INTT1中斷服務程序
????????? ORG???? 0023H???????? ;串口中斷入口地址
????????? RETI????????? ;中斷返回
????????? ORG???? 002BH???????? ;定時器T2中斷入口地址
????????? RETI????????? ;中斷返回
;-------------------------------------------
????????? ORG??? 0030H????????? ;
START:
????????? MOV??? SP,#60H??????? ;初始化堆棧指針?
?? MOV??? P0,#0FFH?????? ;初始化I/O口
?? MOV??? P1,#0FFH?????? ;
????????? MOV??? P2,#0FFH?????? ;
????????? MOV??? P3,#0FFH?????? ;
;*******************************************
MAIN:
????????? JNB? RMT,IR_1838??? ;
?? AJMP?? MAIN?????????? ;
;*******************************************
IR_1838:?
? ?? MOV ? R5,#10???????? ;
A1:
?? ACALL? DELAY882?;調用882微秒延時子程序
?? JB ? RMT,MAIN?;延時882微秒后判斷P3.2腳是否出現高電平如果有就退出解碼程序
??? DJNZ ? R5, A1 ?;重復10次,目的是檢測在8820微秒內如果出現高電平就退出解碼程序
?????????????? ????????? ;以上完成對遙控信號的9000微秒的初始低電平信號的識別。
?? JNB? RMT,$ ???????? ;等待高電平避開9毫秒低電平引導脈沖
?? ACALL? DELAY2???????? ;
?? JNB? RMT,MAIN ?;
?? ACALL? DELAY2???????? ;延時4.74毫秒避開4.5毫秒的結果碼
;*******************************************????????
?? MOV? R1,#1AH ?;設定1AH為起始RAM區
?? MOV? R2,#4????????? ;
A2: ?
?? MOV? R3,#8????????? ;
A3:?
?? JNB? RMT,$???????? ;等待地址碼第一位的高電平信號
?? LCALL? DELAY882?;高電平開始后用882微秒的時間尺去判斷信號此時的高低電平狀態
?? MOV? C,RMT???????? ;將P3.2引腳此時的電平狀態0或1存入C中
?? JNC? A4??;如果為0就跳轉到A4
?? LCALL? DELAY1????????? ;
A4:?
?? MOV? A,@R1??;將R1中地址的給A
?? RRC? A??;將C中的值0或1移入A中的最低位
?? MOV? @R1,A???????? ;將A中的數暫時存放在R1中
?? DJNZ? R3,A3???????? ;接收地址碼的高8位
?? INC? R1??;對R1中的值加1,換下一個RAM
?? DJNZ? R2,A2 ???????? ;接收完16位地址碼和8位數據碼和8位數據,存放在1AH/1BH/1CH/1DH的RAM中
;*************** *****************************************
?? MOV? P2,1DH??? ?;將按鍵的鍵值通過P2口的8個LED顯示出來!
?? CLR ? P3.7???????? ;蜂鳴器鳴響-嘀嘀嘀-的聲音,表示解碼成功
?? LCALL? DELAY2???????? ;
?? LCALL? DELAY2???????? ;
?? LCALL? DELAY2???????? ;
????????? SETB?? P3.7?????????? ;蜂鳴器停止
?? LJMP? MAIN?????????? ;
;*******************************************
;882US
DELAY882:?????????????????????? ;
?? MOV? R6,#200??????? ;
DEL1:
??? ?? NOP?????????????????? ;
?? NOP?????????????????? ;
?? DJNZ? R6,DEL1???????? ;
????????? RET?????????????????? ;
;*******************************************
;1000US
DELAY1:?
?? MOV? R6,#230
DEL2:
??? ?? NOP
?? NOP
?? DJNZ? R7,DEL2
????????? RET
;*******************************************
;2300US
DELAY2:?????????????
?? MOV? R6,#248
DEL3:
??? ?? NOP
?? NOP
??? ?? NOP
?? NOP
?? NOP
?? ?? NOP
?? NOP
?? DJNZ? R6,DEL3????
????????? RET
????????? END
?;*******************************************
非常好我支持^.^
(9) 100%
不好我反對
(0) 0%