找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2172|回复: 7
打印 上一主题 下一主题
收起左侧

求问一个ds1302时钟芯片的问题

[复制链接]
跳转到指定楼层
楼主
ID:100982 发表于 2022-8-26 11:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看书上的1302的程序,会写这么一行unsigned char psec=0xAA; //秒备份,初值 AA 确保首次读取时间后会刷新显示 不是很明白,这个会和读取的秒时间进行比较,这个的意思是因为是bcd码,初值AA超过了9了,清0的意思吗?


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:123289 发表于 2022-8-26 14:14 | 只看该作者
只个只能表示给个初值。有没有其它意思,结合整个程序及硬件设计就清楚了。
回复

使用道具 举报

板凳
ID:100982 发表于 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. }
复制代码



我把用到这块的贴全,这个初值是啥含义啊
回复

使用道具 举报

地板
ID:1023753 发表于 2022-8-31 13:45 | 只看该作者
就是分初值,没什么特殊意义
回复

使用道具 举报

5#
ID:1043068 发表于 2022-8-31 14:22 | 只看该作者
unsigned char psec=0xAA;
意思就是先临时用个数据初始值代替上,后面获取到准确的值就可以更新,就跟大多数电子联网设备一样,一开始联网前日期都是不准的,后面联网就自动校准了。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:213173 发表于 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上电瞬间显示错乱时间。
回复

使用道具 举报

7#
ID:100982 发表于 2022-10-25 10:44 | 只看该作者
wulin 发表于 2022-8-31 16:43
就是给psec赋一个不是0~59的任意值psec=0xAA;,但首次读取1302后,秒数存入time[0],if (psec != time[0] ...

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表