关于DS1302时钟的一个疑问

void datapros()
{
	DS1302ReadTime();
	DisplayData[0] = smgduan[TINE[2]/16];				
	DisplayData[1] = smgduan[TINE[2]&0x0f];
	DisplayData[2] = 0x40;
	DisplayData[3] = smgduan[TINE[1]/16];				
	DisplayData[4] = smgduan[TINE[1]&0x0f];	
	DisplayData[5] = 0x40;
	DisplayData[6] = smgduan[TINE[0]/16];				
	DisplayData[7] = smgduan[TINE[0]&0x0f];
}

void main()
{
	DS1302Init();
	while(1)
	{
		datapros();	 
		DigDisplay();
	}
}

为什么读取函数DS1302ReadTime();要放进循环里,我试过不放进循环里他就不动了。

你这个代码不全呀,你是想问什么问题呢?

void DS1302Write(uchar addr, uchar dat)
{
	uchar i;
	RST = 0;
	_nop_();
	SCLK = 0;
	_nop_();
	RST = 1;
	_nop_();
	for(i = 0; i < 8; i++)
	{
		DSIO = addr & 0x01;
		addr >>= 1;
		_nop_();
		SCLK = 1;
		_nop_();
		SCLK = 0;
		_nop_();
	}
	for(i = 0; i < 8; i++)
	{
		DSIO = dat & 0x01;
		dat >>= 1;
		_nop_();
		SCLK = 1;
		_nop_();
		SCLK = 0;
		_nop_();
	}
	RST = 0;
	_nop_();
}

uchar DS1302Read(uchar addr)
{
	uchar i, num, num1;
	RST = 0;
	_nop_();
	SCLK = 0;
	_nop_();
	RST = 1;
	_nop_();
	for(i = 0; i < 8; i++)
	{
		DSIO = addr & 0x01;
		addr >>= 1;
		_nop_();
		SCLK = 1;
		_nop_();
		SCLK = 0;
		_nop_();
	}
	_nop_();
	for(i = 0; i < 8; i++)
	{
		num1 = DSIO;
		num = (num >> 1) | (num1 << 7);
		_nop_();
		SCLK = 1;
		_nop_();
		SCLK = 0;
		_nop_();
	}
	
	RST = 0;
	_nop_();	//ÒÔÏÂΪDS1302¸´Î»µÄÎȶ¨Ê±¼ä,±ØÐëµÄ¡£
	SCLK = 1;
	_nop_();
	DSIO = 0;
	_nop_();
	DSIO = 1;
	_nop_();
	return num;	// Ò»¶¨Òª¼ÇµÃÓзµ»ØÖµ
}

void DS1302Init()
{
	uchar i;
	DS1302Write(0x8E,0x00);
	for(i = 0; i < 7; i++)
	{
		DS1302Write(WRITE_RTC_ADDR[i],TIME[i]);
	}
	DS1302Write(0x8E,0x80);
}
	
void DS1302ReadTime()
{
	uchar i;
	for(i = 0; i < 7; i++)
	{
		TINE[i] = DS1302Read(READ_RTC_ADDR[i]);
	}
}

这是ds1302.c里的代码,我想问的是为什么读取函数要放入循环里面,不放入循环里时钟就不会走。

有大佬帮我解决下疑惑吗,我想问下为什么读取函数DS1302ReadTime();要放进循环里,我试过不放进循环里他就不动了。

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632