效果展示
- #include<global.h>
- void DS3231WriteByte(unsigned char addr,unsigned char dat)
- {
- bit ack;
- IICStart();
- ack = IICWrite(0xD0);//写设备地址+写操作
- while(~ack);
- ack = IICWrite(addr);//内部寄存器指针
- while(~ack);
- ack = IICWrite(dat);//写数据
- while(~ack);
- IICStop();
- }
- void DS3231ReadByte(unsigned char addr,unsigned char *buf)
- {
- bit ack;
- IICStart();
- ack = IICWrite(0xD0);//写设备地址+写操作
- while(~ack);
- ack = IICWrite(addr);//内部寄存器指针
- while(~ack);
- IICStop();
-
- IICStart();
- ack = IICWrite(0xD1);//写设备地址+读操作
- while(~ack);
- *buf = IICReadNAK();//读一个字节数据
- IICStop();
- }
- void DS3231Read7Byte(unsigned char *buf)
- {
- bit ack;
- unsigned char i;
- IICStart();
- ack = IICWrite(0xD0);//写设备地址+写操作
- while(~ack);
- ack = IICWrite(0x00);//秒寄存器地址
- while(~ack);
- IICStop();
-
- IICStart();
- ack = IICWrite(0xD1);//写设备地址+读操作
- while(~ack);
- for(i=0;i<6;i++)
- { //上面写了秒寄存器地址,内部寄存器指针会自动+1
- *buf++= IICReadACK();//所以只需要发送一个开始地址
- } //读数据,发送还需要读数据的应答位
- *buf= IICReadNAK();//读数据,不需要再读取数据应答位
- IICStop();
-
- }
- void DS3231Write7Byte(unsigned char *dat)
- {
- bit ack;
- unsigned char i;
- IICStart();
- ack = IICWrite(0xD0);//写设备地址+写操作
- while(~ack);
- ack = IICWrite(0x00);//秒寄存器地址
- while(~ack);
- for(i=0;i<7;i++)
- {
- ack = IICWrite(dat[i]);//连续写入数据7次,和上面同理
- while(~ack);
- }
- IICStop();
- }
- void GetRealTime(struct sTime *time)
- {
- unsigned char buf[8];
-
- DS3231Read7Byte(buf);
- time->year = buf[6];
- time->mon = buf[5];
- time->day = buf[4];
- time->hour = buf[2];
- time->min = buf[1];
- time->sec = buf[0];
- time->week = buf[3];
- }
复制代码
全部资料51hei下载地址:
ds3231.rar
(58.74 KB, 下载次数: 79)
|