数字电子时钟的设计与制作毕业设计(编辑修改稿)内容摘要:

, K2 对十位进行减操作。 同理,按 K3 健两下时对湖 北理工学院 毕业设计(论文) 15 分位调整,按三下时对个位进行调整,按四下即跳出时间的调节。 若跳出时间的调节后, K4 健被按下,则启动秒表功能。 如果没有跳出对时间的调节 ,则无论怎样按 K4 健,秒表功能都无法启动。 在秒表功能下,按 K1按键,则秒表开始工作,再按 K1 则秒表停止计时;若按 K2 健,则秒表清零;如果再按 K4 健则跳出秒表,则转换为时钟工作状态。 整个设计的硬件电路就由这几部分组成:一个单片机的最小系统,包括晶振电路和上电自动复位电路;一个数码管显示电路;一个蜂鸣器控制电路和一个按键控制电路,构成了整体的设计电路。 整体设计的电路图如图 39 所示。 图 39 数字时钟的总体设计电路 湖 北理工学院 毕业设计(论文) 16 4 数字时钟的软件设计 本次设计所实现的要求有 : 用六位 LED 数码管显示时、分、 秒;以 24h(小时)计时方式;白天整点报时,晚上 22点后不报时;可实现时分调整、秒表功能转换;可实现时分调整、时钟功能转换。 根据设计要求,所编写的程序除了主程序外还包括的子程序有数码管显示子程序;按键检测子程序;蜂鸣器报时子程序还有中断函数。 数码管显示子程序通过控制 P0 口以及两个锁存器向数码管分别输送断码和位码,来实现时钟和秒表的显示;按键检测子程序则是通过 — 四个口来控制四个独立的按键,以实现时钟的调整和时钟 /秒表功能的转换;蜂鸣器报时子程序是通过控制 口来实现整点报时。 通过中断函数 来精确定时。 此次设计采用 C语言 来编程。 C语言 作为一种非常方便的语言而得到广泛的支持,很多硬件开发都要 C语言编程,如各种单片机、 DSP、 ARM 等。 C语言程序本身不依赖于机器硬件系统,不需要对 C语言程序做修改或者仅仅只是很简单的修改就可以将 C 语言程序从一个系统一直到另外一个完全不同的系统中。 C语言不仅支持浮点运算还提供了很多数学函数,其开发的高效性在很大程度上缩短了开发的时间,程序的可维护性和可读性大大增加。 对单片机使用 C51 编程跟汇编 ASM51 编程相比有很多优点: 解,而 C 语言则不需要有任何的了解就可以直接进行编程。 ,函数可以分成不同的类型,使程序的结构简单明了。 、寄存器分配及数据类型等。 语言库中有许多标准的子程序,其数据处理能力很强大,使用起来很方便。 语言具有很好的移植性,可以直接由一个系统移入另一个系统。 C 语言常用语法不多,尤其是单片机 C 语言常用语法更少,初学者没有必要再系统地将 C语言重学一遍,只需要在实践中遇到难点时适当地查阅 C语言书籍里的相关内容。 C 语言仅仅是一个开发工具,其本身并不难, 难的是如何在将来开发庞大系统中灵活应用 C语言的正确逻辑编写出结构完善的程序。 综合以上 C语言的优点, 故 本次程序编写采用 C 语言编写。 下面分别对主程序和相应的子程序做简要的湖 北理工学院 毕业设计(论文) 17 介绍。 主程序 设计 编写程序必须要理清思路,逻辑正确,而绘制流程图可以使程序的思路简单清晰,有利于编写程序。 此 次的数字电子钟设计 的主程序 流程图如图 41 所示。 图 41 主程序流程图 通电后, 启动 定时器, 定时器的初值为 50ms,计数 20次为 1 秒 ,则数码管上相应的数值加一。 按键 检测 是先检测是否 有键 被按下。 若 K3健被 按下, 当 K3 按 一下时,从左数第一二位数码管即显示时位的两位数码管的小数点亮,即可以通过K1 和 K2 来对时位进行加减的调整, K1 对十位进行加操作, K2 对十位进行减操作。 同理,按 K3 健两下时对分位调整,按三下时对个位进行调整,按四下即跳出时间的调节。 若跳出时间的调节后, K4健被按下,则启动秒表功能。 如果没有跳出对时间的调节,则无论怎样按 K4健,秒表功能都无法启动。 在秒表功能下,按 K1按键,则秒表开始工作,再按 K1则秒表停止计时;若按 K2 健,则秒表清零;如果再按 K4 健则跳出秒表,则转换为时钟工作状态。 如果显示时间在 六点整到二十二点整时,则蜂鸣器开始报时,即到了几点就响几下,在其他的时间不报时。 根据所要实现的功能,编写相应的子程序。 开始 启动定时器 时间显示 按键检测 湖 北理工学院 毕业设计(论文) 18 数码管显示 子程序 设计 数码管显示函数利用的是数码管的动态扫描,所谓动态扫描显示,即轮流向各位数码管送出字形码和相应的位选,利用发光管的余晖和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示,而实际上多位数码管是一位一位轮流显示的,只是轮流的速度非常快,人眼已经无法分辨出来。 本次的数码管显示函数也是利用这种发光管的余晖和人眼视觉暂留作用, 利用单片机的 P0 口以及两个锁存器 来向数码管的输送段选和位选数据,实现所要显示的时,分,秒。 数码管显示 子函数 的流程图如图 42所示: 图 42 数码管显示流程图 湖 北理工学院 毕业设计(论文) 19 按键检测 子程序 设计 本次的设计遵循的按键检测原则是按键执行是先检测调时间的健是否被按下。 若 K3 健被按下, 当按 K3按键 按 一下时,从左数第一二位数码管即显示时位的两位数码管的小数点亮,即可以通过 K1 和 K2 来对时位进行加减的调整, K1 对十位进行加操作, K2 对十位进行减操作。 同理,按 K3 健两下时对分位调整,按三下时对个位进行调整,按四下即跳出时间的调节。 若跳出时间的调 节后, K4 健被按下,则启动秒表功能。 如果没有跳出对时间的调节,则无论怎样按 K4 健,秒表功能都无法启动。 在秒表功能下,按 K1 按键,则秒表开始工作,再按 K1则秒表停止计时;若按 K2 健,则秒表清零;如果再按 K4 健则跳出秒表,则转换为时钟工作状态。 其程序流程图如图 43所示: 图 43 按键检测流程图 湖 北理工学院 毕业设计(论文) 20 蜂鸣器报时子程序设计 本次设计的蜂鸣器报时函数虽然比较简单,但是在编写的过程中还是遇到了一些困难。 就像程序中的注释一样,延时时间的长短决定了蜂鸣器的发声频率,也就是声音的长短。 通过不断的尝试,最终 找到了比较满意的发声频率。 蜂鸣器报时函数实现的是在早上六点到晚上二十二点之间整点报时,也就是几点响几下。 蜂鸣器报时函数如下: void baoshi(int c) { int x。 uchar i。 for(x=c。 x0。 x) { for(i=0。 i80。 i++) //延时时间 , 控制蜂鸣器发声频率 { //报时时仍然显示时钟状态 xianshi(shi,0xfd,0xfe)。 xianshi(fen,0xef,0xf7)。 xianshi(miao,0x7f,0xbf)。 } bs=!bs。 //整点到则蜂鸣器响 } } 除以上三个实现所需功能的函数外,还需要中断函数 , 初始化函数等。 将所有满足要求的函数整合到一起,通过在主函数中调用相应的子函数来实现设计要求。 虽然编写的程序顺利的实现了所要求的功能,但自己认为还有一定的缺陷,那就是在秒表功能的状态下, 无论按哪一个按键, 在按住不放的情况下数码管不显示任何数据。 通过多次的修改与调试也没能找到解决的方法,希望在以后的学习中能够找到解决方案。 湖 北理工学院 毕业设计(论文) 21 5 数字时钟 的仿真 与制作 程序编写完后 ,必须进行调试。 因为编写的过程中难免会出现一些小的错误,甚至是一些逻辑性的错误。 只有在一步步的调试过程中逐步发现错误,并逐步改进,才能实现最终预定的功能。 本次设计,采用 Keil 进行编译调试。 在使用 Keil 软件之前,要保证在用户的计算机上装有一套稳定可靠地软件。 本次毕业设计所使用的 Keil 版本为。 在学习中,我们应该采用边学边用的学习方法, 而不是将某个软件的所有功能都讲解的非常仔细,很多不用的地方不用去研究,需要用到什么就学什么这样才能有效地理解它,记忆它,最终达到学以致用的目的。 调试与 仿真 新建一个工程, 并设置相应的参数,选择相关的单片机型号。 设置好一切相关的数据后,便可以将工程保存,并命名为 qipeibiyesheji。 然后在新建的工程中添加文件,将编写好的程序添加到新建的工程中。 如下图51 所示。 图 51 Keil中添加新文件 然后 对添加到工程中的文件进行编译,若出现错误则需要慢慢的调试,根据 提示修改出现的错误,直到编 译无误为止。 编译无误后,需要生成 Hex 文件, 如下图所示。 湖 北理工学院 毕业设计(论文) 22 图 52 编译生成 Hex文件 编译生成 的 Hex 文件,最终需要导入到 Proteus 中进行仿真。 Proteus 软件现在对于自己来说最大的好处就是能够实现仿真,能够检查自己的程序到底有没有达到本次设计的要求。 虽然 Proteus 也有很多不完善的地方,而且模拟和硬件实物是有差别的,但是只有经过了仿真这一步,才能对自己编的程序心里有底,才敢开始动手开始实物制作。 在绘画 Proteus 仿真图的过程中也遇到过很多困难,首先遇到的困难就是相应元器件的查找。 自己 只知道最基本的单片机,锁存器等元器件如何添加,而数码管、晶振、对应的电容、电阻等都还不熟悉。 因此只有自己上网查找资料现将所有需要用到的元器件添加到新建的工程中,然后再来考虑连线所要注意的问题。 绘画仿真图的过程虽然比较艰辛,而且比较考验人的耐性, 尤其是出现的一点点错误都有可能实现不了仿真,只有通过自己慢慢检 查,翻书,查阅相关的资料以及与同学老师交流查找错误,并及时纠正。 虽然这个过程是痛苦的,但是当自己看到 编写的程序在自己辛苦几天绘画出的仿真图中完整无误的实现了设计的要求 时 ,那种兴奋感和成就感是多么的让人陶醉。 湖 北理工学院 毕业设计(论文) 23 与此同时,在画仿真图的过程中自己 学到了很多知识,而且也把以前学的知识又巩固了一遍 ,并收集了很多关于画 Proteus 仿真图的资料。 虽然自己只是懂Proteus 的一点点,其功能的强大自己还没有完全领略,但我想这次单独完成仿真绘制的过程为自己以后研究 Proteus 打下了很好的基础,做了一个完美的开始。 下面是自己仿真的截图,分别为 时钟和秒表两个状态。 如图 53 所示,是时钟状态下的仿真图 : 图 53 时钟状态下的仿真图 由前面的按键电路的流程图可知通过按 K K K3按键实现相应的时间调整。 并且在六 点和二十二点之间还会报时。 通过按 K4健实现秒表功能的转换。 秒表状态下的仿真图如下图 54所示: 湖 北理工学院 毕业设计(论文) 24 图 54 秒表状态下的仿真图 仿真图缺陷分析 虽然自己绘制的仿真图能实现所有的设计功能,但仍然存在一些缺陷。 综合自己的分析,其缺陷有以下几点: ( 1)在时钟与秒表转换的时候, 按下 K4健时,也就是处于秒表状态但没有启动秒表时,单个的共阳极数码管会有轻微的闪动,也就是不稳定,找了很久都没有发现原因。 ( 2) 在秒表状态下,无论按哪一个按键,在按下不放时,数码管就会出现不显示的现象。 虽然按键按下的过程很短暂 ,如果不刻意去注意的话根本不会。 但这也是一个缺陷,我想要求完美的人都会发现这个缺陷。 上述两个缺陷只是自己做仿真和编程的时候发现的,暂时还没有找到其相应的解决方法。 但我想肯定也还存在其他的缺陷,只是自己暂时没有发现。 我相信在以后的设计与制作中自己要求的更严格,争取做到没有任何缺陷。 湖 北理工学院 毕业设计(论文) 25 完成了 程序的调试与仿真,剩下的就是制作实物这一步了。 虽然以前没有动手制作过任何实物,有很多东西自己也不懂,但这是一次很好的锻炼自己的机会。 不要因为没有尝试过就放弃,更不要因为不会害怕失败而不敢去尝试。 要相信只要自己肯学肯钻研,就一定会有所收获的,结果并不是最重要的,重要的是自己亲自动手尝试的过程。 数字时钟 的 制作 经过询问同学老师以及上网搜索资料,最初决定用 Altium Designer 来绘制原理图和 PCB 板。 Altium Designer 这款软件自己以前从来没学过,也没听说过。 但是当自己去学习它去了解它的时候发现它功能的强大性真的让自己难以置信。 而想要学好单片机的话必须掌握画 PCB 板的基本软件。 很多公司用的都是 Protel99 来学习单片机,但 Altium Designer 比 Protel99 的 功能更强大,是最新发明出来的软件。 因此自己决定用 Altium Designer 来绘画 PCB 板。 学习和绘画的过程是辛苦的,因为没有人指导, 也没有任何。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。