標題: 求問一個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 發(fā)表于 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 發(fā)表于 2022-8-31 16:43
就是給psec賦一個不是0~59的任意值psec=0xAA;,但首次讀取1302后,秒數存入time[0],if (psec != time[0] ...

明白了,謝謝,就和變量賦初值是一個意思其實。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1