打印
[51单片机]

从业将近十年!手把手教你单片机程序框架(连载)

[复制链接]
楼主: jianhong_wu
手机看帖
扫描二维码
随时随地手机跟帖
661
闲时再看

使用特权

评论回复
662
jianhong_wu|  楼主 | 2015-1-4 11:31 | 只看该作者
第八十九节:用单片机内部定时器做一个时钟。
开场白:
很多网友建议,为了方便初学者学习编程思路,我应该用单片机定时器做一个时钟程序供大家参考学习。其实我前面第48节就已经用ds1302做了一个可以显示和更高时间的时钟,这一节只要在第48节的源代码基础上,大的框架不用动,只需要把ds1302产生的时间改成用定时中断产生的时间就可以了,改动的地方非常小。但是为了让时间的精度更高,最后必须跟标准时间进行校验,来修正系统中一秒钟需要多个定时中断的误差,这个误差决定了系统的时间精度,其实这个校验方法我在前面很多章节上跟大家介绍过了:
    第一步:在程序代码上先写入1秒钟大概需要200个定时中断。
    第二步:把程序烧录进单片机后,上电开始测试,手上同步打开手机里的秒表,当手机的标准时间跑了780(这个标准时间跑得越长校验精度越高),而此时单片机仅仅跑了1632秒。那么最终得出1秒钟需要的定时中断次数是:const_time_1s=(200*1632)/780=418
第三步:如果发现时钟还是不太准,可以继续返回第一步根据最新1秒钟的时间是418次,多校验几次,来不断调整const_time_1s的数值,直到找到相对精度的时间为止。
本系统仅供学习,精度不可能做得很好,因为影响时间精度的因素还有定时中断的重装值,定时中断里面的代码尽量少,以及晶振等不好控制的因素。所以鸿哥一直不推荐在实际项目中用单片机的内部定时器做实时时钟,因为精度有限。真正想要准确的时钟时间,还是强烈建议大家用外部专用的时钟芯片或者用CPLD/FPGA来做。
    具体内容,请看源代码讲解。
1 硬件平台.
    基于朱兆祺51单片机学习板。
2)实现功能:
     本程序有2两个窗口。
     1个窗口显示日期。显示格式“年--日”。注意中间有“-”分开。
     2个窗口显示时间。显示格式“时 分 秒”。注意中间没“-”,只有空格分开。
     系统上电后,默认显示第2个窗口,实时显示动态的“时 分 秒”时间。此时按下S13按键不松手就会切换到显示日期的第1个窗口。松手后自动切换回第2个显示动态时间的窗口。
     需要更改时间的时候,长按S9按键不松手超过3秒后,系统将进入修改时间的状态,切换到第1个日期窗口,并且显示“年”的两位数码管会闪烁,此时可以按S1或者S5加减按键修改年的参数,修改完年后,继续短按S9按键,会切换到“月”的参数闪烁状态,只要依次不断按下S9按键,就会依次切换年,月,日,时,分,秒的参数闪烁状态,最后修改完秒的参数后,系统会自动把我们修改设置的日期时间一次性更改到定时中断函数内部的时间变量,达到修改日期时间的目的。
S13是电平变化按键,用来切换窗口的,专门用来查看当前日期。按下S13按键时显示日期窗口,松手后返回到显示实时时间的窗口。
[size=10.5000pt](3)源代码讲解如下:
第八十九节源代码讲解.rar (7.42 KB)
总结陈词:
任何一个电子产品在投入生产的时候都要考虑到生产的测试,朱兆祺51单片机学习板在生产加工后也一样要进行测试。那么这个测试的程序如何能够做到快速,全面,易用这三个要求呢?欲知详情,请听下回分解-----生产朱兆祺51学习板的从机自检测试程序源代码.
(未完待续,下节更精彩,不要走开哦)

使用特权

评论回复
663
register_x| | 2015-1-5 17:41 | 只看该作者
顶一个,楼主辛苦了

使用特权

评论回复
664
蛊惑狼| | 2015-1-10 14:31 | 只看该作者
留名

使用特权

评论回复
665
AOP| | 2015-1-10 21:10 | 只看该作者
非常感谢您无私的分享,看了您的教程受益匪浅.希望您能够把这些经验整理成册再加上详细的范例后出版成书,我会第一个购买.

使用特权

评论回复
666
我是小草| | 2015-1-10 22:02 | 只看该作者
ding

使用特权

评论回复
667
solarddd| | 2015-1-12 13:05 | 只看该作者
期待..........

使用特权

评论回复
668
luochangqing112| | 2015-1-12 22:17 | 只看该作者
持续关注中

使用特权

评论回复
669
大黄鸭| | 2015-1-18 22:36 | 只看该作者
让我这个刚入门的打开眼界

使用特权

评论回复
670
59387033| | 2015-1-20 13:09 | 只看该作者
标记一下

使用特权

评论回复
671
ALISWANG| | 2015-1-21 08:53 | 只看该作者
MARK!

使用特权

评论回复
672
njtfl| | 2015-1-22 16:43 | 只看该作者
又看了一些

使用特权

评论回复
673
ys19702| | 2015-1-23 09:16 | 只看该作者
看了半个月终于看完了,赞!!!!!!!!!!!!谢谢楼主分享。受益匪浅

使用特权

评论回复
674
379109964| | 2015-1-23 15:34 | 只看该作者
我是做led电源的,以后led会向智能方向发展,所以来学习单片机,lZ的程序对初学者很强大,关键是连理性好,但是看了下来感觉好难,头大了,不过还是顶,谢谢无私奉献,实战出来的更有价值。

使用特权

评论回复
675
LZR13179| | 2015-2-5 09:07 | 只看该作者
标记

使用特权

评论回复
676
pguangchun| | 2015-2-6 11:38 | 只看该作者
很不错啊

使用特权

评论回复
677
sheldon0920| | 2015-2-8 13:48 | 只看该作者
好贴,正从头开始看

使用特权

评论回复
678
sheldon0920| | 2015-2-8 23:01 | 只看该作者
jianhong_wu 发表于 2014-3-6 10:10
我没有明目张胆地推广我的方案公司,我也没必要去推广我的方案公司,因为我不缺项目,我在深圳的圈子里, ...

真正在看帖的人,没人在意那些所谓的广告。lz知道菜鸟们最需要什么,最应该学习什么。
像lz这样的帖子,真是太少了,像llz这样的热心肠的人,也少。
真心赞一个!!!!

使用特权

评论回复
679
哎吆我去| | 2015-2-11 22:32 | 只看该作者
撸主好人,这种分享精神也需要我们学习

使用特权

评论回复
680
smell-baby| | 2015-2-27 10:02 | 只看该作者
标记

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则