欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機DS1302時鐘 求時鐘秒點閃爍思路 [打印本頁]

作者: dcc60    時間: 2025-6-6 14:05
標題: 單片機DS1302時鐘 求時鐘秒點閃爍思路
DS1302時鐘,如何讓秒點閃爍?不想用定時器,秒點亮時“秒”正好進位。按說可以判斷秒進位,但如何讓它熄滅0.5秒?
作者: xiaobendan001    時間: 2025-6-6 15:32
不用定時器用循環?
作者: xiaobendan001    時間: 2025-6-6 15:41
顯示秒的情況下,秒點一直顯示著就行吧。不顯示秒的話,無所謂進位同步了
作者: powerdruy    時間: 2025-6-6 15:59
1302有沒有秒中斷輸出?PCF8563是有秒中斷輸出引腳的
作者: zhuls    時間: 2025-6-6 16:04
直接更新顯示秒讀數就行了,何必多浪費2個秒點在那閃啊閃的?
如果沒有顯示秒讀數,開個定時器,差個不多500ms就換個姿態,不就是秒點了?
作者: WL0123    時間: 2025-6-6 16:05
這個示例里有你想要的秒點閃爍 4位數碼管DS1302單鍵調時時鐘 DS18B20程序 仿真.rar (153.83 KB, 下載次數: 0)

作者: dcc60    時間: 2025-6-7 20:14
xiaobendan001 發表于 2025-6-6 15:32
不用定時器用循環?

用定時器不能與“秒”準確同步。
作者: dcc60    時間: 2025-6-7 20:15
powerdruy 發表于 2025-6-6 15:59
1302有沒有秒中斷輸出?PCF8563是有秒中斷輸出引腳的

謝謝提醒,有秒中斷的。沒想起來
作者: dcc60    時間: 2025-6-7 20:17
zhuls 發表于 2025-6-6 16:04
直接更新顯示秒讀數就行了,何必多浪費2個秒點在那閃啊閃的?
如果沒有顯示秒讀數,開個定時器,差個不多5 ...

沒有秒閃,萬一不走了都不知道。
用定時器不能與秒同步。

作者: dcc60    時間: 2025-6-7 20:17
WL0123 發表于 2025-6-6 16:05
這個示例里有你想要的秒點閃爍

謝謝,好好學習學習。
作者: zhuls    時間: 2025-6-7 21:01
dcc60 發表于 2025-6-7 20:17
沒有秒閃,萬一不走了都不知道。
用定時器不能與秒同步。

都顯示“23:59:32”了,中間兩組“:”閃不閃有什么意義?
如果是顯示“23:59”,那可以閃的。
開個定時器計數器會不?
你的定時器開個1ms,計滿500就改變“:”的狀態,不需要太準,前500“;”亮起,500后“;”滅,會不?
同時你肯定還會在大循環中時不時去讀RTC的秒計數,當讀到的秒計數是新內容時,不管這個500ms增量到什么值,直接清0,同時“;”亮起,這樣算不算“同步”?至于500ms后就由它去,多幾10個計數都無所謂,因為是滅了。。當下一個秒讀數更新時,又清0了,重頭來過。。
不完整代碼給你參考:
定時器計數:
  1. //tim0中斷
  2. void tim0_Isr() interrupt 1           //
  3. {
  4.         tms++;    //這個計滿500就滅秒點
復制代碼

更新秒點狀態:
  1. //顯示秒點         
  2.         if (tms<=500)      //上半秒?
  3.         {
  4.          //秒點亮
  5.         }
  6.         else  
  7.         {
  8.           //秒點滅
  9.         }
復制代碼

所謂的同步:
  1.           if(oldsec!=sec) //秒讀數有變
  2.           {
  3.             tms=0;
  4.             oldsec=sec;
復制代碼

作者: hhdsdy    時間: 2025-6-7 22:22
dcc60 發表于 2025-6-7 20:14
用定時器不能與“秒”準確同步。

你這腦子不行啊,當1302秒中斷時,顯示秒500ms,然后熄滅,這個熄滅不計時,管它是400ms還是700ms,等到下一次秒中斷繼續顯示,你會揪著這一點冒號顯示的誤差嗎?
作者: vscos    時間: 2025-6-8 06:02
dcc60 發表于 2025-6-7 20:14
用定時器不能與“秒”準確同步。

1302沒有秒輸出,要做到秒同步不太可能吧
作者: man1234567    時間: 2025-6-8 12:08
dcc60 發表于 2025-6-7 20:15
謝謝提醒,有秒中斷的。沒想起來

秒中斷每秒發生一次,還是得結合用系統中斷才能做到半秒亮半秒滅的閃。
作者: man1234567    時間: 2025-6-8 12:13
vscos 發表于 2025-6-8 06:02
1302沒有秒輸出,要做到秒同步不太可能吧

完全精準同步沒必要,畢竟是給肉眼看的。
用1個1MS中斷計數,當秒位數字發生變化時清零,計數大于500時關秒點顯示否則開。
調整這個數值可以調整肉眼的觀看效果,且對系統運行無影響。
在數碼管的兩個秒點可分開控制的,還可以做到上午閃上點下午閃下點。
作者: cy009    時間: 2025-6-8 16:17
WL0123 發表于 2025-6-6 16:05
這個示例里有你想要的秒點閃爍

你的答案不符合樓主的要求,樓主的秒點閃爍是亮0.5秒,滅0.5秒。你提供的案例是亮1秒,滅1秒。
作者: dcc60    時間: 2025-6-8 19:28
zhuls 發表于 2025-6-7 21:01
都顯示“23:59:32”了,中間兩組“:”閃不閃有什么意義?
如果是顯示“23:59”,那可以閃的。
開個定 ...

很好的思路。
實驗階段,有6位、有4位的,6位的自然不用閃,4位的要搞一下。之前已經用定時器“閃”了,想更準確一點。
作者: dcc60    時間: 2025-6-8 19:29
hhdsdy 發表于 2025-6-7 22:22
你這腦子不行啊,當1302秒中斷時,顯示秒500ms,然后熄滅,這個熄滅不計時,管它是400ms還是700ms ...

有道理!!!
作者: dcc60    時間: 2025-6-8 19:31
vscos 發表于 2025-6-8 06:02
1302沒有秒輸出,要做到秒同步不太可能吧

是這樣的,目前看來只能精確到1秒內亮滅一次,500ms有點困難。
作者: dcc60    時間: 2025-6-8 19:33
man1234567 發表于 2025-6-8 12:08
秒中斷每秒發生一次,還是得結合用系統中斷才能做到半秒亮半秒滅的閃。

目前用定時器延時大概0.5秒。
作者: dcc60    時間: 2025-6-8 19:37
man1234567 發表于 2025-6-8 12:13
完全精準同步沒必要,畢竟是給肉眼看的。
用1個1MS中斷計數,當秒位數字發生變化時清零,計數大于500時 ...

目前用定時器作秒閃。
很久以前,秒點是做成上下跳動閃爍的。
作者: WL0123    時間: 2025-6-8 20:14
cy009 發表于 2025-6-8 16:17
你的答案不符合樓主的要求,樓主的秒點閃爍是亮0.5秒,滅0.5秒。你提供的案例是亮1秒,滅1秒。

是你沒有看懂
作者: zhuls    時間: 2025-6-8 21:21
dcc60 發表于 2025-6-8 19:28
很好的思路。
實驗階段,有6位、有4位的,6位的自然不用閃,4位的要搞一下。之前已經用定時器“閃”了, ...

想要“更準確”,就用測周期的方法:
在系統上電初始化后,先單任務方式測一下前后兩次秒讀數更新之間的計數差,就是完整的1秒內要有多少個計數?然后這個計數再對半開,就是你想要有“更準確”的亮滅秒點的時間,即500ms了 。
作者: cy009    時間: 2025-6-9 08:37
本帖最后由 cy009 于 2025-6-9 18:45 編輯
WL0123 發表于 2025-6-8 20:14
是你沒有看懂
同步的問題依然有誤差
作者: xianfajushi    時間: 2025-6-9 09:13
嚇我一跳,還以為1302真的有秒引腳!如果有秒引腳之前我就寫錯了,冒汗!更新顯示時,可以比較秒值,不同時點亮,并設法半秒熄滅,簡單延時亦可,定時器計數亦可,當然定時器可設法精準。
作者: dcc60    時間: 2025-6-9 09:58
zhuls 發表于 2025-6-8 21:21
想要“更準確”,就用測周期的方法:
在系統上電初始化后,先單任務方式測一下前后兩次秒讀數更新之間的 ...

想到一塊了。
我的想法是上電后一定時間(等待系統穩定)然后用計數方法取半作為計時器的亮滅值。
作者: lxm41577    時間: 2025-6-9 10:50
這個問題我在制作時鐘時也是苦惱過,我處理方式是有二,一是改定時器的參數,改到同步為止,二是60秒讀一次DS1302時間,這樣秒數和閃點是同步的,我現在的制作好的時鐘看著很滿意
作者: hi等你    時間: 2025-6-9 13:15
這個和主程序結構有關系的,我的是這樣設計的,主程序一直在查按鍵,查1302的秒數據是否有變化,
按鍵和秒都沒變化就會往固定的寄存器加1,如果秒和按鍵都沒有變化數據滿200就會滅掉秒點,這個
時間段半秒不到,接下來的半秒多時間就是熄滅狀態,等到1302秒數據變化了就去處理顯示和寄存器
歸零,反正我用的是計數器方法,沒有用中斷和定時這些資源
作者: dcc60    時間: 2025-6-9 20:01
xianfajushi 發表于 2025-6-9 09:13
嚇我一跳,還以為1302真的有秒引腳!如果有秒引腳之前我就寫錯了,冒汗!更新顯示時,可以比較秒值,不同時 ...

定時器有累積誤差,只能是個大概。
作者: dcc60    時間: 2025-6-9 20:03
lxm41577 發表于 2025-6-9 10:50
這個問題我在制作時鐘時也是苦惱過,我處理方式是有二,一是改定時器的參數,改到同步為止,二是60秒讀一次 ...

定時器有累積誤差。
60秒讀一次是什么意思?
作者: dcc60    時間: 2025-6-9 20:06
hi等你 發表于 2025-6-9 13:15
這個和主程序結構有關系的,我的是這樣設計的,主程序一直在查按鍵,查1302的秒數據是否有變化,
按鍵和秒 ...

目前能想到最精確的就是秒變化時“:”亮,然后熄滅大概0.5秒。
作者: cy009    時間: 2025-6-9 22:04
完美解決秒點同步的問題:
1.定義兩個變量,存儲相鄰兩次讀取秒的值。unsigned char sec_temp1,sec_temp2;
2.定義定時器計數變量。unsigned int cnt;
3.定時器定時5ms,計數200次即1秒,取一半值(0.5秒)顯示秒點,另一半不顯示。
4.秒點同步:判斷相鄰兩次讀取秒的值,若不相等即為秒有進位,執行cnt=0。
作者: xianfajushi    時間: 2025-6-10 10:30
dcc60 發表于 2025-6-9 20:01
定時器有累積誤差,只能是個大概。

理解差了,每秒同步是較精準的。
作者: dcc60    時間: 2025-6-10 20:50
cy009 發表于 2025-6-9 22:04
完美解決秒點同步的問題:
1.定義兩個變量,存儲相鄰兩次讀取秒的值。unsigned char sec_temp1,sec_temp2; ...

抽時間試試。感謝支持。
作者: dcc60    時間: 2025-6-10 20:51
xianfajushi 發表于 2025-6-10 10:30
理解差了,每秒同步是較精準的。

可否把相關代碼發出來學習學習?
作者: Y_G_G    時間: 2025-6-11 13:06
定義一個全局變量,定時器10mS中斷,在中斷中執行 time_sys++;
這個time_sys就是基準時間,根據這個基準時間來讀取DS1302,閃燈操作,這樣的話,整體閃燈和秒時間有10mS的誤差,但這種影響可以忽略不計的例如
   void read_time(void)     
{
       static u8 ren  = 0;
        if(ren == time_sys) return;
        ren = time_sys;

       讀取一次DS1302秒時間,這個秒時間可以是返回值,也可以是全局變量
}

閃燈程序
   void led_mode(void)     
{
       static u8 ren  = 0;
        if(ren != time_sys)
       {
          ren = time_sys;

         flash_crc = (flash_crc + 1) % 100;
         if(flash_crc < 50)
               {
                 亮燈;
               }
              eles
                  {
                     滅燈;
                  }
       }
}


你自己再寫一個flash_crc 根據秒來進行歸零的代碼,思考一下

作者: dcc60    時間: 2025-6-12 10:02
Y_G_G 發表于 2025-6-11 13:06
定義一個全局變量,定時器10mS中斷,在中斷中執行 time_sys++;
這個time_sys就是基準時間,根據這個基準時間 ...

謝謝!好好研究研究。




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