目 录
第 1 节 引 言………………………………………………………………… 1
第 2 节 电子钟硬件设计………………………………………………………2
2.1 电子钟的工作原理……………………………………………………2
2.2 电子钟的硬件电路……………………………………………………3
第 3 节 系统软件设计…………………………………………………………5
一.引言
自制 LED 电子钟在很多电子报刊杂志上都可以见到,但大多数在断电后都
要重新设置时间等参数,给使用带来很多不便。也有用后备电池作为备用电源的,
但往往体积较大。本文介绍的 LED 电子钟克服了以往的弊端,而且采用了家电
通用的红外遥控器进行控制,方便使用。有一路闹铃输出,可以通过遥控器设置
闹铃时间及允许与否。
二.电子钟硬件设计
电子钟的正面
电子钟的背面
一. 工作原理
DS1302 为达拉斯公司的一种实时时钟芯片,主要特点是采用串行数据传输,可
为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通
32768Hz 晶振。AT89C2051 作为主控芯片,一是对接收到的红外遥控编码进行
判断识别,并执行相应的处理;第二就是定期的读取时钟芯片 DS1302 中的时间
并把小时和肥以示在 4 位 LED 中;第三就是对设置的闹铃时间与实时时间进行
比较,如果时间相同且闹铃允许,那么蜂鸣器就会以 1 秒的周期鸣响一分钟,提
醒使用者。如果要停止鸣闹,只要按遥控器相应键就可以关闭闹铃。闹铃时间保
存在 DS1302 自带的 RAM 中,不需要单独的 EEPROM。
二. 硬件电路
图一为电子钟的原理图,IC2 为 DS1302,电子爱好者可以向 MAXIM 公司索取
免费样品。Y2 为 32768 Hz 石英晶振,可以用普通电子表里的。IC3 为三脚的塑
封一体化红外接收头。LED1-4 为高亮度共阳数码管。89C2051 所用的晶振 Y1
如果没有 10MHz 也可以用其他 12M 以内的代替,只要修改程序中 YS1 和 YS2
的延时参数,让其保持延时长度不变就行。调整 R2 可以改变数码管亮度。P1 口
接数码管的八字段。数码管左两位显示小时,右两位显示分,当显示的是闹铃时
间时闪动。第二位和第三位的小数点作为秒闪动,注意第三位数码管按图一布好
印制版后安装时要旋转 180°,以便让时和分之间出现“:”,最后一位小数点作为
闹铃开关标志,亮表示闹铃开启。蜂鸣器 B2 采用小型自带音源的。要特别说明
的是备用电源 B1,可以用电池或者超级电容(10 万 uF 以上)。虽然 DS1302 在
主电源掉电后,耗电很小,但如果要长时间保证时钟正常,最好选用小型充电电
池。可以用老式电脑主板上的那种 3.6V 充电电池。如果断电时间较短(几小时
或几天)时,就可以用漏电较小的普通电解电容代替。100uF 就可以保证 1 小时
的正常走时。DS1302 在第一次加电后,须进行初始化操作。初始化后就可以按
正常方法调整时间及闹铃。
三.软件
软件部分的重点是对 DS1302 的操作以及红外遥控的解码。单片机解码可参看其
他文章,这里主要对设置部分作一些说明:
遥控器采用长虹彩电 K11F 型遥控器,遥控器按照 16 位地址码,8 位数据码以及
8 位数据码的反码发送。表一列出了各按键的编码及本电子钟对应的动作。如果
采用其他遥控器,需对程序相应部分的编码作修改。操作方法中,任意是指该键
第一次按后,进入该状态,再次按后退出该状态。时间设置:按“菜单”键进入设
置状态,LED 只显示正常时间的小时,按“↑↓”键调整数值,按“←“、”→”键可在
闹铃与正常时间之间移动。任意时刻再次按“菜单”键就退出设置。闹铃设置:闹
铃时间在时间设置中进行。闹铃允许和取消可在任意时刻按“静音”键。显示开关:
可在任意时刻按“显示”键开启和关闭显示器。
初始化:在按“菜单”键进入设置状态后任意时刻按“日历”键,初始化后的时间为
2002/12/1/12:00:00
;DS1302+AT89C2051 的 LED 钟
;遥控器各按键数据码,可根据不同的遥控器修改对应的键码
muteM EQU 10h ;静音键 闹铃开/关
timerT EQU 0Ch ;菜单键 进入/退出设置状态
leftL EQU 46h ;左移键
rightR EQU 47h ;右移键
upU EQU 19h ;增加键
downD EQU 1dh ;减少键
d_off EQU 16H ;显示键 LED 数码管显示/关闭
recall EQU 44H ;日历键 DS1302 初始化操作
K_on BIT P3.0 ;闹铃输出
LED1 BIT P3.3
LED2 BIT P3.4
LED3CLK BIT P3.5 ;DS1302
LED4IO BIT P3.7
RST BIT P3.1
SECOND EQU 60H
;60H 秒
;61h 分
;62h 时
;63h 日
;64h 月
;65h DAY
;66h 年
;6Ah 闹分 from 00(1302)
;6BH 闹时 from 01(1302)
ORG 0000H
AJMP START
ORG 0003H
LJMP S_INT ;IRF
ORG 000BH ;200Us
LJMP P_INT ;
ORG 001BH ;display LED
LJMP DISPLAY
;main program
ORG 0030H
START: CLR RST
MOV SP,#2AH
SETB 05H
CLR 06H
SETB 07H;CLR 07H
CLR 08H
CLR 09H
CLR 0AH
CLR 0BH
CLR 0CH
SETB 0DH
CLR 0EH
CLR 0FH
CLR 10H
CLR 11H
MOV R2,#00H ;
MOV R3,#00H ;
MOV TMOD,#12H
MOV TL1,#0e5H ;wait
MOV TH1,#0BeH
MOV TH0,#3FH ;200uS 3f
MOV TL0,#3FH
SETB ET0
SETB ET1
setb pt0
SETB TR0
SETB TR1
SETB IT0 ;
SETB EX0 ;
CLR PX0
;LCALL SET1302 ;初始化
MOV R1,#0C1H ;取定时参数从 1302 中
acall T_6061
MOV 6AH,A ;M
MOV R1,#0C3H
ACALL T_6061
MOV 6BH,A ;H
MOV 61H,#0
MOV 62H,#0
SETB EA
sjmp $
DISPLAY: PUSH ACC
PUSH PSW
MOV TL1,#0e0H ;wait how long to display (20ms)
MOV TH1,#0b0H
mov dptr,#tab1
JB 0EH,DIS2
JB 0FH,DIS3
JB 10H,DIS4
JB 11H,DIS5