接线说明,以 Ardui no uno r3 为例:
代码部分:
#in elude <>
#in elude vintrin >
#defi ne ned char
uehar un sig
#defi ne un sig ned
uint int
sbit SDA=P3 A6; // 模拟I2C 数据传送位SDA
**************
sbit SCL=P3A7; // 模拟 I2C 时钟控制位 SCL**************
sbit INT=P3A2;
sbit RESET=P3A3;
// **************
sbit led0=P1A0 ;
sbit led 1=P1A1 ;
sbit led2=P1A2;
sbit led3=P1A3;
sbit led4=P1A4;
sbit led5=P1A5;
sbit led6=P"6;
sbit led7=P1A7;
**************
bit ack;
//应答标志位
#defi ne DS3231 WriteAddress OxDO
//器件写地址
#defi neDS3231 SALARM1ECOND 0x07
#defi ne DS3231 ALARM1MINUTE 0x08
#define DS3231 ALARM2MINUTE 0x0b
***********
***********
#defi ne DS3231 ReadAddress
#defi ne DS3231 SECOND
#defi ne DS3231 MINUTE
#defi neDS3231 HOUR
#defi neDS3231 WEEK
#defi neDS3231 DAY
#defi neDS3231 MONTH
#defi neDS3231 Y EAR
〃闹铃1
#defi ne DS3231 ALARM1HOUR
#defi ne DS3231 ALARM1WEEK
〃闹铃2
#defi ne DS3231 ALARM2HOUR
#defi ne DS3231 ALARM2WEEK
#defi n eDS3231 CONTROL
0xD1 //器件读地址
0x00 // 秒
0x01 // 分
0x02 // 时
0x03 //星期
0x04 /
/
0x05 // 月
0x06 /
/
//秒
//分
0x09 // 时
0x0A //星期/日
//分
0x0c II 时
0x0d II星期I日
0x0e II控制寄存器
#defi ne
BSY
〃忙
#defi ne
OSF
#defi ne DS3231 XTAL
7 //振荡器停止标志
0x10 //晶体老化寄存器
#defi ne DS3231 TEMPERATUREH 0x11
//温度寄存器高字节 (8位)
#defi ne DS3231 TEMPERATUREL 0x12
***********
/
/
//温度寄存器低字节(高2位)
uchar code dis_code[11]={0xc0,0xf9,0xa4,0xb0.
// 0,1,2,3
0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};
// 4,5,6,7,8,9,off
uchar data dis_buf[8];
uchar data dis_i n dex;
uchar data dis_digit;
//
**************
uchar BCD2HEX(uchar val) uchar temp;
//BCD转换为 Byte
temp=val&0x0f;
val>>=4;
val&=0x0f;
val*=10;
temp+=val;
return temp;
uchar HEX2BCD(uchar val) 〃 B 码转换为 BCD 码
{
uchar i,j,k;
i=val/10;
j=val-i*10 ・ **************
k=j+(i<<4);
return k;
}
void delayus(ui nt us) 注:单片机型号不同
{
while (us--);
} void Start_l2C()
{
SDA=1; //发送起始条件的数据信号
delayus(1);
SCL=1;
delayus(5);
//起始条件建
ds3231程序 来自淘豆网www.taodocs.com转载请标明出处.