AT89C52单片机实现日历时钟芯片DS12C887显示的设计

在银行或者其他的公共场合中,经常会看到显示实时信息的显示屏,其中包括年、月、日、星期、时间等,本例子的功能是在51单片机系统中设置、获取、记录实时的日历时钟信息并通过数码管显示,选用日历时钟芯片ds12c887作为实时时钟芯片,为系统提供详细的时间信息,次款芯片内部有锂电池,可以带掉电的情况下保存10年以上。
主要器件:
1、 at89c52单片机芯片,用于对时钟芯片的控制和初始化,并控制数码管显示。
2、 日历时钟芯片ds12c887。
试验流程图;
试验电路图:
试验程序代码:
//calendarclk.h程序
#ifndef _calendarclk_h // 防止calendarclk.h被重复引用
#define _calendarclk_h
#include
#include
#define uchar unsigned char
#define uint unsigned int
/* ds12c887 内部专用寄存器宏定义 */
#define min xbyte[0x0102]
#define hour xbyte[0x0104]
#define dayofweek xbyte[0x0106]
#define dayofmonth xbyte[0x0107]
#define month xbyte[0x0108]
#define year xbyte[0x0109]
#define reg_a xbyte[0x010a]
#define reg_b xbyte[0x010b]
/* 由串口获得的日历时钟信息变量,用于对芯片时间的设置 */
uchar year1,month1,dayofweek1,dayofmonth1,hour1,min1;
/* 芯片ds12c887提供的日历时钟信息变量 */
uchar year2,month2,dayofweek2,dayofmonth2,hour2,min2;
#endif
//calendarclk.c程序
#include “calendarclk.h”
/* 从串行口获取数据函数,数据包括:year1,month1,dayofweek1,
dayofmonth1,hour1,min1。如果获取到正确数据则返回1,否则返回0 */
uchar getdata()
{
// 略去
}
/* 设置日历和时钟函数 */
void settime()
{
reg_b = reg_b|0x80; // set=1,芯片ds12c887处于设置状态
min = min1;
hour = hour1;
dayofweek = dayofweek1;
dayofmonth = dayofmonth1;
month = month1;
year = year1;
reg_b = reg_b&0x7f; // set=0,芯片ds12c887恢复正常数据更新状态
}
/* 获取日历时钟函数 */
void gettime()
{
while (reg_a&0x80==0x00) // 直到uip=0时,才能读取日历时钟信息 {
{
min2 = min ;
hour2 = hour;
dayofweek2 = dayofweek;
dayofmonth2 = dayofmonth;
month2 = month;
year2 = year;
}
}
/* 13位数码管显示年、月、日、星期、时、分 */
void display()
{
// 略去
}
/* 串口初始化函数 */
void init_serial()
{
tmod = 0x20; // 定时器t1使用工作方式2
th1 = 250;
tl1 = 250;
tr1 = 1; // 开始计时
pcon = 0x80; // smod = 1
scon = 0x50; // 工作方式1,波特率9600kbit/s,允许接收
}
void main(void)
{
uchar setflag;
init_serial();
/* 设置dv2、dv1、dv0为010,打开芯片ds12c877内部晶振 */
reg_a = reg_a&0xaf; // dv2=dv0=0
reg_a = reg_a|0x20; // dv1=0
reg_b = reg_b&0x7b; // set=0,时间数据正常更新;dm=0,二进制数据模式
reg_b = reg_b|0x02; // 寄存器b的24/12位置1,24小时时间模式
while (1)
{
setflag = getdata(); // 通过查询方式获取串口数据
/* 如果获取到正确数据,则设置时间 */
if (setflag==0x01)
settime();
/* 调用获取日历时钟函数 */
gettime();
/* 13位数码管显示日历、星期和时间信息 */
display();
}
}

第三届全国医药商业流通发展高峰论坛在无锡盛大举行
EVE Online中的游戏经济为什么对区块链游戏很重要
过年送父母手机 魅蓝Note5长续航必不可少
热电偶的基础知识
“无人酒店”盛大亮相2018上海国际智慧酒店展
AT89C52单片机实现日历时钟芯片DS12C887显示的设计
Sweetviz让你三行代码实现探索性数据分析
电流互感器异常的现象_电流互感器异常的故障处理
视频格式转换神器,万兴优转:支持超过1000种格式转换
关于Q1动力电池装机电量的解析
MobaXterm链接linux虚拟机报错Network error: Connection refused
瞬态抑制二极管(TVS)的选型步骤?
优恩|限压型器件瞬态抑制二极管,ESD静电二极管,压敏电阻有啥区别?
补偿电容间距及容值介绍
QPA2962 2-20GHz 10瓦GaN放大器QORVO
中星微电子张亦农教授获得北京市科技进步一等奖
贸泽电子持续优化仓储自动化系统,为分销不断蓄能
自动驾驶技术的发展,为汽车产业带来了新的变革动力
WiFi服务免费将终止?要让用户掏腰包并非易事
为什么电压表可以直接连在电源两端