来源:阿莫论坛,作者: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」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

一个漂亮的电子钟,纪念我们逝去的青春(含软硬件资料)相关推荐

  1. 做一个墨水屏电子钟,炫酷!

    这周和大家介绍一个漂亮的墨水屏电子钟,兼具气象站功能(可以通过GPS自动设置),用4节AAA电池可以续航6个月左右,而且,为了保证安全和可靠性,它不需要任何网络连接. 特点包括: 自动设置(通过GPS ...

  2. 补充嵌入式后期的开发~~分享一下自己的嵌入式学习经验~~也纪念一下即将逝去的青春

    自己的嵌入式学习经验~~也纪念一下即将逝去的青春 大一听说嵌入式很有挑战性,菜鸟也想挑战一下下,就开始了我的学习之旅,但是后来发现上了操作系统的arm完全没有自己想象的那么简单,简单的led程序都不会 ...

  3. 如何在自己的信息管理系统里集成第三方权限控制组件 - 设计一个漂亮的WEB界面...

    我们大家都梦想有个完美的各种信息管理系统,其实一个人又会数据库,又会C#.NET程序,还要精通HTML,还要精通CSS,更要精通JS,还有精力去写很多东西,又要调试前台又要调试后台,而且每开发一个系统 ...

  4. 一个漂亮的输出MySql数据库表结构的PHP页面

    经常为了方便和直观,我们会首先直接在数据库中设计出表,但是接下来又要将表的结构和设计编写在设计文档中,以便编码的时候可以直观的查询,一旦数据库表非常多,字段非常多的时候,这无疑是件非常郁闷的工作. 这 ...

  5. myeclipse如何换一个漂亮的主题

    熟悉hbuilder的童鞋们都知道,在开发的时候主题有好几种可以随意切换,但是在开发java时用到的myeclipse的主题是否可以随意切换呢?如果可以在哪里切换,今天我们就来看看如何修改myecli ...

  6. java写七彩文字_【PS精选案例教程】创建一个漂亮的七彩文字

    原标题:[PS精选案例教程]创建一个漂亮的七彩文字 效果图: 步骤1. 新建一个文档(大小随意) 步骤2. 滤镜→渲染→云彩 步骤3. 可以按Ctrl+Alt+F增加效果 步骤4. Ctrl+J复制一 ...

  7. 【转】博客美化(3)为博客添加一个漂亮的分享按钮

    阅读目录 1.社会化分享 2.选择一个分享按钮 3.添加到博客园博客 博客园美化相关文章目录:博客园博客美化相关文章目录 在前2篇博客"博客美化(1)基本后台设置与样式设置"与&q ...

  8. Android一个漂亮的日历组件源码

    简介: Android 一个漂亮的日历组件源码主要特性 日历样式完全自定义,拓展性强 左右滑动切换上下周月,上下滑动切换周月模式 抽屉式周月切换效果 标记指定日期(marker) 跳转到指定日期 下载 ...

  9. 一个漂亮而强大的自定义view

    代码地址如下: http://www.demodashi.com/demo/13502.html 简介 主要提供一个漂亮而强大的自定义SeekBar,进度变化由提示牌 (sign)展示,具有强大的属性 ...

最新文章

  1. CANOE入门(一)
  2. 普通用户程序使用保留端口 error while loading shared libraries
  3. Stanford UFLDL教程 稀疏编码自编码表达
  4. 目标检测--吴恩达深度学习记录
  5. Python自省(反射)指南
  6. SDNU 1263.C语言程序设计教程(第三版)课后习题10.5(约瑟夫环)
  7. ubuntu 开启 rewrite 模块
  8. SpringBoot中的@ConfigurationProperties
  9. sizeof,strlen用法详解
  10. netty的编解码器理解(转)
  11. Kubernetes学习总结(16)—— Kubernetes 实战之部署 Redis 集群
  12. Flutter 基础系列篇
  13. 怎么把记事本内容导出python_怎么把记事本内容导出python
  14. python自然语言处理学习笔记一
  15. 七,springBoot-SpringBootApplication注解
  16. P1567_统计天数
  17. Mysql组复制(MGR)——技术细节
  18. how2heap 深入学习(2)
  19. 9.1 数据库事务概述
  20. 为啥需要RPC,而不是简单的HTTP?

热门文章

  1. 大院大所合作对接会7天倒计时!亮点抢先看
  2. BigDecimal类整除报错的解决方案
  3. zabbix2.2入门教程之编译安装(一)
  4. Linux文件和目录权限
  5. 开源框架:CocoaPods 安装学习教程
  6. InputStream 、 InputStreamReader和BufferedReader
  7. Linux执行命令提示Password,linux expect远程自动登录以及执行命令
  8. python变量命名可以有特殊符号吗,和孩子一起学习python之变量命名规则
  9. Linux 监控命令之 netstat
  10. GitHub+Hexo搭建自己的Blog之-本地环境部署01