DS1302读写程序

DS1302读写程序

ID:38582612

大小:31.00 KB

页数:4页

时间:2019-06-15

DS1302读写程序_第1页
DS1302读写程序_第2页
DS1302读写程序_第3页
DS1302读写程序_第4页
资源描述:

《DS1302读写程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、/*日期:2010年10月10日文件名:DS1302功能:第三步,实现单片机对DS1302的读写,将时间信息显示在数码管上,断电后仍能正常计时*/unsignedcharrec_time[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00};//定义一个数组存储秒,分,时,日,月,周,年unsignedcharled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//定义数码管的0~9的段码//对DS1320的三个和单片机的接口进行字符常量定义#define SCLK PORTC0_bit#define IO

2、   PORTC1_bit#define RST  PORTC2_bit//初始化和DS1302连接的三个端口voidds1302_init(){ DDRC

3、=0x07;//设置PC0,1,2为输出 SCLK=0; //设置SCLK初始值为0 IO=1;  //设置IO初始值为1 RST=0; //设置RST初始值为0}//写入一个字节voidds1302_write_byte(unsignedchardat){ unsignedchari; for(i=0;i<8;i++) {   SCLK=0; //时钟信号拉低   if(dat&0x01)      IO=1; //判断地址字节的最低位

4、,1位为1则拉高IO   else IO=0;//1位为0,则输入数据为0,拉低IO   delay_us(1);   SCLK=1;//时钟信号拉高,产生上升沿   delay_us(1);   dat>>=1; //字节右移一位 }}//读出一个字节unsignedchards1302_read_byte(){ unsignedchari,dat=0; DDC1_bit=0; //设置IO的方向为输入 PORTC1_bit=0; //设置IO为高阻态 for(i=0;i<8;i++) {   dat>>=1;//数据右移一位   SCLK=1;//设置SCLK为高电平   delay_us

5、(1);   SCLK=0; //设置SCLK为低电平,产生下降沿   delay_us(1);   if(PINC1_bit==1) //如果读出的数据为1     dat

6、=0x80;    //数据位1,则写入1 } DDC1_bit=1;//将IO口的方向改为输出 returndat;//返回得到的数据}//向DS1302写入一个地址和数据voidds1302_write(unsignedcharadd,unsignedchardat){ RST=0;   //将RST拉低 SCLK=0;  //将SCLK拉低 RST=1;   //将RST拉高 ds1302_write_byte(a

7、dd);//写入地址字节 ds1302_write_byte(dat);//写入数据 SCLK=1; //将SCLK拉高 RST=0;  //将RST拉低}unsignedchards1302_read(unsignedcharadd){  unsignedchar shuju; //定义一个变量,存储返回的数据  RST=0;  //将RST拉低  SCLK=0;  //将SCLK拉低  RST=1;  //将RST拉高  ds1302_write_byte(add); //写入地址字节  shuju=ds1302_read_byte();//读取该地址字节的数据  SCLK=1;   //

8、将SCLK拉高  RST=0;    //将RST拉低  returnshuju; //返回读到的数据}//数码管显示时间的程序voidds1302_display(){ unsignedcharj; unsignedchartime[13]; //定义一个数组存放时间信息的每一位 unsignedcharposition[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//设置位选信号数组 time[0]=rec_time[0]&0x0f;   //提取秒的个位 time[1]=(rec_time[0]&0x70)>>4;//提取秒的十位 time[

9、2]=rec_time[1]&0x0f;  //提取分的个位 time[3]=(rec_time[1]&0x70)>>4;//提取分的十位 time[4]=rec_time[2]&0x0f;   //提取小时的个位 time[5]=(rec_time[2]&0x30)>>4;//提取小时的十位 time[6]=rec_time[3]&0x0f; //提取日的个位 time[7]=(rec_time

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

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

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