;*****************************红外遥控解码子程序IRIN********************************
;程序功能:对接收编码进行解码,获取键号
;入口条件:P3.2
;出口参数:REDNO1和REDNO2
;红外线前导码
IRIN: ;开始读取操作数据
MOV R1,#REDNO1 ;读取数据存放的初始地址
MOV R2,#2 ;REDNO1和REDNO2共2个存放数据单元
IR_8B: MOV R3,#8
IR_4B: JNB P3.2,$ ;等待高电平出现
LCALL DELAY882 ;间隔882us判断P3.2的高低电平
MOV C,P3.2
JNC IR_0_1 ;C=0跳转
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 ;完成识别码、数据码解码
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位数据?
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 ;音乐开与关
CALL LCD_WRTD
RET
;============拆字显示==============
CHAIZI: MOV B,A ;先保存原始数据
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 ;不忙时直接跳转
CALL DL5MS ;等待到不忙
L1: CLR RS
CLR RW
SETB E
MOV Pdate,A
CLR E
RET
;============写数据=============
;入口地址:A
LCD_WRTD:
评论
查看更多