找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3096|回复: 1
收起左侧

[DIY]测温小夜钟

[复制链接]
ID:73477 发表于 2015-2-10 17:27 | 显示全部楼层 |阅读模式
        这个板子是去年突发奇想想要做的,当时让朋友(东东)帮忙布的线,另一个朋友(老王)给打的样,感激啊!!PCB做好出来激情却没有,结果一直放到今年底,因为东东手上也有这个板,在他的怂恿下,挑了点时间就把这个板子完成了。
        设计这个板子的最初意图是想做个可以晚上看时间的时钟,所以用了数码管显示,并且体积要小巧,所以用了贴片元件,而且用电池供电可以方便放在床头,所以平时又不用显示以免浪费电池电量,因此MCU平时是不工作的,不能采用中断计时的方法,所以在走时上就用了DS1302的专用计时芯片,主要是它比较容易买到并且便宜,而且待机时耗电很小。而仅有温度显示可能就比较浪费了,所以把18B20也加了进来,这是个专业测温元件,最小分辨率可以达到0.0625度。MCU就用了STC的12C54XX系列了,本来想用12C205X系列,结果IO怎么排也不够用,只好花点本钱换成多几根IO的。目前成品用4.2V的可充电锂电池供电,待机时电流约在0.5ma,工作时20ma,按每天查看10次、每次20秒计算,800mah电池约可以工作一个月,基本上满足设计要求,下一步就是要为它找个好外壳了。
        电路图和成品效果图附后。
        硬件结构:STC12C5410+DS1302+18B20+4共阳数码管
        实现功能:时间+测温+自动关机。长按开关键开机显示当前时分,小数点闪动代表秒信号,可以短按功能键切换到温度显示,查询年、月日、星期、分秒。长按功能键进入年、月日、时分设置,星期采用程序自动运算来计算出当前时间是星期几。设置或查询状态时,当无按键达15秒时退出到正常的时间显示状态,在时间显示状态,15秒无按键则自动关机。
        编程思路:5ms中断一次,切换数码管显示,进行动态扫描数码管,并且做一些时间变量的累加,读取DS1302内部时间,转换后在数码管上显示,读取18B20温度值,并进行转换和显示,每0.5秒刷新一次温度值。单按键用长按、短按两种状态进行设置时间,另一按键只做电源开关。
        编程难点:处理好扫描显示、按键读取、18B20读取的关系,18B20的采用单总线方式读取,其时序要求较高,所以既要兼顾温度读取又要兼顾动态扫描等,这里会有点难度。
        心得体会:这次编程采用了全新的思路,和以往有较大的差别,基本上脱离了软件延时的方式,除了18B20的单总线采用软件延时外,其它延时均采用中断方式、状态机来完成。所以这次的程序个人感觉质量相当高,大部分时间主循环都在空转,运行效率非常高,既照顾了动态扫描,又兼顾了按键去抖延时,并实现长短按功能,18B20的读取上也丝毫没有影响,真正做到了动态扫描的结果跟静态显示一样,任何操作均没有产生闪动,和以往倾向于软件延时方式所写出来的程序有质的差异。通过这次程序,也使自己编程水平有一个质的飞跃,眼界更开阔,对C51编程的驾驭能力又再提高到一个层次,这也是自己近年来编程水平的一个最大的突破。
        下一步功能扩展构思:这个MCU有10K的ROM,目前程序只用了1.6K,还有很多空间,另外还有内部EEPROM也没有利用起来,原意是想做成一个可测体温的温度计,并且能保存温度数据在EEPROM里以备翻查,现在又想做个类似“最高温度保持”和“最低温度保持”的功能出来,但是四个数码管能显示的信息量太少了,如何区别这些信息还是个头痛的问题,留待以后慢慢研究。


电路原理图:


焊好的电路板正面图:(右下方4个焊点为ISP编程接口)


板的背面:


显示时分状态:(其中小数点会按秒闪动)


显示温度:(范围是-55°C~+125°C,精度改为0.1度,生活应用足够)






回复

使用道具 举报

ID:86621 发表于 2015-8-7 18:50 | 显示全部楼层
不错值得学习
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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