时钟太常见了,是生活中极其普通的物品之一,我们只需瞧一下钟,就能说出韶光,而且我们也把这算作是很自然的事情。功能完善的时钟可以计韶光(Clock)和日期(Calendar),即年、月、星期、日、时、分和秒的实时参数。时钟有很多种,按照不同的分类标准可以分为不同的类型,对付按照仿照数字量分为传统的仿照时钟和数字时钟,这里紧张剖析一下数字时钟。
数字时钟可以由模块化的时钟电路实现,可以由数字门电路+时钟发生电路实现,也可以由掌握器(单片机)+定时器实现,还可以由掌握器+RTC芯片实现等,实在这里也不用“等”了,由于彷佛没有其他方法了。你可能会说从网高下载一个时钟软件不也是嘛,哈哈,见告你吧,实在这样的软件用的时钟旗子暗记是你打算机主板上的RTC芯片时钟或者集成在某个大规模集成电路内部的RTC模块供应的。
RTC即为实时时钟,它是可供应韶光(常日也供应日期)的时钟器件。RTC常日包含一个可长期供电的电池,纵然在没有电源供电的情形下也可以保持韶光的跟踪。

有很多著名厂商和很多著名的RTC芯片,玩单片机的该当没有不知道DS1302、DS12887和PCF8523等芯片的;RTC著名厂商有很多,比如Maxim(美信〈达拉斯半导体〉)、NXP(恩智浦)、Intersil(英特矽尔)等。笔者曾经利用过美信的DS3231用作智能电表的时钟计量,调过英特矽尔的ISL12022M,DS3231和ISL12022M,它们都集成了晶体振荡器,精度极高,且外围电路十分大略,基本无需外围元器件,实在DS3231和ISL12022M的功能也很相似、性能也差不多。恩智浦的RTC芯片有很多款,比如本文要先容的ELEJ-CDC1,利用的是PCF8523。PCF8523性能很不错,利用的是I2C总线与掌握器连接,且是高速I2C总线(Fm+),可以达到1MHz,在某些实时性哀求极高的系统中非常适用。常见的PCF8523有SO8和TSSOP14封装,TSSOP14引脚间距较小,引脚排列很密,不随意马虎焊接,大家可以选择SO8封装的,随意马虎焊接。
制作实时时钟非常有趣,可以同时学会很多与界面显示干系的技能、掌握器接口技能、数字处理技能和按键功能实现技能等,对付各种智能家用电器的显示界面设计有参考意义,例如冰箱、洗衣机、电磁炉等的显示界面。关于实时数字显示器件的选择,可以是LED、数码管、点阵屏、LCD等,实际学习可以逐个调试节制、真正搞懂,然后独立开拓基于掌握器的项目就不成问题了。(不骗你,真的!)
现在,我们就一起开始制作吧!
ELEJ-CDC1硬件事理ELEJ-CDC1由6个模块电路构成:电源电路、掌握器电路、RTC电路、数码管电路、蜂鸣器电路和按键电路,个中电源电路、数码管电路、蜂鸣器电路和按键电路与ELEJ-IDBC1智能数字电池充电器设计中的电路设计方法和电路事理一样,只是数码管在实际的排列时有所不同,而且数码管选用的是1位的8段式数码管。
下面紧张先容掌握器电路、RTC电路和分外处理的数码管电路。
为了大家的制作方便,这个制作仍旧利用STC的51掌握器,ELEJ-CDC1利用的掌握器型号为STC15F204EA,用DIP-20封装,电路连接如图1.1所示。STC15F204EA内部高精度R/C时钟,常温下温漂5‰,时钟从5~35MHz可选,这样我们就无需再外置晶体振荡器了。实际焊接在“洞洞板”上如图1.2所示。
RTC芯片用NXP的PCF8523时钟芯片,PCF8523电路图如图1.3所示。
图1.3中电阻R11、R16和R17是上拉电阻,由于PCF8523的INT2、INT1/CLKOUT引脚都是开漏输出,以是必须上拉,此外,SDA和SCL也必须上拉。仔细看看图1.3,你会创造在+5V电源和PCF8523的VDD之间接了VD5、R15和C6,有什么用,不接可以吗?很多时钟芯片都不接的呀!说说缘故原由吧:仔细阅读PCF8523数据手册的范例运用一节,你会创造它供应的范例运用电路连接有R15和C6,它俩的浸染是限定VDD的压摆率,如果VDD低落得过快,就不能确保内部电路可靠切换到备用电池供电;二极管VD5是为了防止电源反接烧坏PCF8523TS,PCF8523TS不便宜啊,烧的是钱呢!
注 :电压转换速率(Slew Rate),简写为SR,简称压摆率,其定义是在1μs或者1ns的韶光里电压升高的幅度,直不雅观上讲便是方波电压由波谷升到波峰所需韶光,单位常日有V/s、V/ms、V/μs和V/ns四种。电压转换速率用示波器就可以丈量。
我利用的是TSSOP14封装的,由于芯片引脚很密,以是我堕落了一块转接板,实物如图1.4所示。把稳:在制作中你可以利用SO8封装的,无转接板也可以焊接。
图1.1 掌握器电路
图1.2 掌握器实物图
图1.3 PCF8523电路图
图1.4 PCF8523堕落板
图1.5 PCF8523堕落板焊接实物
焊接上芯片,通电蓝色LED点亮,如图1.5所示。
数码管电路如图1.6所示。实在仔细看看事理图,和常日利用的电路没有任何差异,实在便是驱动电路的设计。
图1.6 数码管电路图
与常日利用不同的是数码管的放置办法。如何实现显示功能,以下详细解释一下。
对付动态扫描显示技能,险些每本书、每个资料都会说“动态显示是多个数码管交替显示,利用人的视觉暂留浸染,使人看到多个数码管同时显示。在编程时,须要输出段选和位选旗子暗记,位选旗子暗记选中个中一个数码管,然后输出段码,使该数码管显示所须要的内容,延时一段韶光后,再选中另一个数码管,再输出对应的段码,高速交替。”如果你是初学者,肯定感到有点迷惑!
那我就用图来解释一下吧!动态扫描最根本的事理如图1.7所示。
图1.7 数码管动态扫描事理
4个数码管轮流显示一遍为一个周期T,即4个显示ton之和,且由于每个显示韶光一样,也即T=4×ton,在软件实现手段上,我用的是定时器中断,这样便于main函数处理多个任务。利用的数码管为共阳极的,以是ton韶光数码管的位引脚为低电平(以数码管DS1为例:当LED_COM1=0,三极管导通,DS1选通,此时如果有段码数据加到A-H引脚,则DS1显示),即数码管显示,数码管会按照300μs的韶光轮流循环显示,即:数码管1→数码管2→数码管3→数码管4→数码管1……无限循环往来来往,由于“数码管1→数码管2→数码管3→数码管4”仅须要1200μs,即扫描频率833Hz,我们眼睛是分辨不出它们是在逐个显示的,我们可以看到的是每个数码管都完全显示。如果,你想仔细看看所谓的“扫描”是啥,你可以把T选得大一些,对应的ton=T/4也大些,那样你就会看到数码管逐个显示,显示的界面会让你觉得很不舒畅(一个接一个地闪烁显示)。
图1.8 ELEJ-CDC1数码管实物
图1.9 ELEJ-CDC1整机焊接面实物图
总结一下:我们调试数码管,说白了便是调试T(根据实际调试数据ton≈1ms时,显示效果也很不错,当然是越小越好了;扫描的速率足够快,给人的印象便是一组稳定的显示数据,不会有闪烁感),此外还要把稳以下两个问题。
(1)所谓的“消隐”问题,当你更新显示的“段”的时候,显示的位置还是在前一韶光的“位”上;然后你再更新“位”,这就涌现移动的效果了。办理方法:显示下一位时先让数码管熄灭;在位的数码显示前,先关闭一下数码管,这样方可肃清拖尾征象。
(2)驱动要足够,例如,我在利用数码管时均利用了三极管驱动,只管STC掌握器I/O口可以配置为推挽输出,但是为了便于硬件移植,即51掌握器通用,还是加了驱动,在实际制作调试时,你也可以选择用STC掌握器直接驱动。
ELEJ-CDC1创意数字时钟数码管实物如图1.8所示,焊接面如图1.9所示。
软件设计思路这里我直接用笔墨阐述:在没有任何故为“干预”ELEJ-CDC1的情形下,ELEJ-CDC1从用户接通电源起,事情步骤(也便是软件实行过程)为掌握器初始化、某些系统参数初始化→配置PCF8523、获取RTC数据(通过I2C接口读取)→处理RTC数据,处理结果暂时存储在掌握器缓存中→通过定时器中断技能使掌握器缓存中的RTC数据显示在数码管上→再读取新的RTC数据,处理数据,实时显示……就这样只要用户不断电,ELEJ-CDC1就会“不知疲倦”地重复实时显示RTC的实时数据。
然而,RTC芯片内部的数据在上电时,一样平常不会是当前的韶光,怎么办呢?一样平常人都知道重新校定时光。实在,从PCF8523角度来看,便是重新向PCF8523内部时钟寄存器内写入数据,覆盖掉原始的不是当前韶光的数据,然后PCF8523就重新的韶光数据开始计时(时钟源便是那个32768Hz的晶体振荡器)。这样,自然就须要一个校时程序,而且这个校时程序块不是一贯运行,只有用户须要时才启动,以是就须要一个开关。开关?你可能会惊异:软件里面哪里有开关呢?此时,如果你仔细想一想数字电路,是不是想起了0和1,便是啊,这个开关就用一个Bit变量实现,比如,变量为1时启动校时程序块,为0时运行时钟。记住一点,校时程序块和正常走时程序块在同一韶光绝不可能同时运行!
至于闹钟,也很大略,每读取一次RTC数据显示,程序就判断一次此时的韶光和用户设定的闹钟韶光是否一样,如果一样,那就“闹”吧!闹多久?程序开拓者自行设置,如果开拓者乐意,乃至可以让用户自行配置;如果你既是开拓者又是用户,那我就不说啥了,随你的心情,随意配置吧!
读到这里,你是不是觉得ELEJ-CDC1总体脉络很清晰了呢!如果真的存心说是,那就好,你肯定可以独立调试ELEJ-CDC1了,而且,你还可以学习很多工程设计调试的方法。再说得锐利些:如果你仅仅是为了做一个ELEJ-CDC1,完备或者基本没有什么浓厚实物兴趣使令你,你可能在调试时非常痛楚,乃至不能让ELEJ-CDC1正常运行。比如,你在调试ELEJ-CDC1时,你会彻彻底底地明白什么是数码管动态显示,为什么动态显示要用定时器中断,为什么不直接用延时扫描的方法,数码管不同界面切换方法,I2C驱动如何写(后续我会仔细说),乃至蜂鸣器振荡频率如何选择……总之,我们喜好电,我们可以在兴趣中提高能力和踏实节制办理实际工程问题的方法。哇!说多了,不过这样的兴趣便是动力,可以很随意地步行10多里路去二手电子市场(偷笑)。
图1.10 “AL:--”界面
图1.11 “AL:on”界面
图1.12 “12Hr”和“24Hr”界面
图1.13 韶光显示界面
图1.14 日期显示界面
图1.15 星期显示界面
看几张数码管的界面图片吧!如图1.10~1.15所示。
好吧,这个版本的ELEJ-CDC1制作就先容到这里吧,实在如果想再加其他功能,真的有点难,由于4K字节ROM空间的STC15F204EA放不下了,我就碰着此尴尬,不然ELEJ-CDC1末了一位本来打算用作“℃”显示的数码管就不会没用上,我的代码中,数码管段码就没有全部放在code内,否则连闹钟功能也没了。反正我们往后会让ELEJ-CDC1升级的!
干系源程序可以到qq群657864614进行下载!
新店开张,为了提升人气,即日起将开启前所未有的优惠力度,相称于免费送了!
商品限购,先买先得!
所有商品均可以无情由退换,请放心购买!
一个属于电子工程师的专属淘宝店,总有一款适宜你:首页-电子工程师小李-淘宝网