找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 5444|回復: 3
收起左側

紅外遙控lcd2402液晶顯示智能數(shù)字鐘

[復制鏈接]
ID:76556 發(fā)表于 2015-4-10 03:53 | 顯示全部樓層 |閱讀模式
      這是一款紅外遙控液晶顯示智能數(shù)字鐘,用遙控調整時間,非常方便,遙控器用的是M50462AP發(fā)射芯片的遙控器。,程序來源于網(wǎng)絡,在這里 我把它收集整理出來,給愛好電子小制作的愛好者作參考,智能數(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             ;保護現(xiàn)場
push dpl
push acc
push psw
mov com,#93h         ;設置秒個位地址
lcall wrcom
mov a,2ah            ;取秒個位數(shù)據(jù)
add a,#30h
mov dat,a            ;送出顯示
lcall wrdat
mov com,#92h         ;設置秒十位地址
lcall wrcom
mov a,2bh            ;取秒十位數(shù)據(jù)
add a,#30h
mov dat,a            ;送出顯示
lcall wrdat
mov com,#90h         ;設置分個位地址
lcall wrcom
mov a,2ch            ;取分個位數(shù)據(jù)
add a,#30h
mov dat,a            ;送出顯示
lcall wrdat
mov com,#8fh         ;設置分十位地址
lcall wrcom
mov a,2dh            ;取分十位數(shù)據(jù)
add a,#30h
mov dat,a            ;送出顯示
lcall wrdat
mov com,#8dh         ;設置時個位地址
lcall wrcom
mov a,2eh            ;取時個位數(shù)據(jù)
add a,#30h
mov dat,a            ;送出顯示
lcall wrdat
mov com,#8ch         ;設置時十位地址
lcall wrcom
mov a,2fh            ;取時十位數(shù)據(jù)
add a,#30h
mov dat,a            ;送出顯示
lcall wrdat
mov com,#96h         ;設置周地址
lcall wrcom               
mov dat,25h          ;取星期字符代碼
lcall wrdat
mov com,#89h         ;設置日個位地址
lcall wrcom
mov a,26h            ;取日個位字符代碼
anl a,#0fh
add a,#30h
mov dat,a            ;送出顯示
lcall wrdat
mov com,#88h         ;設置日十位地址
lcall wrcom
mov a,26h            ;取日十位字符代碼
swap a
anl a,#0fh
add a,#30h
mov dat,a            ;送出顯示
lcall wrdat
mov com,#86h         ;設置月個位地址
lcall wrcom
mov a,27h            ;取月個位字符代碼
anl a,#0fh
add a,#30h
mov dat,a            ;送出顯示
lcall wrdat
mov com,#85h         ;設置月十位地址
lcall wrcom
mov a,27h            ;取月十位字符代碼
swap a
anl a,#0fh
add a,#30h
mov dat,a            ;送出顯示
lcall wrdat
pop psw              ;恢復現(xiàn)場
pop acc
pop dpl
pop dph
ret                  ;返回
;主程序*********************************************************
org 0100h
mm:nop
mov th0,#03ch          ;T0設初始值
mov tl0,#0b0h          ;TH0=3ch,TL0=b0h
mov tmod,#91h          ;T0設方式1
mov tcon,#14h          ;T0設控制方式
mov ie,#86h            ;設中斷允許
mov ip,#04h            ;設中斷優(yōu)先級別
mov sp,#7fh            ;設堆棧入口
mov r6,#00h            ;0.1秒延時用
mov r7,#00h            ;0.1秒延時用
mov 08h,#2fh           ;解碼轉換用
mov 09h,#07h           ;解碼轉換用
mov 10h,#30h           ;讀紅外波頭存放首址
mov 11h,#2fh           ;讀紅外波頭48個
mov 20h,#00h           ;動作標志位1
mov 21h,#00h           ;動作標志位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           ;秒個位
mov 2bh,#00h           ;秒十位
mov 2ch,#00h           ;分個位
mov 2dh,#00h           ;分十位
mov 2eh,#00h           ;時個位
mov 2fh,#00h           ;時十位
MOV p0,#01H            ;清屏
lCALL wcom
MOV p0,#38H            ;使用8Bits匯流排,顯示2行5*7字符
lCALL wcom
MOV p0,#0CH            ;顯示開,光標關
lCALL wcom
MOV p0,#06H            ;字符不動,光標自動右移一格
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字符庫
m0:nop
lcall xsz
lcall dbf
lcall zh
lcall dbf              
lcall dz
lcall dbf
sjmp m0
; T0定時子程序<占區(qū)0>************************************************
org 01a0h
ttxx:mov th0,#03ch       ;以下是T0刷新子程序
mov tl0,#0b0h     
push dph
push dpl
push acc
push psw
clr psw.3                ;進入第0組工作寄存器
clr psw.4
inc 28h
mov a,28h
cjne a,#0ah,tt22         ;刷新10次
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                ;刷新周數(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字符庫子程序*********************************
org 0280h
cgwr:nop
mov com,#40h           ;設置CGRAM首地址
lcall wrcom
mov r2,#64             ;設置周1~周日共8X8=64個代碼
mov r3,#00h
mov dptr,#cgtab1       ;設置字符代碼表首地址
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              ;延時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           ;保護現(xiàn)場
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          ;進入?yún)^(qū)2
clr psw.3
mov @r0,th1
mov th1,#00h           ;清T1,準備讀下一位
mov tl1,#00h
inc r0
djnz r1,t3             ;全部信號接收完閉否?
mov 10h,#30h
mov 11h,#2fh
setb 27h
setb 01h               ;設讀取完成與允許轉換標志位
clr ex1                ;關外部中斷1
clr tr1                ;關T1中斷
clr 00h                ;恢復接收標致位
t3:pop psw
pop acc
pop dpl
pop dph
reti
;zh轉換子程序<占用區(qū)1>*********************************************
org 0480h
zh: push dph               ;將識別后的遙控信號轉換成16位動作代碼
push dpl
push acc
push psw
setb psw.3                 ;進入?yún)^(qū)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 dpl
pop dph
ret
h0: inc r0                 ;取第一組第一位
cjne r0,#50h,h1            ;是否干擾?
sjmp h2                    ;是則返回
h1: jc h2
sjmp h00
h2:cjne @r0,#07h,h0        ;開始轉換第一組第一位
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                ;開始轉換指令碼
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位指令碼轉換完否?
setb 02h                 ;設置允許執(zhí)行動作標志位
clr 01h                  ;清除允許轉換標志位
sjmp h01
;dz動作子程序<不占區(qū)>**********************************************
org 0500h
dz: push dph             ;執(zhí)行相應的動作
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             ;清除已完成的動作代碼
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,2fh
cjne a,#00h,dz51
mov a,2eh
cjne a,#00h,dz50
mov 2fh,#02h             ;判別小時2位均為0則強制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端子應該是H為使能。
;BF為低電平表示忙就循環(huán)等待。
      總之,這款紅外遙控液晶顯示智能數(shù)字鐘,用遙控調整時間,非常方便。

評分

參與人數(shù) 1黑幣 +5 收起 理由
ssfc + 5 贊一個!

查看全部評分

回復

使用道具 舉報

ID:76584 發(fā)表于 2015-4-10 14:24 | 顯示全部樓層
為何不用C語言,,,,看的暈了。
回復

使用道具 舉報

ID:74784 發(fā)表于 2016-12-19 16:20 | 顯示全部樓層
樓主怎么個意思???
轉發(fā)我的原創(chuàng)怎么不注明出處???
回復

使用道具 舉報

ID:74784 發(fā)表于 2016-12-19 16:23 | 顯示全部樓層
這是出處:www點cdle點net/thread-46165-1-1.html
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表