新人求教!用单片机和DS1302写个万年历程序用LCD1602显示,为什么重新烧入程序后,并没用复位初值,这是什么原因呢?
时间:10-02
整理:3721RD
点击:
比如说我设置的初始化时间是2017-02-26:12时00分00秒。烧入程序,LCD液晶显示屏开始显示时间,过了30秒,LCD的显示屏的时间是2017-02-26:12时00分30秒.。那么这时候我重新再一次烧入程序,显示的时间不应该是重新写成2017-02-26:12时00分00秒了吗?但是实际上重新烧入程序后,时间并没有改变,仍是从017-02-26:12时00分30+烧入程序的时间秒,开始计时的,也就是说重新烧入数据对显示并没有影响,这是为什么呢?
extern uchar time[7]={0x00,0x00,0x12,0x25,0x02,0x06,0x17};//这是写入的初始时间
void main()
{
uchar i;
Lcdinit();
Ds1302Write(0x8e,0x00); //关闭写保护
for(i=0;i<7;i++) //写入初始时间
{
Ds1302Write(write_addr[i],time[i]);
}
Ds1302Write(0x8e,0x80); //打开写保护
while(1)
{
for(i=0;i<7;i++)
{
time[i]=Ds1302Read(read_addr[i]);
}
Lcddisplay();
//delay(5);
}
}
extern uchar time[7]={0x00,0x00,0x12,0x25,0x02,0x06,0x17};//这是写入的初始时间
void main()
{
uchar i;
Lcdinit();
Ds1302Write(0x8e,0x00); //关闭写保护
for(i=0;i<7;i++) //写入初始时间
{
Ds1302Write(write_addr[i],time[i]);
}
Ds1302Write(0x8e,0x80); //打开写保护
while(1)
{
for(i=0;i<7;i++)
{
time[i]=Ds1302Read(read_addr[i]);
}
Lcddisplay();
//delay(5);
}
}
DS1302具有掉电保护,因此掉电时候能够保持掉电前的数据。新烧录程序显示之前的值应该是这个原因,没有复位是不是你下载程序后没有复位,所以新down的程序没有运行
此问答贴被选为2月27日的每日一答贴,活动详情见:http://bbs.elecfans.com/jishu_1111064_1_1.html 希望大家可以踊跃帮助坛友解决问题,谢谢。
应该是你的DS1302用的备用电源,纽扣电池之类的 你如果用单片机VCC供电试试就知道了
是的 谢谢
要让板子彻底断电,如果实时时钟有单独的电源(纽扣电池)也要拿掉
小编如果对坛友的答案满意 请选为最佳答案哦~
如果有纽扣电池的供电的话,程序再烧进去一次 就没有什么作用吗?还是说程序就少不进去了?
下载程序后没有复位是什么意思?不就是按单片机开发板上的复位按键吗?如果是的话,按下没有作用
以下是来自电子发烧友网微信公众号的答案
会不会是LCD没有重新更新数据
单片机是否完全断电了?
LCD初始化是否清除数据了?
我复位之后还是一样的情况
