ds1302实时时钟程序说明.doc

ds1302实时时钟程序说明.doc

ID:61419173

大小:169.50 KB

页数:5页

时间:2021-01-28

ds1302实时时钟程序说明.doc_第1页
ds1302实时时钟程序说明.doc_第2页
ds1302实时时钟程序说明.doc_第3页
ds1302实时时钟程序说明.doc_第4页
ds1302实时时钟程序说明.doc_第5页
资源描述:

《ds1302实时时钟程序说明.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、DS1302是美国达拉斯公司生产的一款实时时钟芯片,采用SPI三线接口方式与单片机进行通信,内部提供年、月、日、星期、时、分、秒,还有闰年补偿等功能。具有宽电压,低功耗,高性能等优点。DS1302内部有31个静态数据寄存器,可以进行BCD码数据存储。在对DS1302进行操作时候,先要写入控制字。,选择相应的寄存器地址进行读或者写操作。DS1302的读时序图RST相当于片选信号,只有当RST为高电平期间,才能有效对DS1302进行操作,在SCLK的上升沿写入数据,低位在前,高位在后,先写入控制字,这里是进行读操作,所以在紧接着第8个时钟之后的第一个下降沿就读取数据,也是低位在前,高位在后的。D

2、S1302的写时序图同理,也是在RST为高电平期间,才能有效地操作DS1302,先写入控制字,接着在第8个时钟之后的第一个上升沿的时候,就写入数据,也是低位在前的,这样就完成了写操作。下面是DS1302内部寄存器的地址的说明。DS1302实时时钟在数码管上进行实时显示的程序#include#include#defineuintunsignedint#defineucharunsignedcharsbitrst=P2^4;sbitio=P2^0;sbitclk=P2^1;sbitduan=P2^6;sbitwei=P2^7;ucharcodetable[

3、]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};ucharcodetable2[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};uchartime_data[7]={14,2,4,8,19,20,30};//设置一个数组作为时间校对的初值ucharwrite_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};//寄存器的地址写操作年周月日时分秒ucharread_add[7]=

4、{0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};//寄存器的地址读操作uchardisp[8];//进行显示的数值voiddelay(uintx){uinti,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}//约为x毫秒时间voidwrite_byte(uchardat)//写一个字节的函数{uchari;//高电平数据稳定,低电平变化for(i=0;i<8;i++){clk=0;io=dat&0x01;dat>>=1;clk=1;}}voidwrite_ds1302(ucharadd,uchardat)//这里需要对rst进行拉高,才

5、能传输数据{rst=0;_nop_();//进行简短延时约为2usclk=0;_nop_();rst=1;//进行rst拉高操作_nop_();write_byte(add);//写寄存器地址write_byte(dat);//接着就写数据不需要延时rst=0;_nop_();clk=1;_nop_();io=1;_nop_();//释放数据线}ucharread_ds1302(ucharadd){uchari,temp;rst=0;_nop_();clk=0;_nop_();rst=1;_nop_();write_byte(add);//先选中要读取数据的寄存器for(i=0;i<8;i+

6、+){temp>>=1;//移位7次clk=0;//读取时低电平数据稳定,高电平变化if(io)temp

7、=0x80;clk=1;}rst=0;_nop_();clk=1;_nop_();io=1;_nop_();//进行释放总线操作returntemp;}voidset_rtc(){uchari,j;for(i=0;i<7;i++)//例58{j=time_data[i]/10;//十位5time_data[i]%=10;//各位8time_data[i]=time_data[i]+j*16;}write_ds1302(0x8e,0x00);//去除写保护for(i=0;i<7;i++){

8、write_ds1302(write_add[i],time_data[i]);}write_ds1302(0x8e,0x80);//进行写保护}voidread_rtc(){uchari;for(i=0;i<7;i++){time_data[i]=read_ds1302(read_add[i]);}}voidtime_pros(){disp[0]=time_data[6]%16;//将BCD码(这里与十六进

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。