找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机DS1302时钟 求时钟秒点闪烁思路

  [复制链接]
跳转到指定楼层
楼主
ID:1144680 发表于 2025-6-6 14:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DS1302时钟,如何让秒点闪烁?不想用定时器,秒点亮时“秒”正好进位。按说可以判断秒进位,但如何让它熄灭0.5秒?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1109793 发表于 2025-6-6 15:32 | 只看该作者
不用定时器用循环?
回复

使用道具 举报

板凳
ID:1109793 发表于 2025-6-6 15:41 | 只看该作者
显示秒的情况下,秒点一直显示着就行吧。不显示秒的话,无所谓进位同步了
回复

使用道具 举报

地板
ID:108361 发表于 2025-6-6 15:59 | 只看该作者
1302有没有秒中断输出?PCF8563是有秒中断输出引脚的
回复

使用道具 举报

5#
ID:69038 发表于 2025-6-6 16:04 | 只看该作者
直接更新显示秒读数就行了,何必多浪费2个秒点在那闪啊闪的?
如果没有显示秒读数,开个定时器,差个不多500ms就换个姿态,不就是秒点了?
回复

使用道具 举报

6#
ID:1133081 发表于 2025-6-6 16:05 | 只看该作者
这个示例里有你想要的秒点闪烁 4位数码管DS1302单键调时时钟 DS18B20程序 仿真.rar (153.83 KB, 下载次数: 0)
回复

使用道具 举报

7#
ID:1144680 发表于 2025-6-7 20:14 | 只看该作者
xiaobendan001 发表于 2025-6-6 15:32
不用定时器用循环?

用定时器不能与“秒”准确同步。
回复

使用道具 举报

8#
ID:1144680 发表于 2025-6-7 20:15 | 只看该作者
powerdruy 发表于 2025-6-6 15:59
1302有没有秒中断输出?PCF8563是有秒中断输出引脚的

谢谢提醒,有秒中断的。没想起来
回复

使用道具 举报

9#
ID:1144680 发表于 2025-6-7 20:17 | 只看该作者
zhuls 发表于 2025-6-6 16:04
直接更新显示秒读数就行了,何必多浪费2个秒点在那闪啊闪的?
如果没有显示秒读数,开个定时器,差个不多5 ...

没有秒闪,万一不走了都不知道。
用定时器不能与秒同步。
回复

使用道具 举报

10#
ID:1144680 发表于 2025-6-7 20:17 | 只看该作者
WL0123 发表于 2025-6-6 16:05
这个示例里有你想要的秒点闪烁

谢谢,好好学习学习。
回复

使用道具 举报

11#
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;
复制代码
回复

使用道具 举报

12#
ID:88256 发表于 2025-6-7 22:22 | 只看该作者
dcc60 发表于 2025-6-7 20:14
用定时器不能与“秒”准确同步。

你这脑子不行啊,当1302秒中断时,显示秒500ms,然后熄灭,这个熄灭不计时,管它是400ms还是700ms,等到下一次秒中断继续显示,你会揪着这一点冒号显示的误差吗?
回复

使用道具 举报

13#
ID:654797 发表于 2025-6-8 06:02 | 只看该作者
dcc60 发表于 2025-6-7 20:14
用定时器不能与“秒”准确同步。

1302没有秒输出,要做到秒同步不太可能吧
回复

使用道具 举报

14#
ID:584814 发表于 2025-6-8 12:08 | 只看该作者
dcc60 发表于 2025-6-7 20:15
谢谢提醒,有秒中断的。没想起来

秒中断每秒发生一次,还是得结合用系统中断才能做到半秒亮半秒灭的闪。
回复

使用道具 举报

15#
ID:584814 发表于 2025-6-8 12:13 | 只看该作者
vscos 发表于 2025-6-8 06:02
1302没有秒输出,要做到秒同步不太可能吧

完全精准同步没必要,毕竟是给肉眼看的。
用1个1MS中断计数,当秒位数字发生变化时清零,计数大于500时关秒点显示否则开。
调整这个数值可以调整肉眼的观看效果,且对系统运行无影响。
在数码管的两个秒点可分开控制的,还可以做到上午闪上点下午闪下点。
回复

使用道具 举报

16#
ID:619259 发表于 2025-6-8 16:17 | 只看该作者
WL0123 发表于 2025-6-6 16:05
这个示例里有你想要的秒点闪烁

你的答案不符合楼主的要求,楼主的秒点闪烁是亮0.5秒,灭0.5秒。你提供的案例是亮1秒,灭1秒。
回复

使用道具 举报

17#
ID:1144680 发表于 2025-6-8 19:28 | 只看该作者
zhuls 发表于 2025-6-7 21:01
都显示“23:59:32”了,中间两组“:”闪不闪有什么意义?
如果是显示“23:59”,那可以闪的。
开个定 ...

很好的思路。
实验阶段,有6位、有4位的,6位的自然不用闪,4位的要搞一下。之前已经用定时器“闪”了,想更准确一点。
回复

使用道具 举报

18#
ID:1144680 发表于 2025-6-8 19:29 | 只看该作者
hhdsdy 发表于 2025-6-7 22:22
你这脑子不行啊,当1302秒中断时,显示秒500ms,然后熄灭,这个熄灭不计时,管它是400ms还是700ms ...

有道理!!!
回复

使用道具 举报

19#
ID:1144680 发表于 2025-6-8 19:31 | 只看该作者
vscos 发表于 2025-6-8 06:02
1302没有秒输出,要做到秒同步不太可能吧

是这样的,目前看来只能精确到1秒内亮灭一次,500ms有点困难。
回复

使用道具 举报

20#
ID:1144680 发表于 2025-6-8 19:33 | 只看该作者
man1234567 发表于 2025-6-8 12:08
秒中断每秒发生一次,还是得结合用系统中断才能做到半秒亮半秒灭的闪。

目前用定时器延时大概0.5秒。
回复

使用道具 举报

21#
ID:1144680 发表于 2025-6-8 19:37 | 只看该作者
man1234567 发表于 2025-6-8 12:13
完全精准同步没必要,毕竟是给肉眼看的。
用1个1MS中断计数,当秒位数字发生变化时清零,计数大于500时 ...

目前用定时器作秒闪。
很久以前,秒点是做成上下跳动闪烁的。
回复

使用道具 举报

22#
ID:1133081 发表于 2025-6-8 20:14 | 只看该作者
cy009 发表于 2025-6-8 16:17
你的答案不符合楼主的要求,楼主的秒点闪烁是亮0.5秒,灭0.5秒。你提供的案例是亮1秒,灭1秒。

是你没有看懂
回复

使用道具 举报

23#
ID:69038 发表于 2025-6-8 21:21 | 只看该作者
dcc60 发表于 2025-6-8 19:28
很好的思路。
实验阶段,有6位、有4位的,6位的自然不用闪,4位的要搞一下。之前已经用定时器“闪”了, ...

想要“更准确”,就用测周期的方法:
在系统上电初始化后,先单任务方式测一下前后两次秒读数更新之间的计数差,就是完整的1秒内要有多少个计数?然后这个计数再对半开,就是你想要有“更准确”的亮灭秒点的时间,即500ms了 。
回复

使用道具 举报

24#
ID:332444 发表于 2025-6-9 09:13 | 只看该作者
吓我一跳,还以为1302真的有秒引脚!如果有秒引脚之前我就写错了,冒汗!更新显示时,可以比较秒值,不同时点亮,并设法半秒熄灭,简单延时亦可,定时器计数亦可,当然定时器可设法精准。
回复

使用道具 举报

25#
ID:1144680 发表于 2025-6-9 09:58 | 只看该作者
zhuls 发表于 2025-6-8 21:21
想要“更准确”,就用测周期的方法:
在系统上电初始化后,先单任务方式测一下前后两次秒读数更新之间的 ...

想到一块了。
我的想法是上电后一定时间(等待系统稳定)然后用计数方法取半作为计时器的亮灭值。
回复

使用道具 举报

26#
ID:76044 发表于 2025-6-9 10:50 | 只看该作者
这个问题我在制作时钟时也是苦恼过,我处理方式是有二,一是改定时器的参数,改到同步为止,二是60秒读一次DS1302时间,这样秒数和闪点是同步的,我现在的制作好的时钟看着很满意
回复

使用道具 举报

27#
ID:996773 发表于 2025-6-9 13:15 | 只看该作者
这个和主程序结构有关系的,我的是这样设计的,主程序一直在查按键,查1302的秒数据是否有变化,
按键和秒都没变化就会往固定的寄存器加1,如果秒和按键都没有变化数据满200就会灭掉秒点,这个
时间段半秒不到,接下来的半秒多时间就是熄灭状态,等到1302秒数据变化了就去处理显示和寄存器
归零,反正我用的是计数器方法,没有用中断和定时这些资源
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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