文章跳转

DS1302文章主体


Ds1302显示的时候老跳怎么办

解决方案:
在这里插入图片描述
  在读这里写时序保护,直接开关中断,防止在传输数据的时候,被中断给打断,这样可以有效解决显示的时候老跳

加减的时候出现乱码

解决方案:
  如果使用1302,加减的时候出现乱码——注意有无边界检查,要先加减再进行判断而不是先判断后加减
例如

if(time[0]>=60)time[0]=0;
else time[0]++;


/*这是不太行的
改成
*/
if(++time[1]==60)time[1]=0;


/*或者*/
if(time[1]==0)time[1]=59;			
else 
{
	time[1]--;
	if(time[1]==0) time[1]=59;
}

出现乱码的原因就是加减的时候超出他的上下限了,所以才会出现乱码,同时也要注意char,unsigned char的区别
然后,减的是时候要用上面那种,因为负数会导致直接乱码,而加可以直接用if(++time[1]==60)time[1]=0;这种写法

使用1302出现闪烁

解决方案:
  则在读的时候for循环里面增加
  EA=0,EA=1;

for(i=0;i<3;i++)
{
	EA=0;
	time[i]=Read_Ds1302_Byte(ds_read_add[i]);
	EA=1;
}

或者在写的时候加上也行,不过要保证EA=0,EA=1包含在他整个运行段里

void ds1302_write()
{
	int i;
	EA=0;
	bcddec(1);
	Write_Ds1302_Byte(0x8e,0x00);
	for(i=0;i<3;i++)
	 {
		Write_Ds1302_Byte(ds_write_add[i],time[i]);
	 }
	 Write_Ds1302_Byte(0x8e,0x80);
	 EA=1;
}

  同时为了减少错误,在1302读出来的时候就开始把他转换为10进制,这样在显示的时候会比较好
在这里插入图片描述

总结

  1302出现问题大多都是无边界检查,或者就是在运行的时候被中断打断导致乱码等,检查的时候先检查这两个部分
在这里插入图片描述
在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐