标题: 单片机电子钟调整后的时间无法写入ds1302 [打印本页]

作者: ai58520    时间: 2019-3-24 01:29
标题: 单片机电子钟调整后的时间无法写入ds1302
      程序一开始是能够完善运行的,设置时间时停止不动,设置完毕后开始走动。
      但是后来我将字库中的字符从8*16修改为16*32以后,虽然设置时间的时候仍是停止不动,但是其实还是在计时,设置完毕后时间就会自动跳转,不是我设置的那个数了。      目前发现仅有秒无法正确修改,且修改时只能减不能加,其余时,分,日期都能正常修改。
      我怀疑是下面那段程序出错了,求解答。
      如果能帮我解决一下12864显示残缺的问题就更好了,十分感谢!

单片机源程序:

  1. //-----------------------------------------------------------
  2. // 设置时间
  3. //---------------------------------------------------------
  4. void SET_DS1302()          //  设置时间
  5. {
  6.    uchar i;
  7.    Write_Data_TO_DS1302(0x8E,0x00); //写控制字,取消写保护
  8.    // 分,时,日,月,年依次写入
  9.    for(i=1;i<7;i++)
  10.      {
  11.           // 分的起始地址是10000010(0x82),后面依次是时,日,月,周,年,写入地址每次递增2


  12.                    Write_Data_TO_DS1302(0x80+2*i,(DateTime[i]/10<<4)|(DateTime[i]%10));    //希望能解释一下这一句。


  13.          }
  14.    Write_Data_TO_DS1302(0x8E,0x80); //写控制字,加写保护
  15. }
  16. //--------------------------------------------------------
  17. // 读取当前时间
  18. //-------------------------------------------------------
  19. void GetTime()                  //  读取当前时间
  20. {
  21.   uchar i;
  22.   for(i=0;i<7;i++)
  23.     {
  24.           DateTime[i]=Read_Data_FROM_DS1302(0x81+2*i);
  25.         }
  26. }
复制代码


作者: wc86110    时间: 2019-3-24 09:19
编者有意这么写的算不算错?

要解决残缺的问题得上剧本
作者: zl2168    时间: 2019-3-24 11:16
本帖最后由 zl2168 于 2019-3-26 11:16 编辑

实例91  具有校正功能的时钟1302(LCD1602显示)
先Proteus仿真,确认有效。
实例91 带校正时钟1302(LCD1602显示).rar (52.68 KB, 下载次数: 38)

以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1,书中电路和程序设计有详细说明,程序语句条条有注解。

作者: 甫生啊啊啊    时间: 2021-4-25 14:49
zl2168 发表于 2019-3-24 11:16
实例91  具有校正功能的时钟1302(LCD1602显示)
先Proteus仿真,确认有效。

你好,可以向向您请教一下.c  源代码吗?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1