;*****************************紅外遙控解碼子程序IRIN********************************
;程序功能:對接收編碼進行解碼,獲取鍵號
;入口條件:P3.2
;出口參數(shù):REDNO1和REDNO2
;紅外線前導碼
IRIN: ;開始讀取操作數(shù)據(jù)
MOV R1,#REDNO1 ;讀取數(shù)據(jù)存放的初始地址
MOV R2,#2 ;REDNO1和REDNO2共2個存放數(shù)據(jù)單元
IR_8B: MOV R3,#8
IR_4B: JNB P3.2,$ ;等待高電平出現(xiàn)
LCALL DELAY882 ;間隔882us判斷P3.2的高低電平
MOV C,P3.2
JNC IR_0_1 ;C=0跳轉(zhuǎn)
LCALL DELAY1120 ;延時1120us跳過查詢下一波形
IR_0_1: MOV A,@R1
RLC A
MOV @R1,A
DJNZ R3,IR_4B ;8位用戶碼接收完了嗎?
INC R1
DJNZ R2,IR_8B ;完成識別碼、數(shù)據(jù)碼解碼
RET
;*********************判斷按鍵號后的具體操作****************
GO: SETB ZZ
CLR ZF
SETB YZ
CLR YF
MOV DER,#3H
RET
STOP: CLR ZZ
CLR ZF
CLR YZ
CLR YF
MOV DER,#' '
RET
RZ: SETB ZZ
CLR ZF
CLR YZ
CLR YF
MOV DER,#7EH;向右箭號代碼
RET
LZ: CLR ZZ
CLR ZF
SETB YZ
CLR YF
MOV DER,#7FH;向左箭號代碼
RET
HT: CLR ZZ
SETB ZF
CLR YZ
SETB YF
MOV DER,#4H
RET
DG: SETB MUSIC
MOV MKG,#'$'
RET
TC: CLR MUSIC;停唱
MOV MKG,#' '
RET
;**************300us延時子程序******************
DELAY300:
MOV R7,#130
TIM0:
NOP
NOP
DJNZ R7,TIM0
RET
;**************882us延時子程序******************
DELAY882:
MOV R7,#202
TIM1: NOP
NOP
DJNZ R7,TIM1
RET
;**************1120US延時子程序******************
DELAY1120:
MOV R7,#224
TIM2: NOP
NOP
NOP
DJNZ R7,TIM2
RET
;========================================================================================================
;========================================================================================================
;========================================================================================================
;========================================================================================================
;==========LCM初始化程序===========
LCD_INIT: ;熱啟動
CALL DL10MS
MOV A,#38H
CLR LCD_FLAG
CALL LCD_WRC
CALL DL5MS
CALL LCD_WRC
CALL DL120US
CALL LCD_WRC
CALL DL120US
SETB LCD_FLAG;設忙
MOV A,#38H ;功能設置為2行顯示,8位數(shù)據(jù)?
ACALL LCD_WRC
MOV A,#01H
ACALL LCD_WRC
MOV A,#06H
ACALL LCD_WRC
MOV A,#0CH
ACALL LCD_WRC
RET
;==============顯示子程序============
;功 能:時鐘顯示
;入口條件:50H~ 56H ,存放秒~年
DISPLAY:MOV DPTR,#TAB
MOV A,#80H ;在第一行中間位置
CALL LCD_WRC ;寫命令
MOV A,Year
CALL CHAIZI
MOV A,#0 ;顯示年
CALL LCD_WRTD
MOV A,Month
CALL CHAIZI
MOV A,#1 ;顯示月
CALL LCD_WRTD
MOV A,Day
CALL CHAIZI
MOV A,#2 ;顯示日
CALL LCD_WRTD
MOV A,#' ' ;顯示' '
CALL LCD_WRTD
MOV A,#' '
CALL LCD_WRTD
MOV A,Week ;顯示星期
CALL CHAIZI
MOV A,#0C3H ;在第二行中間位置
CALL LCD_WRC
MOV A,Hour
CALL CHAIZI
MOV A,#':' ;顯示時間分隔符
CALL LCD_WRTD
MOV A,Minute
CALL CHAIZI
MOV A,#':' ;顯示時間分隔符
CALL LCD_WRTD
MOV A,Second
CALL CHAIZI
MOV A,#0CEH ;在第二行后面位置顯示小車行走方向
CALL LCD_WRC
MOV A,DER
CALL LCD_WRTD
MOV A,MKG ;音樂開與關(guān)
CALL LCD_WRTD
RET
;============拆字顯示==============
CHAIZI: MOV B,A ;先保存原始數(shù)據(jù)
ANL A,#0F0H;相與 ;先顯示十位
SWAP A
MOVC A,@A+DPTR
CALL LCD_WRTD
MOV A,B ;后顯示個位
ANL A,#0FH
MOVC A,@A+DPTR
CALL LCD_WRTD
RET
;=============寫命令===========
;入口地址:A
LCD_WRC:
JNB LCD_FLAG,L1 ;不忙時直接跳轉(zhuǎn)
CALL DL5MS ;等待到不忙
L1: CLR RS
CLR RW
SETB E
MOV Pdate,A
CLR E
RET
;============寫數(shù)據(jù)=============
;入口地址:A
LCD_WRTD:
評論