|
這是一款紅外遙控液晶顯示智能數(shù)字鐘,用遙控調(diào)整時(shí)間,非常方便,遙控器用的是M50462AP發(fā)射芯片的遙控器。,程序來(lái)源于網(wǎng)絡(luò),在這里 我把它收集整理出來(lái),給愛好電子小制作的愛好者作參考,智能數(shù)字鐘制作,是很多電子小制作愛好者都制作過(guò)的電子小制作項(xiàng)目,成功制作這么一件電子小制作作品,可以增強(qiáng)學(xué)習(xí)電子技術(shù)的信心。下面是紅外遙控液晶顯示智能數(shù)字鐘和原理示意圖各源程序:
;紅外遙控液晶屏智能數(shù)字鐘匯編代碼
RS EQU p2.0 ;定義液晶接口
RW EQU p2.1
E EQU p2.2
com EQU 23h
dat EQU 24h
org 0000h
ljmp mm
org 000bh
ljmp ttxx
org 0013h
ljmp tt1
;顯示xsz子程序<占用區(qū)0>********************************************
org 0020h
xsz:nop
push dph ;保護(hù)現(xiàn)場(chǎng)
push dpl
push acc
push psw
mov com,#93h ;設(shè)置秒個(gè)位地址
lcall wrcom
mov a,2ah ;取秒個(gè)位數(shù)據(jù)
add a,#30h
mov dat,a ;送出顯示
lcall wrdat
mov com,#92h ;設(shè)置秒十位地址
lcall wrcom
mov a,2bh ;取秒十位數(shù)據(jù)
add a,#30h
mov dat,a ;送出顯示
lcall wrdat
mov com,#90h ;設(shè)置分個(gè)位地址
lcall wrcom
mov a,2ch ;取分個(gè)位數(shù)據(jù)
add a,#30h
mov dat,a ;送出顯示
lcall wrdat
mov com,#8fh ;設(shè)置分十位地址
lcall wrcom
mov a,2dh ;取分十位數(shù)據(jù)
add a,#30h
mov dat,a ;送出顯示
lcall wrdat
mov com,#8dh ;設(shè)置時(shí)個(gè)位地址
lcall wrcom
mov a,2eh ;取時(shí)個(gè)位數(shù)據(jù)
add a,#30h
mov dat,a ;送出顯示
lcall wrdat
mov com,#8ch ;設(shè)置時(shí)十位地址
lcall wrcom
mov a,2fh ;取時(shí)十位數(shù)據(jù)
add a,#30h
mov dat,a ;送出顯示
lcall wrdat
mov com,#96h ;設(shè)置周地址
lcall wrcom
mov dat,25h ;取星期字符代碼
lcall wrdat
mov com,#89h ;設(shè)置日個(gè)位地址
lcall wrcom
mov a,26h ;取日個(gè)位字符代碼
anl a,#0fh
add a,#30h
mov dat,a ;送出顯示
lcall wrdat
mov com,#88h ;設(shè)置日十位地址
lcall wrcom
mov a,26h ;取日十位字符代碼
swap a
anl a,#0fh
add a,#30h
mov dat,a ;送出顯示
lcall wrdat
mov com,#86h ;設(shè)置月個(gè)位地址
lcall wrcom
mov a,27h ;取月個(gè)位字符代碼
anl a,#0fh
add a,#30h
mov dat,a ;送出顯示
lcall wrdat
mov com,#85h ;設(shè)置月十位地址
lcall wrcom
mov a,27h ;取月十位字符代碼
swap a
anl a,#0fh
add a,#30h
mov dat,a ;送出顯示
lcall wrdat
pop psw ;恢復(fù)現(xiàn)場(chǎng)
pop acc
pop dpl
pop dph
ret ;返回
;主程序*********************************************************
org 0100h
mm:nop
mov th0,#03ch ;T0設(shè)初始值
mov tl0,#0b0h ;TH0=3ch,TL0=b0h
mov tmod,#91h ;T0設(shè)方式1
mov tcon,#14h ;T0設(shè)控制方式
mov ie,#86h ;設(shè)中斷允許
mov ip,#04h ;設(shè)中斷優(yōu)先級(jí)別
mov sp,#7fh ;設(shè)堆棧入口
mov r6,#00h ;0.1秒延時(shí)用
mov r7,#00h ;0.1秒延時(shí)用
mov 08h,#2fh ;解碼轉(zhuǎn)換用
mov 09h,#07h ;解碼轉(zhuǎn)換用
mov 10h,#30h ;讀紅外波頭存放首址
mov 11h,#2fh ;讀紅外波頭48個(gè)
mov 20h,#00h ;動(dòng)作標(biāo)志位1
mov 21h,#00h ;動(dòng)作標(biāo)志位2
mov 22h,#00h ;備用
mov 23h,#00h ;com占用
mov 24h,#00h ;dat占用
mov 25h,#07h ;周
mov 26h,#15h ;日
mov 27h,#01h ;月
mov 28h,#00h ;50mS
mov 29h,#00h ;500mS
mov 2ah,#00h ;秒個(gè)位
mov 2bh,#00h ;秒十位
mov 2ch,#00h ;分個(gè)位
mov 2dh,#00h ;分十位
mov 2eh,#00h ;時(shí)個(gè)位
mov 2fh,#00h ;時(shí)十位
MOV p0,#01H ;清屏
lCALL wcom
MOV p0,#38H ;使用8Bits匯流排,顯示2行5*7字符
lCALL wcom
MOV p0,#0CH ;顯示開,光標(biāo)關(guān)
lCALL wcom
MOV p0,#06H ;字符不動(dòng),光標(biāo)自動(dòng)右移一格
lCALL wcom
MOV p0,#80H ;第一行的開始位置
lcALL wcom
MOV DPTR,#TABLE1 ;顯示
lCALL xsz11 ;到TABLE1取碼
MOV p0,#0C0H ;第二行的位置
lCALL wcom
MOV DPTR,#TABLE2 ;顯示
lCALL xsz11 ;到TABLE2 取碼
lcall cgwr ;建立自定義CGRAM字符庫(kù)
m0:nop
lcall xsz
lcall dbf
lcall zh
lcall dbf
lcall dz
lcall dbf
sjmp m0
; T0定時(shí)子程序<占區(qū)0>************************************************
org 01a0h
ttxx:mov th0,#03ch ;以下是T0刷新子程序
mov tl0,#0b0h
push dph
push dpl
push acc
push psw
clr psw.3 ;進(jìn)入第0組工作寄存器
clr psw.4
inc 28h
mov a,28h
cjne a,#0ah,tt22 ;刷新10次
mov 28h,#00h
inc 29h ;延時(shí)500mS兩次
mov a,29h
cjne a,#02h,tt22
mov 29h,#00h
inc 2ah ;刷新秒個(gè)位
mov a,2ah ;刷新秒十位
cjne a,#0ah,tt22
mov 2ah,#00h
inc 2bh ;刷新秒十位
mov a,2bh
cjne a,#06h,tt22
mov 2bh,#00h
inc 2ch ;刷新分個(gè)位
mov a,2ch
cjne a,#0ah,tt22
mov 2ch,#00h
inc 2dh ;刷新分十位
mov a,2dh
cjne a,#06h,tt22
mov 2dh,#00h
inc 2eh ;刷新時(shí)個(gè)位
mov a,2eh
cjne a,#0ah,tt11
mov 2eh,#00h
inc 2fh ;刷新時(shí)十位
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點(diǎn),時(shí)兩位全清零
mov 2fh,#00h
inc 25h
mov a,25h ;刷新周數(shù)據(jù)
cjne a,#08h,tt33
mov 25h,#01h
tt33:inc 26h ;刷新日數(shù)據(jù)
mov a,26h
cjne a,#32,tt44
mov 26h,#01h
inc 27h ;刷新月數(shù)據(jù)
mov b,27h
mov a,27h
anl a,#0fh
cjne a,#03,tt55
mov a,b
anl a,#0f0h
cjne a,#10h,tt22
mov 27h,#01h
sjmp tt22
tt55:mov a,b
anl a,#0fh
cjne a,#0ah,tt22
mov a,b
anl a,#0f0h
swap a
inc a
swap a
mov 27h,a
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
;以下是建立自定義CGRAM字符庫(kù)子程序*********************************
org 0280h
cgwr:nop
mov com,#40h ;設(shè)置CGRAM首地址
lcall wrcom
mov r2,#64 ;設(shè)置周1~周日共8X8=64個(gè)代碼
mov r3,#00h
mov dptr,#cgtab1 ;設(shè)置字符代碼表首地址
cgwr11:mov a,r3
movc a,@a+dptr ;取字符代碼
mov dat,a
lcall wrdat
inc r3
djnz r2,cgwr11
ret
;以下是CGRAM數(shù)據(jù)表*************************************************
cgtab1:
db 00h,01h,02h,03h,04h,05h,06h,07h ;"空"代碼=0x00h
db 00h,00h,00h,00h,0ffh,00h,00h,00h ;"一"代碼=0x01h
db 00h,00h,00h,0eh,00h,0ffh,00h,00h ;"二"代碼=0x02h
db 00h,00h,0ffh,00h,0eh,00h,0ffh,00h ;"三"代碼=0x03h
db 00h,00h,0ffh,0f5h,0fbh,0f1h,0ffh,00h ;"四"代碼=0x04h
db 00h,0feh,08h,0feh,0ah,0ah,0ffh,00h ;"五"代碼=0x05h
db 00h,04h,00h,0ffh,00h,0ah,11h,00h ;"六"代碼=0x06h
db 1fh,11h,11h,1fh,11h,11h,1fh,00h ;"日"代碼=0x07h
;以下是字符數(shù)據(jù)表**************************************************
table1: db"2008- - : : < >",00H
table2: db" Li-xiao-an ",00H
org 0330h
wcom:CLR RS ;送命令
CLR RW
CLR E
lCALL Dbf
SETB E
RET
wdat:SETB RS ;送顯示數(shù)據(jù)
CLR RW
CLR E
lCALL Dbf
SETB E
RET
xsz11:push dph
push dpl
push acc
push psw
MOV R1,#00H ;顯示table中的值
A1: MOV A,R1 ;到table取碼
MOVC A,@A+DPTR
mov p0,a
lcall wdat ;顯示到lcd
INC R1
CJNE A,#00H,A1 ;是否到00h
pop psw
pop acc
pop dpl
pop dph
RET
Dbf: push psw
clr psw.3
clr psw.4
MOV R7,#02 ;延時(shí)0.5mS子程序
D1:MOV R6,#0FFH
DJNZ R6,$
DJNZ R7,D1
pop psw
RET
wrcom:nop ;寫指令子程序******************
push acc
clr rs
clr rw
clr e
lcall Dbf
mov p0,com
setb e
clr e
pop acc
ret
wrdat:nop ;寫數(shù)據(jù)子程序******************
push acc
setb rs
clr rw
clr e
lcall Dbf
mov p0,dat
setb e
clr e
pop acc
ret
;tt1 T1讀紅外代碼子程序<占用區(qū)2 >*******************************
org 0400h
tt1:push dph ;保護(hù)現(xiàn)場(chǎng)
push dpl
push acc
push psw
jb 01h,t3
jb 02h,t3
jb 00h,t2 ;如果收到遙控引導(dǎo)碼則進(jìn)入接收識(shí)別模式
mov th1,#00h ;清T1,為接收做準(zhǔn)備
mov tl1,#00h
setb 00h ;設(shè)接收遙控波頭準(zhǔn)備好標(biāo)志位
setb tr1 ;開T1中斷
sjmp t3
t2:setb psw.4 ;進(jìn)入?yún)^(qū)2
clr psw.3
mov @r0,th1
mov th1,#00h ;清T1,準(zhǔn)備讀下一位
mov tl1,#00h
inc r0
djnz r1,t3 ;全部信號(hào)接收完閉否?
mov 10h,#30h
mov 11h,#2fh
setb 27h
setb 01h ;設(shè)讀取完成與允許轉(zhuǎn)換標(biāo)志位
clr ex1 ;關(guān)外部中斷1
clr tr1 ;關(guān)T1中斷
clr 00h ;恢復(fù)接收標(biāo)致位
t3:pop psw
pop acc
pop dpl
pop dph
reti
;zh轉(zhuǎn)換子程序<占用區(qū)1>*********************************************
org 0480h
zh: push dph ;將識(shí)別后的遙控信號(hào)轉(zhuǎn)換成16位動(dòng)作代碼
push dpl
push acc
push psw
setb psw.3 ;進(jìn)入?yún)^(qū)i
clr psw.4
mov r0,#2fh
mov r1,#07h ;8位一小組
jb 00h,h01
jb 02h,h01
jb 01h,h0 ;允許轉(zhuǎn)換否?
h00:setb ex1
mov 20h,#00h
mov 21h,#00h
h01:mov 08h,#2fh
mov 09h,#07h
pop psw
pop acc
pop dpl
pop dph
ret
h0: inc r0 ;取第一組第一位
cjne r0,#50h,h1 ;是否干擾?
sjmp h2 ;是則返回
h1: jc h2
sjmp h00
h2:cjne @r0,#07h,h0 ;開始轉(zhuǎn)換第一組第一位
inc r0
cjne @r0,#07h,h0
inc r0
cjne @r0,#07h,h0
inc r0
cjne @r0,#02h,h0
inc r0
cjne @r0,#02h,h0
inc r0
cjne @r0,#02h,h0
inc r0
cjne @r0,#07h,h0
inc r0
cjne @r0,#02h,h0
cjne r0,#58h,h3 ;地址碼正確否?
sjmp h4
h3: jc h4
sjmp h00
h4: inc r0 ;開始轉(zhuǎn)換指令碼
mov a,@r0
jb acc.2,h5
clr 08h
sjmp h6
h5: setb 08h
h6: mov a,21h
rl a
mov 21h,a
djnz r1,h4 ;8位指令碼轉(zhuǎn)換完否?
setb 02h ;設(shè)置允許執(zhí)行動(dòng)作標(biāo)志位
clr 01h ;清除允許轉(zhuǎn)換標(biāo)志位
sjmp h01
;dz動(dòng)作子程序<不占區(qū)>**********************************************
org 0500h
dz: push dph ;執(zhí)行相應(yīng)的動(dòng)作
push dpl
push acc
push psw
jb 00h,d01
jb 01h,d01
jnb 02h,d01 ;允許動(dòng)作否?
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 ;全部動(dòng)作完成后重新打開外部中斷1
mov 20h,#00h ;清除全部標(biāo)志位
mov 21h,#00h ;清除已完成的動(dòng)作代碼
d01:pop psw
pop acc
pop dpl
pop dph
ret
dz3:mov a,21h ;是時(shí)增加否?
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 ;是時(shí)減少否?
mov a,2fh
cjne a,#00h,dz51
mov a,2eh
cjne a,#00h,dz50
mov 2fh,#02h ;判別小時(shí)2位均為0則強(qiáng)制2fh=#02h,2eh=#03h
mov 2eh,#03h
sjmp d00
dz50:dec 2eh
sjmp d00
dz51:mov a,2fh
cjne a,#02h,dz52
dz52:mov a,2eh
cjne a,#00h,dz51
dec 2fh
mov 2eh,#09h
sjmp d00
dz6:mov a,21h ;刷新周數(shù)據(jù)
cjne a,#044h,dz7
inc 25h
mov a,25h
cjne a,#08h,dz777
mov 25h,#01h
sjmp dz777
dz7:mov a,21h ;刷新月數(shù)據(jù)
cjne a,#054h,dz8
inc 27h
mov b,27h
mov a,27h
anl a,#0fh
cjne a,#03,dz71
mov a,b
anl a,#0f0h
cjne a,#10h,dz777
mov 27h,#01h
sjmp dz777
dz71:mov a,b
anl a,#0fh
cjne a,#0ah,dz777
mov a,b
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
;CGRAM的首地址為40h。
;DDRAM的首地址為80h。
;E端子應(yīng)該是H為使能。
;BF為低電平表示忙就循環(huán)等待。
總之,這款紅外遙控液晶顯示智能數(shù)字鐘,用遙控調(diào)整時(shí)間,非常方便。
|
評(píng)分
-
查看全部評(píng)分
|