标题: 求问一个ds1302时钟芯片的问题 [打印本页]

作者: wifen    时间: 2022-8-26 11:24
标题: 求问一个ds1302时钟芯片的问题
看书上的1302的程序,会写这么一行unsigned char psec=0xAA; //秒备份,初值 AA 确保首次读取时间后会刷新显示 不是很明白,这个会和读取的秒时间进行比较,这个的意思是因为是bcd码,初值AA超过了9了,清0的意思吗?



作者: yzwzfyz    时间: 2022-8-26 14:14
只个只能表示给个初值。有没有其它意思,结合整个程序及硬件设计就清楚了。
作者: wifen    时间: 2022-8-26 15:19
本帖最后由 wifen 于 2022-8-27 10:09 编辑
  1. while (1)
  2. {
  3. if (flag200ms) //每 200ms 读取依次时间
  4. {
  5. flag200ms = 0;
  6. DS1302BurstRead(time); //读取 DS1302 当前时间
  7. if (psec != time[0]) //检测到时间有变化时刷新显示
  8. {
  9. str[0] = '2'; //添加年份的高 2 位: 20
  10. str[1] = '0';
  11. str[2] = (time[6] >> 4) + '0'; //“年”高位数字转换为 ASCII 码
  12. str[3] = (time[6]&0x0F) + '0'; //“年”低位数字转换为 ASCII 码
  13. str[4] = '-'; //添加日期分隔符
  14. str[5] = (time[4] >> 4) + '0'; //“月”
  15. str[6] = (time[4]&0x0F) + '0';
  16. str[7] = '-';
  17. str[8] = (time[3] >> 4) + '0'; //“日”
  18. str[9] = (time[3]&0x0F) + '0';
  19. str[10] = '\0';
  20. LcdShowStr(0, 0, str); //显示到液晶的第一行
  21. str[0] = (time[5]&0x0F) + '0'; //“星期”
  22. str[1] = '\0';
  23. LcdShowStr(11, 0, "week");
  24. LcdShowStr(15, 0, str); //显示到液晶的第一行
  25. str[0] = (time[2] >> 4) + '0'; //“时”
  26. str[1] = (time[2]&0x0F) + '0';
  27. str[2] = ':'; //添加时间分隔符
  28. str[3] = (time[1] >> 4) + '0'; //“分”
  29. str[4] = (time[1]&0x0F) + '0';
  30. str[5] = ':';
  31. str[6] = (time[0] >> 4) + '0'; //“秒”
  32. str[7] = (time[0]&0x0F) + '0';
  33. str[8] = '\0';
  34. LcdShowStr(4, 1, str); //显示到液晶的第二行
  35. psec = time[0]; //用当前值更新上次秒数
  36. }
复制代码



我把用到这块的贴全,这个初值是啥含义啊
作者: haiyang201    时间: 2022-8-31 13:45
就是分初值,没什么特殊意义
作者: 山海靓仔    时间: 2022-8-31 14:22
unsigned char psec=0xAA;
意思就是先临时用个数据初始值代替上,后面获取到准确的值就可以更新,就跟大多数电子联网设备一样,一开始联网前日期都是不准的,后面联网就自动校准了。
作者: wulin    时间: 2022-8-31 16:43
wifen 发表于 2022-8-26 15:19
我把用到这块的贴全,这个初值是啥含义啊

就是给psec赋一个不是0~59的任意值psec=0xAA;,但首次读取1302后,秒数存入time[0],if (psec != time[0]) 判断psec != time[0],立即刷新1602显示(1602以秒速更新),避免1602上电瞬间显示错乱时间。
作者: wifen    时间: 2022-10-25 10:44
wulin 发表于 2022-8-31 16:43
就是给psec赋一个不是0~59的任意值psec=0xAA;,但首次读取1302后,秒数存入time[0],if (psec != time[0] ...

明白了,谢谢,就和变量赋初值是一个意思其实。




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