DS1302在STM32中的应用.doc_第1页
DS1302在STM32中的应用.doc_第2页
DS1302在STM32中的应用.doc_第3页
DS1302在STM32中的应用.doc_第4页
DS1302在STM32中的应用.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#ifndef _Ds1302_h#define _Ds1302_h#include stm32f10x.h/=【DS1302接口宏定义】#define DS1302_SCLK(x)(x? GPIO_SetBits(GPIOB, GPIO_Pin_0): GPIO_ResetBits(GPIOB, GPIO_Pin_0)#define DS1302_OUTPUT(x)(x? GPIO_SetBits(GPIOC, GPIO_Pin_5): GPIO_ResetBits(GPIOC, GPIO_Pin_5)/DS1302_IO 输出宏定义#define DS1302_CE(x)(x? GPIO_SetBits(GPIOC, GPIO_Pin_4): GPIO_ResetBits(GPIOC, GPIO_Pin_4)#define DS1302_INPUT() GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_5) /DS1302_IO 输入宏定义typedef struct u8 hour;u8 min;u8 sec;/公历日月年周u16 w_year;u8 w_month;u8 w_date;u8 week; tme; void Ds1302IO_Init(void);void Writeoneword_1302(u8 address,u8 shuju);u8 Readoneword_1302(u8 address);void Gettime_1302(void);void Settime_1302(u16 year,u8 month,u8 day,u8 hour,u8 minute);#endif/*=DS1302底层驱动函数,需要用到的函数有Ds1302IO_Init();Settime_1302(u16 year,u8 month,u8 day, u8 week, u8 hour,u8 minute);Gettime_1302(void);*/#include Ds1302.h#define Charge() Writeoneword_1302(0x90,0xa4)#define ENWrite() Writeoneword_1302(0x8e,0x00)#define DISWrite() Writeoneword_1302(0x8e,0x80)tme time;/*十进制数据转换为十六进制*/u8 ChangeTohex(u8 dat)u8 temp;temp=(dat/10)*16+dat%10;return temp;/*十六进制转换为十进制数据*/u8 ChangeToDec(u8 dat)u8 temp;temp=(dat/16)*10+dat%16;return temp;/*DS1302端口配置初始化*/void Ds1302IO_Init(void)/= DS1302接口初始化GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0; /PB0 -DS18B20_SCLKGPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin =GPIO_Pin_4;/|GPIO_Pin_5; PC4-DS18B20_CE、PC5-DS18B20_IOGPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStructure);/*写入一字节数据*/void Writeonechar_1302(u8 m)/向1302写一字节数据u8 i;for(i=0;i1;delay_ms(1);/*读取一字节数据*/u8 Readonechar_1302() u8 i,temp=0x00;for(i=0;i1;DS1302_SCLK(0);Delay(30);if(DS1302_INPUT()=1)temp=temp|0x80;DS1302_SCLK(1);Delay(30);return temp; /*从DS1302读取数据*/u8 Readoneword_1302(u8 address)u8 temp;GPIO_InitTypeDef GPIO_InitStructure; DS1302_SCLK(0);Delay(30);DS1302_CE(1);Delay(300);GPIO_InitStructure.GPIO_Pin =GPIO_Pin_5; /PC5 DS1302 数据接口GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStructure);Writeonechar_1302(address);GPIO_InitStructure.GPIO_Pin =GPIO_Pin_5; /PC5 DS1302 数据接口GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; /上拉输入GPIO_Init(GPIOC, &GPIO_InitStructure);temp=Readonechar_1302();Delay(30);DS1302_SCLK(0);Delay(30);DS1302_CE(0);return temp;/*向DS1302写入数据*/void Writeoneword_1302(u8 address,u8 shuju)GPIO_InitTypeDef GPIO_InitStructure;DS1302_SCLK(0);Delay(30);DS1302_CE(1);GPIO_InitStructure.GPIO_Pin =GPIO_Pin_5; /PB0 -DS18B20_SCLKGPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStructure);Writeonechar_1302(address);Writeonechar_1302(shuju);DS1302_SCLK(0);Delay(30);DS1302_CE(0);/*设置日期,时间,包括年,月,日,时,分,秒*/void Settime_1302(u16 year,u8 month,u8 day, u8 week, u8 hour,u8 minute) /*把数据转换为十六进制后写入DS1302*/year=ChangeTohex(year-2000); month=ChangeTohex(month);day=ChangeTohex(day);hour=ChangeTohex(hour);minute=ChangeTohex(minute);week=ChangeTohex(week);ENWrite();Writeoneword_1302(0x8c,year);Writeoneword_1302(0x88,month);Writeoneword_1302(0x86,day);Writeoneword_1302(0x8a,week);Writeoneword_1302(0x84,hour);Writeoneword_1302(0x82,minute);Writeoneword_1302(0x80,0x00);DISWrite();/*读取日期,时间,包括年,月,日,时,分,秒*/void Gettime_1302(void)/中间变量u8 buffer7;buffer6=Readoneword_1302(0x8d);/年份低两位buffer5=Readoneword_1302(0x89)&0x1f; /月份buffer4=Readoneword_1302(0x87)&0x3f;/日期buffer3=Readoneword_1302(0x8b)&0x3f;buffer2=Readoneword_1302(0x85)&0x1f;/时buffer1=Readoneword_1302(0x83)&0x7f;/分buffer0=Readoneword_1302(0x81)&0x7f; /秒/timer.w_year,timer.w_month,timer.w_date,timer.hour,timer.min,timer.sec/*将读取的十六进制数据转换为十进制数据*/time.w_year =ChangeToDec(b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论