找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4913|回复: 3
打印 上一主题 下一主题
收起左侧

红外遥控lcd2402液晶显示智能数字钟

[复制链接]
跳转到指定楼层
楼主
ID:76556 发表于 2015-4-10 03:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      这是一款红外遥控液晶显示智能数字钟,用遥控调整时间,非常方便,遥控器用的是M50462AP发射芯片的遥控器。,程序来源于网络,在这里 我把它收集整理出来,给爱好电子小制作的爱好者作参考,智能数字钟制作,是很多电子小制作爱好者都制作过的电子小制作项目,成功制作这么一件电子小制作作品,可以增强学习电子技术的信心。下面是红外遥控液晶显示智能数字钟和原理示意图各源程序:



;红外遥控液晶屏智能数字钟汇编代码
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子程序<占用区0>********************************************
org 0020h
xsz:nop
push dph             ;保护现场
push dpl
push acc
push psw
mov com,#93h         ;设置秒个位地址
lcall wrcom
mov a,2ah            ;取秒个位数据
add a,#30h
mov dat,a            ;送出显示
lcall wrdat
mov com,#92h         ;设置秒十位地址
lcall wrcom
mov a,2bh            ;取秒十位数据
add a,#30h
mov dat,a            ;送出显示
lcall wrdat
mov com,#90h         ;设置分个位地址
lcall wrcom
mov a,2ch            ;取分个位数据
add a,#30h
mov dat,a            ;送出显示
lcall wrdat
mov com,#8fh         ;设置分十位地址
lcall wrcom
mov a,2dh            ;取分十位数据
add a,#30h
mov dat,a            ;送出显示
lcall wrdat
mov com,#8dh         ;设置时个位地址
lcall wrcom
mov a,2eh            ;取时个位数据
add a,#30h
mov dat,a            ;送出显示
lcall wrdat
mov com,#8ch         ;设置时十位地址
lcall wrcom
mov a,2fh            ;取时十位数据
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              ;恢复现场
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            ;设中断优先级别
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定时子程序<占区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                ;刷新周数据
cjne a,#08h,tt33
mov 25h,#01h
tt33:inc 26h             ;刷新日数据
mov a,26h
cjne a,#32,tt44
mov 26h,#01h
inc 27h                  ;刷新月数据         
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数据表*************************************************
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
;以下是字符数据表**************************************************
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            ;送显示数据
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               ;写数据子程序******************
push acc
setb rs
clr rw
clr e
lcall Dbf
mov p0,dat
setb e
clr e
pop acc
ret

;tt1 T1读红外代码子程序<占用区2 >*******************************
org 0400h
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,#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转换子程序<占用区1>*********************************************
org 0480h
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 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                 ;设置允许执行动作标志位
clr 01h                  ;清除允许转换标志位
sjmp h01
;dz动作子程序<不占区>**********************************************
org 0500h
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             ;清除已完成的动作代码
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            ;刷新周数据
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 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为低电平表示忙就循环等待。
      总之,这款红外遥控液晶显示智能数字钟,用遥控调整时间,非常方便。

评分

参与人数 1黑币 +5 收起 理由
ssfc + 5 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:76584 发表于 2015-4-10 14:24 | 只看该作者
为何不用C语言,,,,看的晕了。
回复

使用道具 举报

板凳
ID:74784 发表于 2016-12-19 16:20 | 只看该作者
楼主怎么个意思???
转发我的原创怎么不注明出处???
回复

使用道具 举报

地板
ID:74784 发表于 2016-12-19 16:23 | 只看该作者
这是出处:www点cdle点net/thread-46165-1-1.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表