ds1302+1602实时时钟

ds1302+1602实时时钟

ID:40548292

大小:136.50 KB

页数:7页

时间:2019-08-04

ds1302+1602实时时钟_第1页
ds1302+1602实时时钟_第2页
ds1302+1602实时时钟_第3页
ds1302+1602实时时钟_第4页
ds1302+1602实时时钟_第5页
资源描述:

《ds1302+1602实时时钟》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、××大学××大学#include#include"xianshi.h"sbitio=P1^0;//1302通信允许sbitSCLK=P1^1;//1302串行数据的位同步脉冲信号sbitRST=P1^2;//1302双向串行数据传送sbitACC7=ACC^7;sbitACC0=ACC^0;uchartab[7];ucharyear[12]={2,0,0,0,0x2d-0x30,0,0,0x2d-0x30,0,0,0x20-0x30,0x20-0x30};ucharweek[7][3]={"mon","tue","wen","thu"

2、,"fri","sat","sun"};uchardate[8]={0,0,0x3a-0x30,0,0,0x3a-0x30,0,0};voidwrite1302(uchardate)//向ds1302写数据{uchari;SCLK=0;//初始时钟线置为0ACC=date;for(i=8;i>0;i--)//开始传输8个字节的数据{io=ACC0;//取最低位,注意DS1302的数据和地址都是从最低位开始传输的SCLK=1;//时钟线拉高,制造上升沿,SDA的数据被传输××大学SCLK=0;//时钟线拉低,为下一个上升沿做准备ACC=ACC>>1;//数据

3、右移一位,准备传输下一位数据}}ucharread1302()//读ds1302数据{uchari;for(i=8;i>0;i--){ACC=ACC>>1;//要返回的数据左移一位ACC7=io;//从1302由低位到高位逐渐取数据,存入ACC中SCLK=1;//拉高时钟线SCLK=0;//制造下降沿}return(ACC);//返回读取出的数据}voidwrite1302_b(unsignedcharadd,unsignedchardate){RST=0;//初始rst线置为0SCLK=0;//初始时钟sclk线置为0RST=1;//初始rst置为1,传

4、输开始write1302(add);//传输命令字,要写入的时间/日历地址write1302(date);//写入要修改的时间/日期SCLK=1;//时钟线拉高RST=0;//读取结束,rst置为0,结束数据的传输}ucharread1302_b(ucharadd){uchardate=0x00;RST=0;SCLK=0;RST=1;write1302(add);//传输命令字,要读取的时间/日历地址date=read1302();//读取要得到的时间/日期RST=0;SCLK=1;return(date);//返回得到的时间/日期}/**********

5、*******初始化DS1302********************************/voidinit_ds1302(){if((((tab[6]=read1302_b(0x81))>>7)&&0x01)==1)/*秒寄存器的BIT7定义为时间暂停位,当BIT1为1时,时钟振荡器停止工作,DS1302进入低功耗模式,电源消耗小于100微安,当BIT1为0时,时钟振荡××大学器启动,DS1302正常工作。*/{write1302_b(0x8e,0x00);//关闭写保护write1302_b(0x80,0x00);//00秒write1302_b

6、(0x82,0x54);//54分write1302_b(0x84,0x17);//17点write1302_b(0x86,0x14);//14日write1302_b(0x88,0x10);//10月write1302_b(0x8a,0x05);//星期五write1302_b(0x8c,0x11);//2011年write1302_b(0x8e,0x80);//允许写保护}}voidresult()//从1302读取时间/日历{uchari,variable;for(i=0;i<7;i++)//开始读取时间/日历并存入变量{variable=read1

7、302_b(0x8d-0x02*i);//从年开始读取,并存入临时变量中if(i==1)//若是星期则只要0x89中的低四位,由于外国是从星期天开始计算的又是数组标号,所以"-2"tab[i]=variable&0x07;else//把1302里的BCD码化成两位数,以便显示tab[i]=((variable&0x70)>>4)*10+(variable&0x0f);}year[2]=tab[0]/10;//年的十位year[3]=tab[0]%10;//年的个位year[5]=tab[2]/10;//月的十位year[6]=tab[2]%10;//月的个

8、位year[8]=tab[3]/10;//日的十位year[9]=

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

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

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