×

基于89C51单片机8个闹钟时间的智能时钟的设计(附电路图和程序代码)

消耗积分:0 | 格式:rar | 大小:0.1 MB | 2017-11-28

分享资料个

  普通的家用时钟一般只能设置一个闹钟时间,但很多人均需为工作日、周末、早晨、午休等不同时段设置不同的闹钟时间。如果是使用普通的闹钟,只好每次休息前重新设置,很不方便,有时甚至会出现忘记更改闹钟设置而睡过头的情况。针对这种情况,本人利用89C51 单片机设计了一款有 8 种闹钟设置的时钟,通过一段时间的使用,情况良好。

  电路图

  基于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)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !