一.前言
本设计介绍了一款创新的LED电子钟,它不仅克服了传统电子钟在断电后需要重新设置时间等参数的弊端,而且还采用了家电通用的红外遥控器进行控制,极大地方便了用户的使用。该电子钟具备一路闹铃输出功能,用户可以通过遥控器轻松设置闹铃时间以及闹铃的开关状态。
首先,这款LED电子钟采用了先进的存储技术,能够在断电后自动保存当前的时间和日期,无需用户重新设置。这意味着即使在没有电源的情况下,电子钟也能够保持准确的时间,一旦电源恢复,它会立即恢复正常运行,无需任何手动操作。
其次,这款电子钟配备了家电通用的红外遥控器,用户可以通过遥控器轻松控制电子钟的各种功能。无论是调整时间、设置闹钟还是切换显示模式,用户只需简单地使用遥控器上的按钮即可完成操作,无需靠近电子钟进行操作,更加方便快捷。
此外,这款LED电子钟还具备一路闹铃输出功能,用户可以通过遥控器轻松设置闹铃时间以及闹铃的开关状态。无论是设置早晨的闹钟还是午休的提醒,用户只需使用遥控器上的按钮进行操作,无需繁琐的设置过程。这样可以确保用户在需要的时候能够准时收到闹铃提醒,提高生活的便利性。
这款创新的LED电子钟不仅克服了传统电子钟的弊端,而且通过采用红外遥控器进行控制,大大提升了用户的使用体验。它不仅能够自动保存时间和日期,还能够通过遥控器轻松设置闹钟等功能。无论是家庭还是办公室,这款LED电子钟都是一个实用且便捷的选择。
二.电子钟硬件设计
电子钟的正面
电子钟的背面
三、工作原理
DS1302,作为达拉斯公司生产的实时时钟芯片,以其串行数据传输特性而著称,它能够为备用电源提供可编程的充电功能,并允许用户关闭此充电功能。该芯片采用标准的32768Hz晶振。在此设计中,AT89C2051担当主控芯片的角色,其职责包括:对接收到的红外遥控编码进行解析和识别,执行相应的操作;周期性地从DS1302中读取时间信息,并将小时和分钟显示在4位LED上;同时,该芯片还会将设定的闹铃时间与实时时间进行对比,若两者匹配且闹铃功能启用,则触发蜂鸣器以1秒间隔鸣响一分钟,以此提醒用户。用户可通过按下遥控器上的特定按键来停止闹铃。值得注意的是,闹铃时间被存储在DS1302内置的RAM中,无需额外使用EEPROM进行存储。
四、硬件电路
图一揭示了这款电子钟的电路原理图,其中IC2为DS1302实时时钟芯片,电子爱好者可以向MAXIM公司申请免费样品。Y2指的是32768 Hz石英晶振,这种晶振通常在普通电子表中使用。IC3则是一个三脚的塑封一体化红外接收头。LED1-4是高亮度共阳极数码管。对于89C2051主控芯片而言,如果10MHz的晶振不可用,可以选择12MHz以下的晶振替代,此时需要调整程序中的YS1和YS2延时参数以保持延时长度不变。
通过调节R2的阻值,可以调整数码管的亮度。P1口与数码管的八字段相连,其中数码管的左两位显示小时数,右两位显示分钟数,当显示闹铃时间时,这些数字会进行闪烁。第二位和第三位的小数点闪烁表示秒数,安装第三位数码管时需旋转180°,以便在小时与分钟之间形成“:”的显示。最后一位小数点作为闹铃开关的指示灯,亮起时意味着闹铃功能处于开启状态。
蜂鸣器B2采用的是小型自带音源的设备。备用电源B1可以使用电池或容量在10万uF以上的超级电容。尽管DS1302在主电源断电后耗电量很小,为确保时钟长时间运行,建议使用小型充电电池,如老式电脑主板上的3.6V充电电池。如果断电时间较短(几小时或几天),使用漏电较小的普通电解电容(100uF)也能保证一小时的正常走时。DS1302首次加电后,必须进行初始化操作,之后即可按照标准流程调整时间和设置闹铃。
五、软件
软件设计的核心在于对DS1302的控制和红外遥控信号的解码。关于单片机的解码过程,可以参考其他相关文献,本部分将重点介绍设置功能的实现细节:
本电子钟使用的是长虹彩电K11F型遥控器,遥控器通过发送16位地址码、8位数据码及其反码进行通信。表一详细列出了各按键的编码以及对应的电子钟操作。若使用其他类型的遥控器,则需要针对程序中的相应编码进行修改。操作方式为:按下任意键后进入相应状态,再次按下相同的键则退出状态。
时间设置流程为:按下“菜单”键进入设置模式,此时LED仅显示当前时间的小时数。通过按下“↑↓”键来调整数值,使用“←”和“→”键在闹铃时间和正常时间之间切换。在任何时候按下“菜单”键即可退出设置。
闹铃设置在时间设置模式下进行。启用和禁用闹钟功能可以在任意时刻通过按下“静音”键实现。
显示开关功能允许用户在任意时刻通过按下“显示”键来开启或关闭显示器。
初始化操作是在进入设置状态后,在任何时刻按下“日历”键,此时电子钟将被初始化为2002/12/1/12:00:00。
以下是DS1302与AT89C2051构成的LED钟的遥控器按键编码,可根据不同遥控器调整键码:
; DS1302+AT89C2051的LED钟
; 遥控器各按键数据码,可根据不同的遥控器修改对应的键码
单片机程序的一部分,用于控制一个电子钟,其中包含了DS1302实时时钟芯片和红外遥控解码的功能。
muteM EQU 10h ; 静音键,用于开启/关闭闹铃
timerT EQU 0Ch ; 菜单键,用于进入/退出设置状态
leftL EQU 46h ; 左移键,用于设置操作
rightR EQU 47h ; 右移键,用于设置操作
upU EQU 19h ; 增加键,用于调整设置值
downD EQU 1dh ; 减少键,用于调整设置值
d_off EQU 16H ; 显示键,用于开启/关闭显示器
recall EQU 44H ; 日历键,用于初始化DS1302
K_on BIT P3.0 ; 闹铃输出控制位
LED1 BIT P3.3 ; LED1控制位
LED2 BIT P3.4 ; LED2控制位
LED3CLK BIT P3.5 ; DS1302时钟控制位
LED4IO BIT P3.7 ; DS1302数据输入/输出控制位
RST BIT P3.1 ; DS1302复位控制位
SECOND EQU 60H ; 60H 存储秒
; 61h 存储分
; 62h 存储时
; 63h 存储日
; 64h 存储月
; 65h 存储星期
; 66h 存储年
; 6Ah 存储闹钟分(从DS1302地址00获取)
; 6BH 存储闹钟时(从DS1302地址01获取)
ORG 0000H
AJMP START ; 跳转到主程序开始
ORG 0003H
LJMP S_INT ; 跳转到红外遥控中断服务程序
ORG 000BH
LJMP P_INT ; 跳转到定时器中断服务程序
ORG 001BH
LJMP DISPLAY ; 跳转到LED显示程序
; 主程序开始
START: CLR RST
MOV SP,#2AH
; ...(省略初始化代码)
SETB EA ; 开启全局中断
sjmp $
DISPLAY: PUSH ACC
PUSH PSW
; ...(省略显示程序代码)
POP PSW
POP ACC
RETI
DIS2: AJMP DIS_2
DIS3: AJMP DIS_3
DIS4: AJMP DIS_4
DIS5: AJMP DIS_5
DIS_2: ; ...(省略显示小时设置代码)
RETI
DIS_3: ; ...(省略显示分钟设置代码)
RETI
DIS_4: ; ...(省略显示闹钟小时设置代码)
RETI
DIS_5: ; ...(省略显示闹钟分钟设置代码)
RETI
DL2M: ; ...(省略延时程序代码)
RET
; 定时器中断服务程序
P_INT: ; ...(省略定时器中断服务程序代码)
RETI
S_INT: ; ...(省略红外遥控中断服务程序代码)
RETI
YS1: ; ...(省略延时程序代码)
RET
YS2: ; ...(省略延时程序代码)
RET
TAB: DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H ; TAB1 LED数字编码表
这段代码展示了单片机如何通过红外遥控器来控制电子钟的功能,包括设置时间、闹钟、显示开关等。代码中使用了汇编语言编写,使用了单片机的中断系统来处理定时器和红外遥控信号。在实际使用中,需要根据具体的硬件连接和遥控器编码来调整代码中的相关部分。
以下是单片机程序的一部分,用于控制一个电子钟,其中包含了DS1302实时时钟芯片和红外遥控解码的功能。
; 定义遥控器按键对应的动作
muteM EQU 10h ; 静音键,用于开启/关闭闹铃
timerT EQU 0Ch ; 菜单键,用于进入/退出设置状态
leftL EQU 46h ; 左移键,用于设置操作
rightR EQU 47h ; 右移键,用于设置操作
upU EQU 19h ; 增加键,用于调整设置值
downD EQU 1dh ; 减少键,用于调整设置值
d_off EQU 16H ; 显示键,用于开启/关闭显示器
recall EQU 44H ; 日历键,用于初始化DS1302
; 定义控制位
K_on BIT P3.0 ; 闹铃输出控制位
LED1 BIT P3.3 ; LED1控制位
LED2 BIT P3.4 ; LED2控制位
LED3CLK BIT P3.5 ; DS1302时钟控制位
LED4IO BIT P3.7 ; DS1302数据输入/输出控制位
RST BIT P3.1 ; DS1302复位控制位
; 定义时间数据存储地址
SECOND EQU 60H ; 60H 存储秒
; 61h 存储分
; 62h 存储时
; 63h 存储日
; 64h 存储月
; 65h 存储星期
; 66h 存储年
; 6Ah 存储闹钟分(从DS1302地址00获取)
; 6BH 存储闹钟时(从DS1302地址01获取)
; 主程序入口
START: CLR RST
MOV SP,#2AH
; ...(省略初始化代码)
SETB EA ; 开启全局中断
sjmp $
; LED显示程序
DISPLAY: PUSH ACC
PUSH PSW
; ...(省略显示程序代码)
POP PSW
POP ACC
RETI
; 各个按键处理程序
DO: ; ...(省略按键处理代码)
RET
; 时间增加和减少处理程序
INC1: ; ...(省略时间增加代码)
RET
DEC2: ; ...(省略时间减少代码)
RET
; 右移和左移处理程序
RIGHT: ; ...(省略右移代码)
RET
LEFT: ; ...(省略左移代码)
RET
; 静音功能处理程序
MUTE: ; ...(省略静音代码)
RET
; 显示关闭处理程序
DIS_OFF:; ...(省略显示关闭代码)
RET
; DS1302初始化程序
SET1302: ; ...(省略DS1302初始化代码)
RET
; 读取DS1302时间程序
R_1302: ; ...(省略读取DS1302时间代码)
RET
; 读写位操作程序
R_BIT: ; ...(省略读写位操作代码)
RET
W_BIT: ; ...(省略写位操作代码)
RET
; 十进制到十六进制转换程序
BCD_HEX:
; ...(省略十进制到十六进制转换代码)
RET
HEX_BCD:
; ...(省略十六进制到十进制转换代码)
RET
; 写入单个数据到DS1302程序
SETONE: ; ...(省略写入数据到DS1302代码)
RET
展示了单片机如何通过红外遥控器来控制电子钟的功能,包括设置时间、闹钟、显示开关等。代码中使用了汇编语言编写,使用了单片机的中断系统来处理定时器和红外遥控信号。在实际使用中,需要根据具体的硬件连接和遥控器编码来调整代码中的相关部分。
标签:...,省略,闹铃,DS1302,电子钟,源码,LED,遥控器 From: https://blog.csdn.net/qq_62634009/article/details/145074577