该系统是以52单片机为基础,以时钟日历芯片DSl2887为核心构建的时钟系统。完成的功能如下:显示年、月、日、星期、小时、分钟、秒钟,具有1OO年的日历,具有掉电不丢失性,能够通过按键调整时间。DS12887内置锂电池,可以在掉电情况下工作10年。

一、芯片简介

在C语言程序中要读取或写入数据非常简单,只需要一条语句即可实现。在汇编语言中就是对MOVX语句的时序分析。DS12887的英特尔读周期时序如上图,写周期时序如下图所示:

最后简单介绍一下DS12887的控制字定义:

上面已经提到DSl2887内部有128字节的存储空间。其中前14字节为特别定义区(具体定义见PDF),后114字节为随机存储区。

14字节特别定义区的具体定义如上表所示。其中0x7f00~0x7f0D是由于在本系统中选用单片机P2.7引脚接CS端所决定的。这些地址的最高位都为0,对应P2.7引脚,会使得在写入或读取的过程中在P2.7引脚上恰好产生低电平,选中芯片,完成英特尔总线时序。如果我们将单片机P2.6引脚接CS端,地址范围应为:0xbf00~0xbf0D,其中b的二进制为1011,对应会使得P2.6引脚产生低电平的片选脉冲。从0~9号地址为年月等的寄存器,用户可以读取和写入。10~13号地址为控制寄存器,寄存器D为只读,寄存器A~C的各位具体定义介绍如下(如下表)

●UlP:只读状态标志;

●DV0~2:控制芯片内部晶振位,010组合打开晶振正常工作;

●RS0~3:设定中断速率和SQW方波输出;

●SET:读写控制位,1时可以初始时钟日历字节;

●PIE、AIE、UIE:分别为周期、闹钟、更新结束中断允许位;

●PF、AF、MF:分别为周期、闹钟、更新结束中断标志位

●IRQF:中断请求标志位,IRQF=PF·PlE+AF·AlE+MF·UIE;

●SQWE:方波输出允许位;

●DM:选择数据为二进制(1)或BCD(0)码格式;

●24/12:选择时钟为24,小时格式门2小时格式;DSE:白天节时,置0就行。

地址

内容

说明

00x7f00

Seconds

0-59秒寄存器

10x7f01

SecondsAlarm

O-59秒闹钟

20x7f02

MinUteS

0-59分寄存器

3Ox7f03

MinutesAlarm

O-59分闹钟

4Ox7f04

Hours

0-23时寄存器

50x7f05

HoursAlam

O-23时闹钟

60x7f06

DayOftheWeek

1-7星期几

70x7f07

DateOftheMonth

1-31几号

80x7f08

Month

1-12月份

90x7f09

Year

0-99年数

100x7f0A

REGISTERA

控制寄存器A

110x7f0B

REGISTERB

控制寄存器B

120x7f0C

REGISTERC

控制寄存器C

130x7f0D

REGISTERD

控制寄存器D

控制寄存器

BIT7

BIT6

BIT5

BlT4

BIT3

BIT2

BIT1

BIT0

REGISTERA

UIP

DV2

DV1

DV0

RS3

RS2

RS1

RS0

REGISTERB

SET

PIE

AIE

UIE

SQWE

DM

24/12

DSE

REGISTERC

IRQF

PF

AF

MF

0

0

O

O

二、实物制作

原理图如上图所示。实际制作的电子日历系统的PCB版图如下图。在下图中WR、RD、INTO、GND和VCC标号处的焊盘是飞线用的,这里是单面板,工艺上只能达到15mil粗细程度,所以飞线之处较多。笔者认为ZLG7289在系统里边仅用来控制8个按键,有些浪费,读者可以直接挂在单片机I/O口上,不过不要忘了按键去抖,但是液晶的使用还是很有必要的,因为日历的信息比较多,如果只用8个数码管,不方便。图中考虑到在调试过程中的测试方便,将单片机的各端口都用排针引出来了。安装完成后,将程序写入,这种并口的芯片调试容易。

将图中的元器件参数列表如下:

AT89S52、DS12887、ZLG7289、LCDl602各一;C1、C2、C4、C5、C6:30pF瓷片电容;C3:1μF电解电容;C7:100μF电解电容;C8:1000μF电解电容;C9:10μF电解电容;R1、R4、R6:10kΩ欧姆电阻;R5、R7:1欧姆电阻;R2:2.2kΩ欧姆电阻;R3:1OO欧姆电阻;R11:100kΩ欧姆电阻;104、104J:100kΩ排阻;1602:16脚排针;P0,P1,P2,P3:8脚排针;SPI:6脚排针;D1:红色LED指示电源;LS1:蜂鸣器;Q1:PNP三极管9012;S1~S8:两脚封装的按键;Y1、Y2:12MHz晶振;

三、程序设计

下面是DS12887的驱动程序和调时程序。

我们开始要在主程序的开始设置一个初始化DS12887的函数,写入使晶振开启和设置初始时间的命令。在调试成功后,应该将这个初始化函数删掉,这样在单片机掉电又重新上电后就不用重新设置时间。

上面的程序就是删掉初始化函数后的样子。这样就完成了掉电后不会丢失时间的功能,这对于时钟日历来说,是一个非常实用的功能。

在主程序中,可以通过编程实现人机交互,完成调整DS12887内部时间的程序,还可以设定闹钟,完成报时功能。

举例如下:

开启和关闭晶振.

单片机c语言编程 时钟加日历转换,基于52单片机电子时钟日历系统的设计相关推荐

  1. 单片机c语言 〉〉,PìC单片机C语言编程入门(课件).doc

    PìC单片机C语言编程入门(课件) PICC入门笔记 PIC单片机C语言编程入门笔记 C语言基础复习--------没C语言基础看起来可能有点困难. C程序的语句 语句名称一般形式说明表达式语句表达式 ...

  2. 51单片机c语言工作手册,51单片机C语言编程手册

    51单片机C语言编程手册 1 第一章 介绍 这是一本关于Intel 80C51 以及广大的51 系列单片机的书这本书介绍给读者一些 新的技术使你的8051 工程和开发过程变得简单请注意这本书的目的可不 ...

  3. 51单片机c语言编程100,51单片机C语言编程100例.doc

    51单片机C语言编程100例.doc 目 录实例3用单片机控制第一个灯亮3实例4用单片机控制一个灯闪烁认识单片机的工作频率3实例5将 P1口状态分别送入P0.P2.P3口认识I/O口的引脚功能4实例6 ...

  4. c语言编程过程应注意什么意思,单片机C语言编程应注意的若干问题

    <单片机C语言编程应注意的若干问题>由会员分享,可在线阅读,更多相关<单片机C语言编程应注意的若干问题(4页珍藏版)>请在人人文库网上搜索. 1.单片机C语言编程应注意的若干问 ...

  5. c语言程序设计分段定时器,单片机C语言编程定时器的几种表达方式

    原标题:单片机C语言编程定时器的几种表达方式 吴鉴鹰单片机开发板地址 店铺:[吴鉴鹰的小铺] 地址:[https://item.taobao.com/item.htm?_u=ukgdp5a7629&a ...

  6. 请描述定时器初值的计算方式_单片机C语言编程中定时器初值计算的两种方法...

    单片机C语言编程中,定时器的初值对于初学者真的是比较不好计算,因此我总结了以下几种方法. 第1种方法: #define FOSC 11059200L //晶振的频率 #define TIMS (655 ...

  7. 单片机+c语言+运算符,单片机C语言编程常用的运算符介绍

    在单片机C语言编程中,通常用到30个运算符,如表1,其中算术运算符13个,关系运算符6个,逻辑运算符3个,位操作符7个,指针运算符1个. 在C语言中,运算符具有优先级和结合性. 算术运算符优先级规定为 ...

  8. 51单片机串行口程序c语言编程,单片机C语言编程串行口通讯.ppt

    单片机C语言编程串行口通讯 第7章 MCS-51单片机串行口 第7章 MCS-51单片机串行口 目 录 7.1 串行通信基本知识 7.2 串行口结构及控制 7.3 串行口工作方式 7.4 串行口应用举 ...

  9. 单片机c语言编程下载,单片机C语言编程.doc

    单片机C语言编程.doc 单片机C语言编程指令格式 功能简述 字节数 周期 一.数据传送类指令 MOV A, Rn 寄存器送累加器 1 1 MOV Rn,A 累加器送寄存器 1 1 MOV A ,Ri ...

最新文章

  1. 软件工程 项目管理的目标和细节
  2. 【图】2015年Google搜索引擎排名算法(完整版)
  3. clip\_gradient
  4. QUIC实战(一) 通过Quiche部署支持HTTP3 的NGINX
  5. MKNetWorkKit使用方法
  6. HandlerThread用法
  7. linux django 指定端口,linux部署django项目流程(全)
  8. 写出优质Java代码的4个技巧
  9. 微信小程序单指拖拽和双指缩放旋转
  10. C++ 获取URL图片、html文件,CInternetSession 【转】
  11. from collections import OrderedDict
  12. java毕业生设计web人力资源管理系统计算机源码+系统+mysql+调试部署+lw
  13. 面试官问“你还有什么需要了解的吗”——应该这样回答
  14. C语言求解一元二次方程
  15. 变限积分求导公式总结_变限积分求导公式是什么?
  16. Niushop 砸金蛋营销活动
  17. ReferenceError: self is not defined
  18. 单模光纤VS多模光纤
  19. 中国象棋AI在线弈游戏源码
  20. 数据湖和数据仓库的区别是什么?

热门文章

  1. RK3399平台开发系列讲解(USB设备驱动)5.37、Gadget Device驱动详解
  2. dnp3协议测试软件,DNP3.0规约分析仪
  3. 整理的关于面试的一些资料-20210601
  4. Android开发:快速集成mob到项目的步骤
  5. windows11安装VMware后再安装windows11
  6. 月旦评 之 DevOps招贤令2018
  7. 【转发】】重磅 | 腾讯副总裁曾宇:谈谈腾讯的技术价值观与技术人才修炼
  8. 城乡供水一体化平台-助力乡村振兴建设
  9. 我在2017年春节期间所读的书及总结的读书笔记
  10. 时间锁,手把手教你如何用Java设置随时间变化的动态密码