资源描述:
《ds1302时钟显示》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、//DS1302在使用的时候要加上拉电阻!!!不加上拉会出现驱动力不够,而使数码管缺段显示!#include#include#defineucharunsignedchar#defineuintunsignedint#definedate0second0#definedate1second1#definemonth0minute0#definemonth1minute1#defineweek0hour0#defineweek1hour1sbitDS1302_CLK=P1^2;//实时时钟时钟线引脚sbitDS1302_IO=P1^3;//实时
2、时钟数据线引脚sbitDS1302_RST=P1^4;//实时时钟复位线引脚sbitACC0=ACC^0;sbitACC7=ACC^7;sbittime=P3^2;sbitdate=P3^3;sbitsecond0=P2^0;sbitsecond1=P2^1;sbitminute0=P2^2;sbitminute1=P2^3;sbithour0=P2^4;sbithour1=P2^5;sbityear0=P2^6;sbityear1=P2^7;ucharnow_time_date[8]={0x00,0x24,0x14,0x03,0x15,0x04,0x09,0x00};//秒,分,
3、时,星期,日,月,年,禁止写//codeuinttable[]={0x3f,0x60,0x5b,0x4f,0x66,0x6d,0x7d,0x70,0x7f,0x6f};codeuinttable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//显示段码数码管字跟/******************延时*********************/voiddelay(uinti){uintj=0;for(;i>0;i--)for(j=0;j<100;j++);}/******************结束*********
4、************//******************DS1302:写入操作(上升沿)*********************/voidDS1302InputByte(uchard)//实时时钟写入一字节(内部函数){unsignedchari;ACC=d;for(i=8;i>0;i--){DS1302_IO=ACC0;//相当于汇编中的RRCDS1302_CLK=1;DS1302_CLK=0;ACC=ACC>>1;}}/******************DS1302:读取操作(下降沿)*****************/ucharDS1302OutputByte()
5、//实时时钟读取一字节(内部函数){unsignedchari;for(i=8;i>0;i--){ACC=ACC>>1;//相当于汇编中的RRCACC7=DS1302_IO;DS1302_CLK=1;DS1302_CLK=0;}return(ACC);}/******************DS1302:写入数据(先送地址,再写数据)***************************/voidWrite1302(ucharucAddr,ucharucDa)//ucAddr:DS1302地址,ucData:要写的数据{DS1302_RST=0;DS1302_CLK=0;DS130
6、2_RST=1;DS1302InputByte(ucAddr);//地址,命令DS1302InputByte(ucDa);//写1Byte数据DS1302_CLK=1;DS1302_RST=0;}/******************DS1302:读取数据(先送地址,再读数据)**************************/ucharRead1302(unsignedcharucAddr)//读取DS1302某地址的数据{unsignedcharucData;DS1302_RST=0;DS1302_CLK=0;DS1302_RST=1;DS1302InputByte(ucAd
7、dr
8、0x01);//地址,命令ucData=DS1302OutputByte();//读1Byte数据DS1302_CLK=1;DS1302_RST=0;return(ucData);}voidset_ds1302(ucharaddr,uchar*p,ucharn){Write1302(0x8e,0x00);//写控制字,允许写操作for(;n>0;n--){Write1302(addr,*p);p++;addr=addr+2;}Write1302(0x8e,0x8