所在位置:主页 > 程序语言 > ds1302程序讲解?

ds1302程序讲解?

发布时间:2023-12-31 08:09来源:www.sf1369.com作者:宇宇

DS1302是一款实时时钟芯片,可用于嵌入式系统中,下面介绍关于DS1302的程序讲解:

1.引脚定义:DS1302共8个引脚,其中RST(复位),IO(数据),CE(使能)三个引脚非常重要,需要单独定义。

```

#define rst 9

#define io 8

#define ce 7

```

2.写操作函数:DS1302的写入数据操作需要发送8位地址和8位数据两个参数,具体步骤如下:

```

void DS1302ByteWrite(unsigned char addr,unsigned char dat)

{

    unsigned char i;

    digitalWrite(rst, LOW);

    digitalWrite(ce, LOW);

    delay_us(4);

    for(i=0;i<8;i++)//发送地址和数据

    {

        digitalWrite(io,addr&0x01);

        addr>>=1;

        digitalWrite(ce, HIGH);

        delay_us(4);

        digitalWrite(ce, LOW);

    }

    for(i=0;i<8;i++)

    {

        digitalWrite(io,dat&0x01);

        dat>>=1;

        digitalWrite(ce, HIGH);

        delay_us(4);

        digitalWrite(ce, LOW);

    }

    digitalWrite(rst, HIGH); //主机复位

}

```

3. 读操作函数:DS1302的读取需要先发送要读取的地址,然 后读取返回的8位数据。

```

unsigned char DS1302ByteRead(unsigned char addr)

{

    unsigned char i,temp=0;

    digitalWrite(rst, LOW);

    digitalWrite(ce, LOW);

    delay_us(4);

    for(i=0;i<8;i++) //发送要读取的地址

    {

        digitalWrite(io,addr&0x01);

        addr>>=1;

        digitalWrite(ce, HIGH);

        delay_us(4);

        digitalWrite(ce, LOW);

    }

    pinMode(io,INPUT); //IO口设置为输入

    delay_us(4);

    for(i=0;i<8;i++)//读取数据

    {

        temp>>=1;

        if(digitalRead(io)) temp|=0x80;

        digitalWrite(ce,HIGH);

        delay_us(4);

        digitalWrite(ce,LOW);

    }

    pinMode(io,OUTPUT); //IO口设置为输出

    digitalWrite(rst, HIGH); //主机复位

    return temp;

}

```

4.设置时间函数:DS1302的时间设置需要依次设置秒、分、 时、日、月、周、年等信息。

```

void DS1302TimeSet(unsigned char year,unsigned char month,unsigned char day,unsigned char week,unsigned char hour,unsigned char minute,unsigned char second)

{

    DS1302ByteWrite(0x8E,0x00);//使能写保护

    DS1302ByteWrite(0x80,second); //设置秒

    DS1302ByteWrite(0x82,minute);//设置分

    DS1302ByteWrite(0x84,hour); //设置小时

    DS1302ByteWrite(0x86,day);

    DS1302ByteWrite(0x88,month);//设置月

    DS1302ByteWrite(0x8A,week);

    DS1302ByteWrite(0x8C,year);//设置年

    DS1302ByteWrite(0x8E,0x80);//关闭写保护使能

}

```

5.读取时间函数:DS1302的时间读取也需要依次读取 秒、分、时、日、月、周、年等信息。

```

void DS1302TimeRead(unsigned char *year,unsigned char *month,unsigned char *day,unsigned char *week,unsigned char *hour,unsigned char *minute,unsigned char *second)

{

    *second=DS1302ByteRead(0x81); //秒

    *minute=DS1302ByteRead(0x83); //分

    *hour=DS1302ByteRead(0x85);//时

    *day=DS1302ByteRead(0x87); //日

    *month=DS1302ByteRead(0x89); //月

    *week=DS1302ByteRead(0x8B);//周

    *year=DS1302ByteRead(0x8D); //年

}

```

以上是DS1302实时时钟芯片程序的基本说明,可以根据需要进一步优化和修改。