DS1302示例子程序
总结一下一些模块常用的子程序
DS1302读写时间数据
//DS1302写入地址命令,顺序为秒分时日月周年,最低位读写位,读取的地址在写入的基础上加1
uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
uchar year0=0x20;//年份头两位
//DS1302时钟初始化2020年8月4日星期二12点00分00秒。存储顺序是秒分时日月周年,存储格式是用BCD码//
uchar TIME[7] = {0, 0, 0x12, 0x04, 0x08, 0x02, 0x20};
/*******************************************************************
函数名称:Ds1302Write()
函数功能:向DS1302命令(地址+数据)。
输入参数:addr:写入数据的地址 dat:写入的数据
返回值: 无
*******************************************************************/
void Ds1302Write(uchar addr, uchar dat)
{uchar n;RST = 0;_nop_();SCLK = 0; //先将SCLK置低电平。_nop_();RST = 1; //然后将RST(CE)置高电平。_nop_();for (n=0; n<8; n++) //开始传送八位地址命令{DSIO = addr & 0x01; //数据从低位开始传送addr >>= 1;SCLK = 1; //数据在上升沿时,DS1302读取数据_nop_();SCLK = 0;_nop_();}for (n=0; n<8; n++) //写入8位数据{DSIO = dat & 0x01;dat >>= 1;SCLK = 1; //数据在上升沿时,DS1302读取数据_nop_();SCLK = 0;_nop_(); } RST = 0; //传送数据结束_nop_();
} /*******************************************************************
函数名称:Ds1302Read()
函数功能:读取一个地址的数据。
输入参数:addr:需要读取数据的地址
返回值: dat:读出的数据
*******************************************************************/
uchar Ds1302Read(uchar addr)
{uchar n,dat,dat1;RST = 0;_nop_();SCLK = 0; //先将SCLK置低电平。_nop_();RST = 1; //然后将RST(CE)置高电平。_nop_();for(n=0; n<8; n++) //开始传送八位地址命令{DSIO = addr & 0x01; //数据从低位开始传送addr >>= 1;SCLK = 1; //数据在上升沿时,DS1302读取数据_nop_();SCLK = 0; //DS1302下降沿时,放置数据_nop_();}_nop_();for(n=0; n<8; n++) //读取8位数据{dat1 = DSIO; //从最低位开始接收dat = (dat>>1) | (dat1<<7);SCLK = 1;_nop_();SCLK = 0; //DS1302下降沿时,放置数据_nop_();}RST = 0;_nop_(); //以下为DS1302复位的稳定时间,必须的。SCLK = 1;_nop_();DSIO = 0;_nop_();DSIO = 1;_nop_();return dat;
}/*******************************************************************
函数名称:Ds1302Init()
函数功能:初始化DS1302。
输入参数:无
返回值: 无
*******************************************************************/
void Ds1302Init()
{uchar n;Ds1302Write(0x8E,0X00); //关闭写保护功能for (n=0; n<7; n++) //写入7个字节的时钟信号:分秒时日月周年{Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]); } Ds1302Write(0x8E,0x80); //打开写保护功能
}/*******************************************************************
函数名称:Ds1302ReadTime()
函数功能:读取时钟的日期、时间数据。
输入参数:无
返回值: 无
*******************************************************************/
uchar DateString[11]; //读取的日期数据存储数组
uchar TimeString[9]; //读取的时间数据存储数组
void Ds1302ReadTime()
{uchar second,minute,hour,day,month,week,year;second=Ds1302Read(WRITE_RTC_ADDR[0]|0x01); //读取ds1302中的秒minute=Ds1302Read(WRITE_RTC_ADDR[1]|0x01); //读取ds1302中的分hour=Ds1302Read(WRITE_RTC_ADDR[2]|0x01); //读取ds1302中的时day=Ds1302Read(WRITE_RTC_ADDR[3]|0x01); //读取ds1302中的天month=Ds1302Read(WRITE_RTC_ADDR[4]|0x01); //读取ds1302中的月week=Ds1302Read(WRITE_RTC_ADDR[5]|0x01); //读取ds1302中的周year=Ds1302Read(WRITE_RTC_ADDR[6]|0x01); //读取ds1302中的年DateString[0] = year0/16+0x30 ; //分离得到十位并转换成ASCII码DateString[1] = year0%16+0x30 ; //分离得到各位,注意&0x0f却无法实现DateString[2] = year/16+0x30 ; DateString[3] = year%16+0x30 ; DateString[4] = '-';DateString[5] = month/16+0x30;DateString[6] = month%16+0x30 ;DateString[7] = '-';DateString[8] = day/16+0x30 ;DateString[9] = day%16+0x30 ; DateString[10] = '\0'; //得到年月日显示格式的字符串数组TimeString[0] = hour/16+0x30 ;TimeString[1] = hour%16+0x30 ;TimeString[2] = ':';TimeString[3] = minute/16+0x30 ;TimeString[4] = minute%16+0x30 ; TimeString[5] = ':'; TimeString[6] = second/16+0x30;TimeString[7] = second%16+0x30 ;TimeString[8] = '\0'; //得到时分秒显示格式的字符串数组
}
DS1302示例子程序相关推荐
- LCD12864示例子程序
总结一下一些模块常用的子程序 相信很多同学和我一样,刚开始的时候可能不太喜欢拿着数据手册去看,然后去写一些子程序.比如说lcd12864或者lcd1602的一些写命令.写数据.忙检查子程序等等. 这里 ...
- STM32使用库函数控制时钟芯片DS1302提供时间
DS1302简介 DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片.它可以对年.月.日.周.时.分.秒进行计时,并且具有闰年补偿等多种功能: 每天的天数和闰年的天数可 ...
- 微型计算机原理与应用课件,微机原理与应用课件
PPT内容 这是微机原理与应用课件,包括了微型计算机系统概述,微处理器指令系统,汇编语言程序设计,微处理器外部特性,半导体存储器系统,基本输入输出接口等内容,欢迎点击下载. Principle and ...
- 微型计算机原理与接口技术ppt,单片机原理与接口技术课件ppt
PPT内容 这是单片机原理与接口技术课件ppt,包括了微型计算机基础,MCS-51单片机结构与时序,习题课,MCS-51与存储器连接示例,汇编语言程序设计,半导体存储器,中断系统,并行I/O接口,MC ...
- 51单片机测温加万年历
//本程序实现测温+万年历显示: #include <reg51.h> #include <intrins.h> #include<absacc.H> #inclu ...
- keil怎样将c语言多个程序合并,keil多个子程序合并问题
本人以前学单片机时学的是汇编,所以C语言的keil单片机编程不是很懂,我打算做一个酒精测试仪的课程设计,这个是我网上找到的程序代码,我试着编译,但是总是报错,想问问各位大师怎么解决,是设置的问题么,希 ...
- STC89C52单片机DS1302介绍以及代码示例
目录 DS1302介绍 引脚定义与应用电路 内部结构框架图 寄存器定义 时序定义 BCD码 时间设置上的一些问题 代码示例: DS1302介绍 DS1302是由美国DALLAS公司推出的具有涓细电流充 ...
- 寻路机器人单片机程序示例_单片机精华程序代码示例:DS1302时钟程序
真正的熟练掌握单片机,实际操作是很重要的.多看程序,多分析,从别人规范的程序代码中学习技巧是很必要的. 硬件部分: 程序部分: main.c文件 /************************** ...
- Swift与LLVM-Clang原理与示例
Swift与LLVM-Clang原理与示例 LLVM 学习 从 简单汇编基础 到 Swift 不简单的 a + 1 作为iOS开发,程序崩溃犹如家常便饭,秉着没有崩溃也要制造崩溃的原则 每天都吃的很饱 ...
最新文章
- 面试官问你 SpringMVC 的工作原理,你还不知道吗?
- Oracle 9i 升级至Oracle10g数据库最好的方法
- (c#)数据结构与算法分析 --递归
- Python 3.5 socket OSError: [Errno 101] Network is unreachable
- Executor框架
- 国产Dhyana禅定x86处理器开始启动生产
- Angular 根据指定条件动态决定是否显示自定义的popup hover Component
- Android Gallery控件使用方法详解
- 成员变量、局部变量、实例变量、静态变量、类变量、常量
- 导出oracle数据c#代码,C# 程序导入导出oracle数据库
- 多线程的那点儿事(之生产者-消费者)
- 解决securecrt rz 上传rar,gif文件不正确问题【转】
- 马云卸任阿里巴巴董事局主席;苹果承认违法中国劳动法;IntelliJ IDEA 2019.2.2 发布​ | 极客头条...
- bezier 曲线的基本性质包括证明
- 如何在Android应用里对HTTP请求头部添加适当的User-Agent字段
- Linux Commands
- 面试智力题,1000瓶水,其中一瓶有毒,而且毒性无敌,稀释一亿倍毒性都不减,毒性的发作时间最长为1小时,请问怎样可以在两个小时之内找出哪瓶水有毒
- C/C++笔试题(很多)
- eNews 第二十五期/2007.06
- x265 码率控制算法(一)CQP