📄 rmbscr.asm
字号:
if_tcolu3: cjne a,#3,if_tcolu4
mov tmp4,#0ah ;星期闪烁
ljmp nordisp
if_tcolu4: cjne a,#4,if_tcolu5
mov tmp3,#0ah ;小时闪烁
mov tmp2,#0ah
ljmp nordisp
if_tcolu5: cjne a,#5,nordisp
mov tmp1,#0ah ;分钟闪烁
mov tmp0,#0ah
ljmp nordisp
ledladj: mov ddotflash,#0ffh
nordisp: mov r3,#13 ;显示时间,日期
mov r0,#tmp0
showtime: mov a,@r0
lcall shiftbit
inc r0
djnz r3,showtime
ret
;** CBCD_BCD: 压缩bcd码转换成bcd码 ***********************************
;** 入口参数: a--压缩的bcd码; @r0--转换结果存放单元 ******************
cbcd_bcd: mov r2,a
anl a,#00001111b ;压缩bcd码转换成bcd码
mov @r0,a
inc r0
mov a,r2
swap a
anl a,#00001111b
mov @r0,a
inc r0
ret
;** SHIFTBIT: 8 bit 数据移位子程序 ***********************************
;** 入口参数: A-- 显示数据 *******************************************
shiftbit: mov r2,#08h ;每个数据右移8位
clr c
mov dptr,#caltab ;置字形表存放单元地址
movc a,@a+dptr ;寻找数据对应显示字段
cycleshift: clr p1.6
rrc a ;显示字段右移
mov p1.5,c ;串行输出字段数据
setb p1.6
nop
nop
nop
clr p1.6
djnz r2,cycleshift
ret
caltab: db 81h,0edh,43h,49h,2ch ;"0--4"
db 19h,11h,0cdh,01h,09h ;"5--9"
db 0ffh ;8段全灭
;** read 12887 *************************************************
readtime: mov dptr,#800ah
waituip: movx a,@dptr
jb acc.7,waituip ;是否可读时间,日期
mov dptr,#8002h
movx a,@dptr
mov minute,a ;读分钟
mov dptr,#8004h
movx a,@dptr
mov hour,a ;读小时
mov r2,#4
mov dptr,#8006h
mov r0,#week
readcal: movx a,@dptr ;读日历
mov @r0,a
inc dptr
inc r0
djnz r2,readcal
ret
;** REMOTE: 遥控接收处理程序 *****************************************
remote: setb p1.4
push acc
push psw
push dph
push dpl
push b
setb rs0
setb rs1
mov a,int1times
cjne a,#0,recieve
inc int1times
mov th1,#0
mov tl1,#0
setb tr1
pop b
pop dpl
pop dph
pop psw
pop acc
reti
recieve: mov tmpth1,th1 ;read T1
mov tmptl1,tl1
mov th1,#0
mov tl1,#0
mov a,int1times
cjne a,#1,recievecode ;if leadercode
mov a,tmpth1 ;if 3390h<T1<35e8h(13.2ms<T1<13.8ms)
cjne a,#33h,no_th33h ;if TH1=33h
mov a,tmptl1 ;TH1=33h
cjne a,#90h,no_tl90h ;TH1=33h,if TL1=90h
ljmp okcode ;TH1=33h,TL1=90h,OK!
no_tl90h: jnc okcode ;TH1=33h,TL1>90h,OK!
ljmp exitint1 ;TH1=33h,TL1<90h,BAD!
no_th33h: jnc glt33 ;TH1>33h
ljmp exitint1 ;TH1<33h,BAD!
glt33: cjne a,#35h,no_th35h ;if TH1=35h
mov a,tmptl1 ;TH1=35h
cjne a,#0e8h,no_tl18h ;TH1=35h,if TL1=0e8h
ljmp okcode ;TH1=35h,TL1=0e8h,OK!
no_tl18h: jc okcode ;TH1=35h,TL1<0e8h,OK!
ljmp exitint1 ;TH1=35h,TL1>0e8h,BAD!
no_th35h: jc okcode ;TH1<35h,OK!
ljmp exitint1 ;TH1>35h,BAD!
okcode: inc int1times
ljmp quitint1 ;leadercode OK!
recievecode: mov a,tmpth1 ;if 0401<T1<04c9(1.025ms<T1<1.225ms)
cjne a,#04h,no_th04h ;if TH1=04h
mov a,tmptl1 ;TH1=04h
cjne a,#01h,no_tl01h ;TH1=04h,if TL1=01h
ljmp yescode0 ;TH1=04h,TL1=01h,"0"
no_tl01h: jnc tlglt01 ;TH1=04h,TL1>01h
ljmp exitint1 ;TH1=04h,TL1<01h,BAD!
tlglt01: cjne a,#0c9h,no_tlc9h ;TH1=04h,if TL=0c9h
ljmp yescode0 ;TH1=04h,TL1=0c9h,"0"
no_tlc9h: jc yescode0 ;TH1=04h,TL1<0c9h,"0"
ljmp exitint1 ;TH1=04h,TL1>0c9h,BAD!
no_th04h: cjne a,#08h,no_th08h ;if 0866<T1<092eh(2.15ms<T1<2.35ms)
mov a,tmptl1 ;TH1=08h
cjne a,#66h,no_tl66h ;TH1=08h,if TL1=66h
ljmp yescode1 ;TH1=08h,TL1=66h,"0"
no_tl66h: jnc yescode1 ;TH1=08h,TL1>66h,"0"
ljmp exitint1 ;TH1=08h,TL1<66h,BAD!
no_th08h: jnc glt08 ;TH1>08h
ljmp exitint1 ;TH1<08h,BAD!
glt08: cjne a,#09h,no_th09h ;if TH1=09h
mov a,tmptl1 ;TH1=09h
cjne a,#2eh,no_tl2eh ;TH1=09h,if TL1=2eh
ljmp yescode1 ;TH1=09h,TL1=2eh,OK!
no_tl2eh: jc yescode1 ;TH1=09h,TL1<2eh,OK!
ljmp exitint1 ;TH1=09h,TL1>2eh,BAD!
no_th09h: ljmp exitint1 ;TH1>09h,BAD!
yescode0: clr c
ljmp sendcode
yescode1: setb c
sendcode: mov a,coderam3
rlc a
mov coderam3,a
mov a,coderam2
rlc a
mov coderam2,a
mov a,coderam1
rlc a
mov coderam1,a
mov a,coderam0
rlc a
mov coderam0,a
mov a,int1times
cjne a,#33,mid_code
ljmp processkey
mid_code: inc int1times
ljmp quitint1
processkey: mov a,coderam0
cjne a,#usercode,renewkey ;比较是否用户码
ljmp cmpusercode
renewkey: ljmp exitint1
cmpusercode: add a,coderam1
cjne a,#0ffh,renewkey
ljmp cmpdatacode
cmpdatacode: mov dptr,#codetab ;取遥控码表首址
getcode: clr a
movc a,@a+dptr ;取遥控码
cjne a,#0ffh,nextdatacode
ljmp exitint1 ;非法码,舍弃
nextdatacode: inc dptr ;表址加1
cjne a,coderam2,nextcode
add a,coderam3
cjne a,#0ffh,renewkey
clr a
movc a,@a+dptr
mov b,a
inc dptr
clr a
movc a,@a+dptr
mov dpl,a
mov dph,b
clr a
jmp @a+dptr
nextcode: inc dptr ;准备比较下一个遥控码
inc dptr
ljmp getcode
codetab: db codeup ;"↑"的遥控码
dw keyup ;按键"↑"处理程序入口
db codedown ;"↓"的遥控码
dw keydown ;按键"↓"处理程序入口
db codeleft ;"←"的遥控码
dw keyleft ;按键"←"处理程序入口
db coderight ;"→"的遥控码
dw keyright ;按键"→"处理程序入口
db code0 ;"0"的遥控码
dw key0 ;按键"0"处理程序入口
db code1 ;"1"的遥控码
dw key1 ;按键"1"处理程序入口
db code2 ;"2"的遥控码
dw key2 ;按键"2"处理程序入口
db code3 ;"3"的遥控码
dw key3 ;按键"3"处理程序入口
db code4 ;"4"的遥控码
dw key4 ;按键"4"处理程序入口
db code5 ;"5"的遥控码
dw key5 ;按键"5"处理程序入口
db code6 ;"6"的遥控码
dw key6 ;按键"6"处理程序入口
db code7 ;"7"的遥控码
dw key7 ;按键"7"处理程序入口
db code8 ;"8"的遥控码
dw key8 ;按键"8"处理程序入口
db code9 ;"9"的遥控码
dw key9 ;按键"9"处理程序入口
db codedot ;"."的遥控码
dw keydot ;按键"."处理程序入口
db codedark
dw keydark
db codestart ;"启动"的遥控码
dw keystart ;按键"启动"处理程序入口
db codeltinc ;"亮度调整+"的遥控码
dw keylightinc ;按键"亮度调整+"处理程序入口
db codeltdec ;"亮度调整-"的遥控码
dw keylightdec ;按键"亮度调整-"处理程序入口
db codeonoff ;"开/关机"的遥控码
dw keyonoff ;按键"开/关机"处理程序入口
db codetime ;"时间校准"的遥控码
dw keyadjtime ;按键"时间校准"处理程序入口
db 0ffh ;结束标志
keyup: mov a,modify
cjne a,#00h,modista1
ljmp exitint1
modista1: mov a,numchar
cjne a,#0,mustsave1
ljmp nosave1
mustsave1: lcall savedata
nosave1: mov numchar,#0
mov a,modiline ;取上次闪烁行数
cjne a,#0,no_firstline ;比较是否第一行闪烁
mov modiline,#10 ;是,则置最后1行1列闪烁
mov modicolu,#0
ljmp exitint1
no_firstline: dec modiline ;上移一行
ljmp exitint1
keydown: mov a,modify
cjne a,#00h,modista2
ljmp exitint1
modista2: mov a,numchar
cjne a,#0,mustsave2
ljmp nosave2
mustsave2: lcall savedata
nosave2: mov numchar,#0
mov a,modiline ;取上次闪烁行数
cjne a,#10,no_lastline ;比较是否最后一行闪烁
mov modiline,#0 ;是,则置第一行闪烁
ljmp exitint1
no_lastline: cjne a,#6,if_line9
mov a,modicolu
cjne a,#1,norlinc
mov modicolu,#0
ljmp norlinc
if_line9: cjne a,#9,norlinc
mov modicolu,#0
norlinc: inc modiline ;下移一行
ljmp exitint1
keyleft: mov a,modify
cjne a,#00h,modista3
ljmp exitint1
modista3: mov a,adjtime
cjne a,#00h,is_moditime0
ljmp modi_data0
is_moditime0: mov a,modicolu
cjne a,#0,deccol
mov modicolu,#5
ljmp exitint1
deccol: dec modicolu
ljmp exitint1
modi_data0: mov a,numchar
cjne a,#0,mustsave3
ljmp nosave3
mustsave3: lcall savedata
nosave3: mov numchar,#0
mov a,modiline ;取闪烁行数
cjne a,#7,if_twoclou1 ;比较是否7,8,9,10行闪烁
ljmp twocolu
if_twoclou1: cjne a,#8,if_twoclou2
ljmp twocolu
if_twoclou2: cjne a,#9,if_twoclou3
ljmp twocolu
if_twoclou3: cjne a,#10,if_twoclou4
mov modiline,#0
mov modicolu,#0
ljmp exitint1
if_twoclou4: mov a,modicolu
cjne a,#0,norcolinc
mov modicolu,#2
ljmp exitint1
norcolinc: dec modicolu
ljmp exitint1
twocolu: mov a,modicolu
cjne a,#0,is_colu2
mov modicolu,#2
ljmp exitint1
is_colu2: mov modicolu,#0
ljmp exitint1
keyright: mov a,modify
cjne a,#00h,modista4
ljmp exitint1
modista4: mov a,adjtime
cjne a,#00h,is_moditime1
ljmp modi_data1
is_moditime1: mov a,modicolu
cjne a,#5,inccol
mov modicolu,#0
ljmp exitint1
inccol: inc modicolu
ljmp exitint1
modi_data1: mov a,numchar
cjne a,#0,mustsave4
ljmp nosave4
mustsave4: lcall savedata
nosave4: mov numchar,#0
mov a,modiline ;取闪烁行数
cjne a,#7,iftwoclou1 ;比较是否7,8,9,10行闪烁
ljmp two_colu
iftwoclou1: cjne a,#8,iftwoclou2
ljmp two_colu
iftwoclou2: cjne a,#9,iftwoclou3
ljmp two_colu
iftwoclou3: cjne a,#10,iftwoclou4
mov modiline,#0
mov modicolu,#0
ljmp exitint1
iftwoclou4: mov a,modicolu
cjne a,#2,nor_colinc
mov modicolu,#0
ljmp exitint1
nor_colinc: inc modicolu
ljmp exitint1
two_colu: mov a,modicolu
cjne a,#2,iscolu2
mov modicolu,#0
ljmp exitint1
iscolu2: mov modicolu,#2
ljmp exitint1
key0: mov a,modify
cjne a,#00h,modista5
ljmp exitint1
modista5: mov a,adjtime
cjne a,#0ffh,modi_data2
mov a,#0
lcall timemodi
ljmp exitint1
modi_data2: mov a,#0
lcall common0_9
ljmp exitint1
key1: mov a,modify
cjne a,#00h,modista6
ljmp exitint1
modista6: mov a,adjtime
cjne a,#0ffh,modi_data3
mov a,#1
lcall timemodi
ljmp exitint1
modi_data3: mov a,#1
lcall common0_9
ljmp exitint1
key2: mov a,modify
cjne a,#00h,modista7
ljmp exitint1
modista7: mov a,adjtime
cjne a,#0ffh,modi_data4
mov a,#2
lcall timemodi
ljmp exitint1
modi_data4: mov a,#2
lcall common0_9
ljmp exitint1
key3: mov a,modify
cjne a,#00h,modista8
ljmp exitint1
modista8: mov a,adjtime
cjne a,#0ffh,modi_data5
mov a,#3
lcall timemodi
ljmp exitint1
modi_data5: mov a,#3
lcall common0_9
ljmp exitint1
key4: mov a,modify
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -