首页 > 代码库 > ds1302

ds1302

驱动程序照着时序图写或上网找(下面也有的下),这里不说了

 

                                 需对DS1302进行的操作

 

①关保护:通过8eH将写保护去掉,这样我们才能将日期,时间的初值写时各个寄存器。

②赋初值:对80H、82H、84H、86H、88H、8AH、8CH进行初值的写入。同时也通过秒寄存器将位7的CH值改成0,这样DS1302就开始走时运行了。

③开保护:将写保护寄存器再写为80H,防止误改写寄存器的值

④读数值:不断读取80H-8CH的值,将它们格式化后显示出来。

 

<pre name="code" class="html"><pre name="code" class="cpp"><pre name="code" class="objc">uchar write_addr[]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
uchar write_data[]={0x00,0x00,0x20,0x16,0x06,0x04,0x16}	;
uchar read_addr[]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d} ;
uchar read_data[7]={0,0,0,0,0,0,0};
void set_time()
{
uchar write_addr[]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
uchar write_data[]={0x00,0x00,0x20,0x16,0x06,0x04,0x16}	;
uchar read_addr[]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d} ;
uchar read_data[7]={0,0,0,0,0,0,0};
void set_time()
{
    uchar i;
    Ds1302_Single_Byte_Write(0x8e,0x00);//关保护
	for(i=0;i<7;i++)
	{
	    Ds1302_Single_Byte_Write(write_addr[i],write_data[i]);//写初值
	}
	Ds1302_Single_Byte_Write(0x8e,0x80);//开保护}
void read_time()
{
    uchar i;
	for(i=0;i<7;i++)
	{
	    read_data[i]=Ds1302_Single_Byte_Read(read_addr[i]);//读取 
	}
} <span style="font-family: 宋体, Arial;">                                              </span><span style="font-family: 宋体, Arial;">							</span><span style="font-family: 宋体, Arial;">    </span>



                                                                                                             关于驱动的一点问题

 

/单字节读出一字节数据*/
unsigned char Read_Ds1302_Byte(void) 
{
	unsigned char i, dat=0;	
	for (i=0;i<8;i++)
	{	
		dat = dat >> 1;
		if (SDA_R) 	  //if(SDA_R==1)    #define SDA_R SDA /*电平读取*/	
		{
			dat |= 0x80;
		}
		else 
		{
			dat &= 0x7F;
		}
		SCK_SET;//时钟置高
		SCK_CLR;//时钟置低
	} SDA_CLR;//!!!!!!!!!!!!!!!!!!!!!!!!这里有时候不打会显示问号,最好还是把这个数据线拉低
	return dat;
}

另外,碰巧搜到的关于调试1302的文章  分享下点击打开链接

 

参考资料:点击打开链接

代码:点击打开链接

 

ds1302