avr521 发表于 2006-9-25 13:31:14

哪位大哥给发个DS1307时钟芯片的程序!小弟感激不尽!!

正在搞DS1307时钟芯片的编程!!谁能帮助以下小弟。发个程序参考下!!

joson 发表于 2006-9-25 14:29:27

楼主,DS1307和DS1302有什么区别么?

zlei 发表于 2006-9-25 15:33:42

DS1307 :I2C实时时钟

DS1302 :类似SPI



印象中好像芯艺的教程里面有DS1307的代码

lihongguang 发表于 2006-10-2 12:33:27

这是芯艺的教程里的程序

点击此处下载armok01130754.rar

peterf 发表于 2006-10-8 01:26:18

这是本人写的ICC程序,可以在LCD1602上显示日期时间,可以作为参考(里边有仿真文件)!

DS1307_LCD1602

avr521 发表于 2006-10-8 09:02:23

真的十分感谢大家的热情,在次感谢!我要好好学学。

avr521 发表于 2006-10-8 15:34:47

#include"twi.h"

#include"ds1307.h"

#include"delay.h"



char g_aTimeBuf;//日历/时钟BCD格式缓冲区

char g_aTimeBin;//时钟/日历二进制格式缓冲区



/*************DS1307操作**************开始**************/

//对DS1307内存连续的写操作

unsigned char rtc_write(unsigned char addr,unsigned char *buf,unsigned char len)

{

        unsigned char i;

       

        twi_start();

        delay_nms(10);

        twi_writebyte(DS1307_ADDR|TW_WRITE);

        delay_nms(10);

        twi_writebyte(addr);//write address

        delay_nms(10);

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

        {

                twi_writebyte(buf);

                delay_nms(10);

                }

        twi_stop();

        return 0;

}



//对DS1307内存连续的读操作

unsigned char rtc_read(unsigned char addr,unsigned char *buf,unsigned char len)

{

        unsigned char i;

       

        rtc_write(addr,0,0);    //set address

       

        delay_nms(10);

       

        twi_start();

        delay_nms(10);

        twi_writebyte(DS1307_ADDR|TW_READ);

        for(i=0;i<len-1;i++)

        {

           twi_readbyte(buf+i,TW_ACK);

           delay_nms(10);

        }

        twi_readbyte(buf+i,TW_NACK);

        delay_nms(10);

        twi_stop();

        return 0;

}

/*************DS1307操作**************结束**************/





/*************接口部分****************开始**************/

//更新或读取DS1307日历/时间数据

unsigned char RtcUpdateData(unsigned char direction)

{

        unsigned char ret;

        if(direction)             //读

                ret=rtc_read(0,g_aTimeBuf,7);

        else                             //写

                ret=rtc_write(0,g_aTimeBuf,7);       



        return ret;

}

//读DS1307用户RAM

unsigned char RtcReadRAM(unsigned char addr,unsigned char *buf,unsigned char len)

{

        addr+=8;

        return rtc_read(addr,buf,len);

}

//写DS1307用户RAM

unsigned char RtcWriteRAM(unsigned char addr,unsigned char *buf,unsigned char len)

{

        addr+=8;

        return rtc_write(addr,buf,len);

}



unsigned char byte_bintobcd(unsigned char bin)

{

        unsigned char ret;

        bin&=0x7f;

        bin%=100;

        ret=bin/10;

        ret <<=4;

        ret|=bin%10;

        return ret;

}

unsigned char byte_bcdtobin(unsigned char bcd)

{

        unsigned char ret;

        ret=bcd & 0x0f;

        ret+=(bcd>>4)*10;

        return ret;               

}



//将二进制格式缓冲区(g_aTimeBin)内容转换成BCD格式后保存到BCD格式缓冲区(g_aTimeBuf)

void RtcBinToBCD(void)

{

        unsigned char i;

        g_aTimeBin&=0x7f;

        g_aTimeBin&=0x7f;



        g_aTimeBin&=0x3f;

   



        g_aTimeBin&=0x07;

       



        g_aTimeBin&=0x3f;

        g_aTimeBin&=0x1f;       

        g_aTimeBin&=0xff;

       

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

                g_aTimeBuf=byte_bintobcd(g_aTimeBin);

}



//将BCD格式缓冲区(g_aTimeBuf)内容转换成二进制格式后保存到二进制格式缓冲区(g_aTimeBin)

void RtcBCDToBin(void)

{

        unsigned char i;

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

                g_aTimeBin=byte_bcdtobin(g_aTimeBuf);

}



//写DS1307配置字节

void RtcSetSQWOutput(unsigned char en,unsigned char level)

{

        //en:方波输出允许 TRUE 有效 level:如果输出禁止 OUT口的逻辑电平

        unsigned char c=0;

        if(en)        //enable

           c=0x10;

        else        //disable

        {

           if(level)

                  c=0x80;

        }

        rtc_write(7,&c,1);

}

/*************接口部分***************结束**************/







1: 程序中涉及很多次这两个语句: twi_writebyte(DS1307_ADDR|TW_WRITE);

                           twi_writebyte(DS1307_ADDR|TW_READ);

    请问能给解释下吗?



2: 还有就是程序中涉及很多类似子程序比如return TW_STATUS;和 TWI_Wait();等等

    而这些在这之前有没有声明和定义啊。为什么它会被识别啊?请教帮忙!!




-----此内容被avr521于2006-10-08,15:50:25编辑过

avr521 发表于 2006-10-8 19:41:44

冰晶石,这是你的程序,小弟以上没太看懂,能否给予解释?

min2max 发表于 2011-11-28 08:47:41

http://adf.ly/4116/pic-lesson-i2c-module

zxtotti17 发表于 2014-10-8 17:04:45

用这试了试,写的时候数据跟时序都没问题,就是读不到数据。。发完读数据0xD1,在读程序就死在那了。
页: [1]
查看完整版本: 哪位大哥给发个DS1307时钟芯片的程序!小弟感激不尽!!