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