db 22h,0FFh, 02h, 00h, 00h, 00h, 00h, 07h
db 02h, 02h, 02h, 02h, 02h, 07h, 00h, 00h
;***************************************************T0定时子程序<不占区>
org 1000h
ttxx:mov th0,#03ch ;以下是T0刷新子程序
mov tl0,#0b0h
push dph
push dpl
push acc
push psw
inc 28h
mov a,28h
cjne a,#05h,tt22 ;刷新5次
mov 28h,#00h
inc 29h ;延时500mS两次
mov a,29h
cjne a,#02h,tt22
mov 29h,#00h
inc 2ah ;刷新秒个位
mov a,2ah ;刷新秒十位
cjne a,#0ah,tt22
mov 2ah,#00h
inc 2bh ;刷新秒十位
mov a,2bh
cjne a,#06h,tt22
mov 2bh,#00h
inc 2ch ;刷新分个位
mov a,2ch
cjne a,#0ah,tt22
mov 2ch,#00h
inc 2dh ;刷新分十位
mov a,2dh
cjne a,#06h,tt22
mov 2dh,#00h
inc 2eh ;刷新时个位
mov a,2eh
cjne a,#0ah,tt11
mov 2eh,#00h
inc 2fh ;刷新时十位
tt22:pop psw
pop acc
pop dpl
pop dph
reti
tt11:mov a,2eh
cjne a,#04h,tt22
mov a,2fh
cjne a,#02h,tt22
mov 2eh,#00h ;到24点,时两位全清零
mov 2fh,#00h
inc 25h
mov a,25h ;刷新周数据
cjne a,#08h,tt33
mov 25h,#01h
tt33:inc 26h ;刷新日数据
mov a,26h
cjne a,#32,tt44
mov 26h,#01h
inc 27h
mov a,27h ;刷新月数据
cjne a,#13,tt55
mov 27h,#1
sjmp tt22
tt55:mov a,27h
anl a,#0fh
cjne a,#0ah,tt22
mov 27h,#10h
sjmp tt22
tt44:mov a,26h
anl a,#0fh
cjne a,#0ah,tt22
mov a,26h
swap a
inc a
anl a,#0fh
swap a
mov 26h,a
sjmp tt22
;***************************************************T1读红外代码子程序<占用区2 >
org 1100h
tt1:push dph ;保护现场
push dpl
push acc
push psw
jb 01h,t3
jb 02h,t3
jb 00h,t2 ;如果收到遥控引导码则进入接收识别模式
mov th1,#00h ;清T1,为接收做准备
mov tl1,#00h
setb 00h ;设接收遥控波头准备好标志位
setb tr1 ;开T1中断
sjmp t3
t2:setb psw.4 ;进入区2
clr psw.3
mov @r0,th1
mov th1,#00h ;清T1,准备读下一位
mov tl1,#00h
inc r0
djnz r1,t3 ;全部信号接收完闭否?
mov 10h,#50h
mov 11h,#2fh
setb 01h ;设读取完成与允许转换标志位
clr tr1 ;关T1中断
clr ex1 ;关外部中断1
clr 00h ;恢复接收标致位
t3:pop psw
pop acc
pop dpl
pop dph
reti
;***************************************************zh转换子程序<占用区1>
org 11A0h
zh: push dph ;将识别后的遥控信号转换成16位动作代码
push dpl
push acc
push psw
setb psw.3 ;进入区i
clr psw.4
mov r0,#2fh
mov r1,#07h ;8位一小组
jb 00h,h01
jb 02h,h01
jb 01h,h0
h00:setb ex1
mov 20h,#00h
mov 21h,#00h
h01:mov 08h,#2fh
mov 09h,#07h
pop psw
pop acc
pop dph
pop dpl
ret
h0: inc r0 ;取第一组第一位
cjne r0,#71h,h1 ;是否干扰?
sjmp h00 ;是则返回
h1: jc h2
sjmp h00
h2: cjne @r0,#03h,h0 ;开始转换第一组第一位
inc r0
cjne @r0,#03h,h0
inc r0
cjne @r0,#03h,h0
inc r0
cjne @r0,#01h,h0
inc r0
cjne @r0,#01h,h0
inc r0
cjne @r0,#01h,h0
inc r0
cjne @r0,#03h,h0
inc r0
cjne @r0,#01h,h0
cjne r0,#79h,h3 ;地址码正确否?
sjmp h00
h3: jc h4
sjmp h00
h4: inc r0 ;开始转换指令码
mov a,@r0
jb acc.1,h5
clr 08h
sjmp h6
h5: setb 08h
h6: mov a,21h
rl a
mov 21h,a
djnz r1,h4 ;8位指令码转换完否?
setb 02h ;设置允许执行动作标志位
clr 01h ;清除允许转换标志位
ljmp h01
;***************************************************dz动作子程序<不占区>
org 12A0h
dz: push dph ;执行相应的动作
push dpl
push acc
push psw
jb 00h,d01
jb 01h,d01
jnb 02h,d01 ;允许动作否?
mov a,21h
cjne a,#0cch,dz2 ;是分增加否?
inc 2ch
mov a,2ch
cjne a,#0ah,d00
mov 2ch,#00h
inc 2dh
mov a,2dh
cjne a,#06h,d00
mov 2dh,#00h
sjmp d00
dz2:mov a,21h ;是分减少否?
cjne a,#0dch,dz3
mov a,2ch ;分减1
cjne a,#00h,dz21
mov 2ch,#09h
mov a,2dh
cjne a,#00h,dz22
mov 2dh,#05h
sjmp d00
dz21:dec 2ch
sjmp d00
dz22:dec 2dh
d00:setb ex1 ;全部动作完成后重新打开外部中断1
mov 20h,#00h ;清除全部标志位
mov 21h,#00h ;清除已完成的动作代码
setb 20h.7
d01:pop psw
pop acc
pop dpl
pop dph
ret
dz3:mov a,21h ;是时增加否?
cjne a,#0c4h,dz5
inc 2eh
mov a,2eh
cjne a,#0ah,dz4
mov 2eh,#00h
inc 2fh
sjmp d00
dz4:mov a,2eh
cjne a,#04h,d00
mov a,2fh
cjne a,#02h,d00
mov 2eh,#00h
mov 2fh,#00h
sjmp d00
dz5:mov a,21h
cjne a,#0d4h,dz6 ;是时减少否?
mov a,2eh
cjne a,#00h,dz50
mov 2eh,#9
mov a,2fh
cjne a,#00h,dz51
mov 2fh,#02h ;判别小时2位均为0则强制2fh=#02h,2eh=#03h
mov 2eh,#03h
sjmp d00
dz50:dec 2eh
sjmp d00
dz51:dec 2fh
sjmp d00
dz6:mov a,21h ;刷新周数据
cjne a,#044h,dz7
inc 25h
mov a,25h
cjne a,#08h,dz777
mov 25h,#01h
sjmp dz777
dz7:mov a,21h ;刷新月数据
cjne a,#054h,dz8
inc 27h
mov a,27h
cjne a,#13h,dz71
mov 27h,#1
sjmp dz777
dz71:mov a,27h
anl a,#0fh
cjne a,#0ah,dz777
mov a,27h
anl a,#0f0h
swap a
inc a
swap a
mov 27h,a
dz777:ljmp d00
dz8:mov a,21h ;是日期增加否?
cjne a,#50h,dz9
inc 26h
mov a,26h
cjne a,#32h,dz81
mov 26h ,#01h
sjmp dz777
dz81:mov a,26h
anl a,#0fh
cjne a,#0ah,dz777
mov a,26h
swap a
inc a
anl a,#0fh
swap a
mov 26h,a
sjmp dz777
dz9:mov a,21h ;是日期减小否?
cjne a,#48h,dz777
mov a,26h
cjne a,#01h,dz91
mov 26h,#31h
sjmp dz777
dz91:mov a,26h
cjne a,#31h,dz92
dec 26h
sjmp dz777
dz92:mov a,26h
cjne a,#30h,dz93
mov 26h,#29h
sjmp dz777
dz93:mov a,26h
cjne a,#20h,dz94
mov 26h,#19h
sjmp dz777
dz94:mov a,26h
cjne a,#10h,dz95
mov 26h,#09h
sjmp dz777
dz95:dec 26h
sjmp dz777
;***************************************************
END
;lxa12864LCD说明如下:
;CGRAM(自定义RAM区)地址范围40h~7Fh。
;DDRAM(显示RAM区)地址范围:
;80h~87h为第1行。
;88h~8fh为第3行。
;90h~97h为第2行。
;98h~9fh为第4行。
;A0h~AFh,B0h~BFh这2个仅在卷动功能下有效。
;汉字显示坐标
;_____________________________________________
; x坐标
; LINE1 80H 81H 82H 83H 84H 85H 86H 87H
; LINE2 90H 92H 93H 94H 94H 95H 96H 97H
; LINE3 88H 89H 8AH 8BH 8CH 8DH 8EH 8FH
; LINE4 98H 99H 9AH 9BH 9CH 9DH 9EH 9FH
;_____________________________________________
;汉字库:用宋体16.dot纵向取模下高位,数据排列:从左到右从上到下