来源:阿莫论坛,作者:humancn
微信公众号:芯片之家(ID:chiphome-dy)
公众号不少粉丝,大一大二做的第一个项目,都是电子时钟吧,非常经典的STC89C52+DS1302+数码管组合,带我们跨入了电子的世界,今天介绍一个小项目,一款漂亮的时钟,包含菜单等程序,大家可以可以看看,回忆下大学的生活。
这款电子钟,不仅仅是一个普通电子钟,因为它包含了一种特殊的感情,更准确的说是基情,四射啊!本人就读于一个普通的一本大学,学的是电气工程及其自动化专业,临近毕业了,想给我的好伙伴们做点什么东西,留作纪念。四年时光匆匆而过,正好也可以用它来见证我们终将逝去的青春以及前行在曲折人生路上的不屈背影。
功能说明:显示时间日期,温度,公历节日(可自己添加,非节日的时候显示时段,比如:白天、中午之类的)、农历、闹钟、分项设置,配合上位机实现一键时间日期设置,在线显示电脑运行状况(CPU使用率和内存使用情况),在上位机显示环境温度等。
本设计主要分为三个部分:时钟的硬件部分、时钟的软件部分、上位机的设计。
硬件设计部分
1、主要是这么几个芯片:stc12c560s2+18b20+ds1302+12864G-086-PC(COG工艺 超薄啊,带GB2312字库,串口,可调对比度,显示起来挺清晰的)。从这看上去,这绝对是一个简单+经济的设计。
stc12c560s2:STC号称51宇宙第一啊,还有什么世界超级独一无二的加密技术,我就暂且相信了吧。看这价钱,4块多的,功能够,也就支持一下国产吧。
18b20:用烂了一个片子,始终感觉计算出的温度要比实际高2~3度,没事,我又不是做温度计的.
ds1302:饱受其害啊,由于32768晶振没有买到高质量的,误差有点大(绝对是国产中的山寨品啊)。下回用内置晶振的芯片。
2、原理图:
原理图比较简单,因此就不仔细说明了(注意有些器件信号线的上拉,同时省略了很多滤波电容)。采用AD Summer 09设计,先上图片,最后一起上附件资源
图中是双供电方案,MINI USB+排针。不过USB那个不能用上位机了,排针另加PL2303转换板即可。当初地方没有设计好,已经计划在内的CH340给去掉了。
3、PCB
这是我第二次画PCB,经验奇缺啊。由于先设计的程序后设计的原理图,导致IO分配十分混乱,PCB也乱的吓人,只能保证能用,不保证稳定性,大家勿喷那。(谁还没个第一次,是吧,嘿嘿)
这个是打样回来的PCB:
软件设计部分
1、驱动部分
18b20、ds1302都是以前的驱动修改过来的,12864厂家例程不够规范,而且页地址分配有误,所以自己在此基础之上进行了修改,实现了某行反显,显示某些自定义大小的图画文字,并且将其中的字母和数字向下平移了一个像素,更加美观。大家打开附件后就会发现,驱动使用两种方式写的,一种是 extern void fun();另外一种使用的结构体。两种用起来都不错~
2、功能部分
菜单移植的网上一个COB 12864液晶的菜单。这个菜单长处在于多层嵌套,很直观明了。我用的都是一层的菜单,有点大财小用了,原版菜单见附件。此部分很是混乱啊。 用定时器0和外部中断0实现LED背光2S左右后自动关闭,定时器1用于闹钟声响。一会有大量照片)
3、通信部分
由于采用的是12M晶振,所以波特率选取为2400,误差0.16%,采用独立波特率发生器(T0被用了)。通信协议自己编的,处理也是自己瞎弄的,你别说,还真有BUG:上位机请求两次温度数据,下位机只上传一次,这么地了吧。
上位机设计部分
开发环境是VC++6.0+MFC,先上一下效果图,然后讲一下开发
第一页是显示CPU情况的,由于CDC画图的操作我还没弄明白,所以这个是从别人那COPY的,CPU使用率由于计算方法的原因,会和任务管理器有出入。
第二页比较简单,下面的进度条用了一个类,大家打开源码就会看见叫SwingProgressCtrl,很亮丽有木有,而且随着使用情况的变化,进度条的背景颜色会变化。
第三页串口通信部分计划使用的是CSerialPort类,但是最后发现只能发送一次数据然后不没反应了,多次百度+调试无果,于是放弃了而去采用调用Moxa的pcomm.dll完成设计,Moxa主要生产工业串口通信设备,所以他们的串口通信组件还是值得信赖的,功能也很丰富。其中有个回调函数,在我的应用中始终有问题,于是在1S定时器中sio_iqueue()查询缓冲区的数据量(实时性不高的应用),如果是8的话就sio_read()出来(我的报文固定是8个字节),注意sio_read()后从缓冲区读出的数据,在缓冲区内不再存在。网上说还可以开一个线程不断sio_iqueue(),我倒是没试过。温度显示原先准备用一个数码管显示的空间显示出来,但是数据不知道怎么回事没法更新(估计和消息没处理好有关系),暂时放弃了。
最后本上位机还有托盘,可能是由于开发环境的原因,托盘的气泡没有弄出来,只弄出来了基本功能和标题。本人没有系统学过VC,基本都是东拼西凑+模仿,唉
上位机图片上有作者的QQ,有需要交流的伙伴们可以联系作者,谢谢大家阅读!
资料下载
感兴趣的童鞋可以在 公众号后台 回复关键词:激情电子钟,即可获取全部资料!
推荐阅读:
专辑|Linux文章汇总
专辑|程序人生
专辑|C语言
我的知识小密圈
关注公众号,后台回复「1024」获取学习资料网盘链接。
欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~