51单片机DS1302时钟
DS1302
时钟操作可通过 AM/PM 指示决定采用 24 或 12 小时格式。 DS1302 与单片机之间能简单地
采用同步串行方式进行通信,仅用到三个口线: RES 复位、 I/O 数据和 SCLK 串行时钟。时钟/RAM 的读/写数据以一个字节或多达 31 个字节的字符组方式通信。
DS1302 有 12 个寄存器,其中有 7 个寄存器与日历、时钟相关,存放的数据位为 BCD 码形式,
即日历、时间寄存器。此外, DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器
及与 RAM 相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。
DS1302 与 RAM 相关的寄存器分为两类:一类是单个 RAM 单元,共 31 个,每个单元组态为
一个 8 位的字节,其命令控制字为 C0H-FDH,其中奇数为读操作,偶数为写操作;另一类为突发
方式下的 RAM 寄存器,此方式下可一次性读写所有的 RAM 的 31 个字节,命令控制字为 FEH(写)、
FFH(读)。
操作 DS1302 的大致过程,就是将各种数据写入 DS1302 的寄存器,以设置它当前的时间格式。
然后使 DS1302 开始运作, DS1302 时钟会按照设置情况运转, 再用单片机将其寄存器内的数据读出。
代码
#include "ds1302.h"void Write_Ds1302(unsigned char temp) //单字节写入数据
{unsigned char i;for (i=0;i<8;i++) { SCK=0;SDA=temp&0x01;temp>>=1; SCK=1;}
} void Write_Ds1302_Byte( unsigned char address,unsigned char dat ) //按地址写入数据
{RST=0; _nop_();SCK=0; _nop_();RST=1; _nop_(); Write_Ds1302(address); Write_Ds1302(dat); RST=0;
}unsigned char Read_Ds1302_Byte ( unsigned char address )//读数据
{unsigned char i,temp=0x00;RST=0; _nop_();SCK=0; _nop_();RST=1; _nop_();Write_Ds1302(address);for (i=0;i<8;i++) { SCK=0;temp>>=1; if(SDA)temp|=0x80; SCK=1;} RST=0; _nop_();SCK=0; _nop_();SCK=1; _nop_();SDA=0; _nop_();SDA=1; _nop_();return (temp);
}
我们需要再添加一段代码来定义1302内部的初始值
/*****************************
定义ds1302初始值
******************************/
void Ds1302_Init(unsigned char shi,unsigned char fen, unsigned char mia)
{Write_Ds1302_Byte(0x8e,0);Write_Ds1302_Byte(0x80,(mia/10)*16+mia%10);Write_Ds1302_Byte(0x82,(fen/10)*16+fen%10);Write_Ds1302_Byte(0x84,(shi/10)*16+shi%10);Write_Ds1302_Byte(0x8e,0x80);
}
同时我们在读取1302内部的数据是需要对数据进行进制处理,将读到的16进制数改为10进制数。
//读取时分秒shi = Read_Ds1302_Byte(0x85);fen = Read_Ds1302_Byte(0x83);mia = Read_Ds1302_Byte(0x81);
//处理时分秒shi = shi/16*10+shi%16;fen = fen/16*10+shi%16;mia = mia/16*10+shi%16;
51单片机DS1302时钟相关推荐
- 基于51单片机ds1302时钟、ds18b20、lcd12864的恒温器
目录 项目:基于51单片机ds1302时钟.ds18b20的恒温器 功能说明: 运行流程: 效果展示: 供电方式: 用途: 提高: 附: ...
- 51单片机DS1302时钟LCD1602显示(可以按键设置时钟)
DS1302实时时钟具有能计算2100年之前的秒.分.时.日.日期.星期.月.年的能力,还有闰年调整的能力. 图1:DS1302引脚示意图 其中: X1.X2:32.768KHz晶振接入引脚. GND ...
- (九)51单片机——DS1302时钟
目录 DS1302介绍 引脚定义和应用电路 寄存器定义 命令字 时序定义 代码编写 今天,我们的任务是要编写一个用51开发板编写的可调小时钟,接下来就让我们一步一步来实现它吧! DS1302介绍 DS ...
- 51单片机DS1302时钟芯片应用Proteus仿真
系列文章目录 第一章 51单片机Proteus仿真(一) DS1302使用 文章目录 系列文章目录 前言 一.DS1302时序解读 二.BCD码转十进制解读 三.Proteus仿真 四.详细代码 前言 ...
- 51单片机——DS1302时钟
目录 1.前言 1.1 实验现象 2. DS1302的介绍 2.1 DS1302的引脚定义以及应用电路 2.2 DS1302内部结构 2.21 DS1302内部特殊寄存器 2.22 时序 2.3 B ...
- (给自己看)51单片机DS1302时钟芯片
老规矩先上DS1302.c的代码 #include <regx52.h>//首先 DS1302_Init(); // DS1302_SetTime();//再在while中DS1302_R ...
- 51单片机DS1302数字时钟
51单片机DS1302数字时钟 #include <reg52.h> #define uchar unsigned char #define uint unsigned intsbit R ...
- 51单片机+ds1302+lcd1602简易电子时钟(带闹钟功能)
51单片机+ds1302+lcd1602简易电子时钟(带闹钟功能) AT89C52.LCD1602.DS1302.speaker. Proteus仿真 实例代码 #include<reg52.H ...
- 51单片机实时时钟显示
51单片机+DS1302+DS18B20+LCD12864 用的IIC通信,写的一个ds3231时钟模块的程序,可更改时间,下面是.h文件里面的部分代码 #ifndef __ds3231_h #def ...
- 蓝桥杯单片机DS1302时钟芯片驱动代码注释
蓝桥杯单片机DS1302时钟芯片驱动代码之前的疑惑注释了下 /* DS1302 芯片包含一个 实时时钟/日历和 31 字节的静态 RAM. 与时钟/RAM 通讯只需要三根线: CE,I/O (数据线) ...
最新文章
- AI十级「找茬」选手,非这个书生莫属,节后开源!
- TCP keepAlive详解(TCP心跳包)
- what to look if you want to debug your docsify based website
- 使用gevent启动bottle web框架
- golang func 入参为func_Golang函数常见用法
- html 禁用自动跳转,javascript 实现页面跳转,禁止返回上一页【转】
- php列表代码怎么做的,php项目实战:代码讲解之订单列表问题
- GCC编译器简明教程(Linux下C语言开发环境的搭建)
- 学习Java 第 4天 流程控制语句 one大白(●—●)
- 剑指offer——python【第16题】合并两个有序链表
- Java springcloud B2B2C o2o多用户商城 springcloud架构- ribbon
- Python初级双层for循环嵌套求素数合数和循环打印**
- EXTRACT() 提取函数
- Cadence OrCAD Capture 原理图设计过程产生的文件总结与说明
- qt有关tcpserver中读取数据时是否使用flush时的研究
- 百度Site查询接口
- 教你批量分析顺丰快递物流,并验证信息是否正确
- PageHelper 自定义总数查询方案
- 如何利用 Python + Selenium 自动化快速截图
- 【githubshare】一款开源的网站监控工具,监控当前网站的运行状态