久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 766|回復: 36
收起左側

單片機DS1302時鐘 求時鐘秒點閃爍思路

  [復制鏈接]
ID:1144680 發表于 2025-6-6 14:05 | 顯示全部樓層 |閱讀模式
DS1302時鐘,如何讓秒點閃爍?不想用定時器,秒點亮時“秒”正好進位。按說可以判斷秒進位,但如何讓它熄滅0.5秒?
回復

使用道具 舉報

ID:1109793 發表于 2025-6-6 15:32 | 顯示全部樓層
不用定時器用循環?
回復

使用道具 舉報

ID:1109793 發表于 2025-6-6 15:41 | 顯示全部樓層
顯示秒的情況下,秒點一直顯示著就行吧。不顯示秒的話,無所謂進位同步了
回復

使用道具 舉報

ID:108361 發表于 2025-6-6 15:59 | 顯示全部樓層
1302有沒有秒中斷輸出?PCF8563是有秒中斷輸出引腳的
回復

使用道具 舉報

ID:69038 發表于 2025-6-6 16:04 | 顯示全部樓層
直接更新顯示秒讀數就行了,何必多浪費2個秒點在那閃啊閃的?
如果沒有顯示秒讀數,開個定時器,差個不多500ms就換個姿態,不就是秒點了?
回復

使用道具 舉報

ID:1133081 發表于 2025-6-6 16:05 | 顯示全部樓層
這個示例里有你想要的秒點閃爍 4位數碼管DS1302單鍵調時時鐘 DS18B20程序 仿真.rar (153.83 KB, 下載次數: 0)
回復

使用道具 舉報

ID:1144680 發表于 2025-6-7 20:14 | 顯示全部樓層
xiaobendan001 發表于 2025-6-6 15:32
不用定時器用循環?

用定時器不能與“秒”準確同步。
回復

使用道具 舉報

ID:1144680 發表于 2025-6-7 20:15 | 顯示全部樓層
powerdruy 發表于 2025-6-6 15:59
1302有沒有秒中斷輸出?PCF8563是有秒中斷輸出引腳的

謝謝提醒,有秒中斷的。沒想起來
回復

使用道具 舉報

ID:1144680 發表于 2025-6-7 20:17 | 顯示全部樓層
zhuls 發表于 2025-6-6 16:04
直接更新顯示秒讀數就行了,何必多浪費2個秒點在那閃啊閃的?
如果沒有顯示秒讀數,開個定時器,差個不多5 ...

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

使用道具 舉報

ID:1144680 發表于 2025-6-7 20:17 | 顯示全部樓層
WL0123 發表于 2025-6-6 16:05
這個示例里有你想要的秒點閃爍

謝謝,好好學習學習。
回復

使用道具 舉報

ID:69038 發表于 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;
復制代碼
回復

使用道具 舉報

ID:88256 發表于 2025-6-7 22:22 | 顯示全部樓層
dcc60 發表于 2025-6-7 20:14
用定時器不能與“秒”準確同步。

你這腦子不行啊,當1302秒中斷時,顯示秒500ms,然后熄滅,這個熄滅不計時,管它是400ms還是700ms,等到下一次秒中斷繼續顯示,你會揪著這一點冒號顯示的誤差嗎?
回復

使用道具 舉報

ID:654797 發表于 2025-6-8 06:02 | 顯示全部樓層
dcc60 發表于 2025-6-7 20:14
用定時器不能與“秒”準確同步。

1302沒有秒輸出,要做到秒同步不太可能吧
回復

使用道具 舉報

ID:584814 發表于 2025-6-8 12:08 | 顯示全部樓層
dcc60 發表于 2025-6-7 20:15
謝謝提醒,有秒中斷的。沒想起來

秒中斷每秒發生一次,還是得結合用系統中斷才能做到半秒亮半秒滅的閃。
回復

使用道具 舉報

ID:584814 發表于 2025-6-8 12:13 | 顯示全部樓層
vscos 發表于 2025-6-8 06:02
1302沒有秒輸出,要做到秒同步不太可能吧

完全精準同步沒必要,畢竟是給肉眼看的。
用1個1MS中斷計數,當秒位數字發生變化時清零,計數大于500時關秒點顯示否則開。
調整這個數值可以調整肉眼的觀看效果,且對系統運行無影響。
在數碼管的兩個秒點可分開控制的,還可以做到上午閃上點下午閃下點。
回復

使用道具 舉報

ID:619259 發表于 2025-6-8 16:17 | 顯示全部樓層
WL0123 發表于 2025-6-6 16:05
這個示例里有你想要的秒點閃爍

你的答案不符合樓主的要求,樓主的秒點閃爍是亮0.5秒,滅0.5秒。你提供的案例是亮1秒,滅1秒。
回復

使用道具 舉報

ID:1144680 發表于 2025-6-8 19:28 | 顯示全部樓層
zhuls 發表于 2025-6-7 21:01
都顯示“23:59:32”了,中間兩組“:”閃不閃有什么意義?
如果是顯示“23:59”,那可以閃的。
開個定 ...

很好的思路。
實驗階段,有6位、有4位的,6位的自然不用閃,4位的要搞一下。之前已經用定時器“閃”了,想更準確一點。
回復

使用道具 舉報

ID:1144680 發表于 2025-6-8 19:29 | 顯示全部樓層
hhdsdy 發表于 2025-6-7 22:22
你這腦子不行啊,當1302秒中斷時,顯示秒500ms,然后熄滅,這個熄滅不計時,管它是400ms還是700ms ...

有道理!!!
回復

使用道具 舉報

ID:1144680 發表于 2025-6-8 19:31 | 顯示全部樓層
vscos 發表于 2025-6-8 06:02
1302沒有秒輸出,要做到秒同步不太可能吧

是這樣的,目前看來只能精確到1秒內亮滅一次,500ms有點困難。
回復

使用道具 舉報

ID:1144680 發表于 2025-6-8 19:33 | 顯示全部樓層
man1234567 發表于 2025-6-8 12:08
秒中斷每秒發生一次,還是得結合用系統中斷才能做到半秒亮半秒滅的閃。

目前用定時器延時大概0.5秒。
回復

使用道具 舉報

ID:1144680 發表于 2025-6-8 19:37 | 顯示全部樓層
man1234567 發表于 2025-6-8 12:13
完全精準同步沒必要,畢竟是給肉眼看的。
用1個1MS中斷計數,當秒位數字發生變化時清零,計數大于500時 ...

目前用定時器作秒閃。
很久以前,秒點是做成上下跳動閃爍的。
回復

使用道具 舉報

ID:1133081 發表于 2025-6-8 20:14 | 顯示全部樓層
cy009 發表于 2025-6-8 16:17
你的答案不符合樓主的要求,樓主的秒點閃爍是亮0.5秒,滅0.5秒。你提供的案例是亮1秒,滅1秒。

是你沒有看懂
回復

使用道具 舉報

ID:69038 發表于 2025-6-8 21:21 | 顯示全部樓層
dcc60 發表于 2025-6-8 19:28
很好的思路。
實驗階段,有6位、有4位的,6位的自然不用閃,4位的要搞一下。之前已經用定時器“閃”了, ...

想要“更準確”,就用測周期的方法:
在系統上電初始化后,先單任務方式測一下前后兩次秒讀數更新之間的計數差,就是完整的1秒內要有多少個計數?然后這個計數再對半開,就是你想要有“更準確”的亮滅秒點的時間,即500ms了 。
回復

使用道具 舉報

ID:619259 發表于 2025-6-9 08:37 | 顯示全部樓層
本帖最后由 cy009 于 2025-6-9 18:45 編輯
同步的問題依然有誤差
回復

使用道具 舉報

ID:332444 發表于 2025-6-9 09:13 | 顯示全部樓層
嚇我一跳,還以為1302真的有秒引腳!如果有秒引腳之前我就寫錯了,冒汗!更新顯示時,可以比較秒值,不同時點亮,并設法半秒熄滅,簡單延時亦可,定時器計數亦可,當然定時器可設法精準。
回復

使用道具 舉報

ID:1144680 發表于 2025-6-9 09:58 | 顯示全部樓層
zhuls 發表于 2025-6-8 21:21
想要“更準確”,就用測周期的方法:
在系統上電初始化后,先單任務方式測一下前后兩次秒讀數更新之間的 ...

想到一塊了。
我的想法是上電后一定時間(等待系統穩定)然后用計數方法取半作為計時器的亮滅值。
回復

使用道具 舉報

ID:76044 發表于 2025-6-9 10:50 | 顯示全部樓層
這個問題我在制作時鐘時也是苦惱過,我處理方式是有二,一是改定時器的參數,改到同步為止,二是60秒讀一次DS1302時間,這樣秒數和閃點是同步的,我現在的制作好的時鐘看著很滿意
回復

使用道具 舉報

ID:996773 發表于 2025-6-9 13:15 | 顯示全部樓層
這個和主程序結構有關系的,我的是這樣設計的,主程序一直在查按鍵,查1302的秒數據是否有變化,
按鍵和秒都沒變化就會往固定的寄存器加1,如果秒和按鍵都沒有變化數據滿200就會滅掉秒點,這個
時間段半秒不到,接下來的半秒多時間就是熄滅狀態,等到1302秒數據變化了就去處理顯示和寄存器
歸零,反正我用的是計數器方法,沒有用中斷和定時這些資源
回復

使用道具 舉報

ID:1144680 發表于 2025-6-9 20:01 | 顯示全部樓層
xianfajushi 發表于 2025-6-9 09:13
嚇我一跳,還以為1302真的有秒引腳!如果有秒引腳之前我就寫錯了,冒汗!更新顯示時,可以比較秒值,不同時 ...

定時器有累積誤差,只能是個大概。
回復

使用道具 舉報

ID:1144680 發表于 2025-6-9 20:03 | 顯示全部樓層
lxm41577 發表于 2025-6-9 10:50
這個問題我在制作時鐘時也是苦惱過,我處理方式是有二,一是改定時器的參數,改到同步為止,二是60秒讀一次 ...

定時器有累積誤差。
60秒讀一次是什么意思?
回復

使用道具 舉報

ID:1144680 發表于 2025-6-9 20:06 | 顯示全部樓層
hi等你 發表于 2025-6-9 13:15
這個和主程序結構有關系的,我的是這樣設計的,主程序一直在查按鍵,查1302的秒數據是否有變化,
按鍵和秒 ...

目前能想到最精確的就是秒變化時“:”亮,然后熄滅大概0.5秒。
回復

使用道具 舉報

ID:619259 發表于 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。
回復

使用道具 舉報

ID:332444 發表于 2025-6-10 10:30 | 顯示全部樓層
dcc60 發表于 2025-6-9 20:01
定時器有累積誤差,只能是個大概。

理解差了,每秒同步是較精準的。
回復

使用道具 舉報

ID:1144680 發表于 2025-6-10 20:50 | 顯示全部樓層
cy009 發表于 2025-6-9 22:04
完美解決秒點同步的問題:
1.定義兩個變量,存儲相鄰兩次讀取秒的值。unsigned char sec_temp1,sec_temp2; ...

抽時間試試。感謝支持。
回復

使用道具 舉報

ID:1144680 發表于 2025-6-10 20:51 | 顯示全部樓層
xianfajushi 發表于 2025-6-10 10:30
理解差了,每秒同步是較精準的。

可否把相關代碼發出來學習學習?
回復

使用道具 舉報

ID:401564 發表于 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 根據秒來進行歸零的代碼,思考一下
回復

使用道具 舉報

ID:1144680 發表于 2025-6-12 10:02 | 顯示全部樓層
Y_G_G 發表于 2025-6-11 13:06
定義一個全局變量,定時器10mS中斷,在中斷中執行 time_sys++;
這個time_sys就是基準時間,根據這個基準時間 ...

謝謝!好好研究研究。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产精品人人爽夜夜爽 | 午夜一级大片 | 婷婷桃色网 | 国产在线精品一区二区三区 | 精品久久久久久18免费网站 | 盗摄精品av一区二区三区 | 精品欧美一区二区三区久久久小说 | 国产91网址| 国产日韩一区二区 | 日本高清中文字幕 | 欧美精品一二区 | 特黄色一级毛片 | 亚洲一区二区日韩 | 久草中文网 | 中文字幕 欧美 日韩 | 亚洲国产成人精品女人久久久 | 九九久久精品 | 天天干天天玩天天操 | 影音先锋欧美资源 | www.国产精 | 天天碰日日操 | 一区二区三区欧美大片 | 午夜视频一区二区 | 欧美在线综合 | 欧美日本韩国一区二区三区 | 精品欧美一区二区三区免费观看 | 国产午夜精品一区二区三区嫩草 | 天天射美女 | 一区二区三区久久久 | 国产精品久久久久久一级毛片 | 99久久精品一区二区毛片吞精 | 99在线资源 | 亚洲精品成人免费 | av官网在线 | 成人性生交a做片 | 一区二区三区四区国产 | 欧美男人天堂 | 自拍视频精品 | 91人人爽| 伊人色综合久久天天五月婷 | 午夜丰满少妇一级毛片 |