普通的家用时钟一般只能设置一个闹钟时间,但很多人均需为工作日、周末、早晨、午休等不同时段设置不同的闹钟时间。如果是使用普通的闹钟,只好每次休息前重新设置,很不方便,有时甚至会出现忘记更改闹钟设置而睡过头的情况。针对这种情况,本人利用89C51 单片机设计了一款有 8 种闹钟设置的时钟,通过一段时间的使用,情况良好。
该时钟以 24 小时制显示时间,并可显示 2000 年至 2049 年之间的任何日期及星期,日期与时间经按键可相互切换,可输入 8 个闹钟时间设置,每个闹钟设置包括响铃的时间(小时与分钟)、对工作日有效还是对周末有效的标志,以及本项设置是否启用的标志等三部分。这 8 个闹钟设置均保存在 EEPROM 中,即使掉电也不用重新输入。当然使用者可通过按钮对任何一个设置作修改。数码管可经按钮关闭显示,避免夜间刺眼、影响睡眠。调节 LM317输出电压,可改变数码管亮度,但电压不能低于后备电池的电压,否则后备电池供电。用四节 1.25V 电池串联作后备电源,保证市电停电时时钟继续走时。时钟的精度取决于晶振频率的精度。
本程序用C 语言编写,经 Keil C51 编译成二进制码后写入 89C51 内的 EPROM 内即可。
#include “atmel\at89x51.h”
#include “intrins.h”
unsigned char hour,min,sec,year,month,day,weekday; //当前时间、日期、星期
unsigned int count_down; //1 秒钟计时用
bit led_on; //数码管是否点亮的标志
unsigned char display[8]; //8 位数码管要显示的数据
unsigned char attr; //八个数码管的闪烁控制字节,当为 0 时,对应数码管闪
bit flash; //LED 闪烁开关,与 attr 共同决定数码管是否闪烁
unsigned char show_status; //LED 显示状态标志
// 0:设置闹钟数据
// 1:显示当前日期及星期
// 2:显示当前时间
// 3:设置当前日期
// 4:设置当前时间
bit km; //按键已去抖动标志
bit kp; //按键已处理标志
bit sound; //蜂鸣器响标志
bit alarm_stop; //蜂鸣器响后用户手工按停标志
struct { unsigned char h; //小时
unsigned char m; //分钟
} alarm[8]; //8 个闹钟项
unsigned char alarm_en; //闹钟项启用标志
unsigned char alarm_wk; //闹钟项周末启用标志
unsigned char cur_alarm_set; //当前设置的闹钟项
unsigned char cur_alarm_active; //当前到点的闹钟项
bit new_alarm_info; //闹钟项内容已修改标志
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !