3.3.5发声模块
图8 发声模块
发声模块由电源,蜂鸣器两部分组成。正常情况下,不发声,一旦按键按下,或定时时间到,蜂鸣器发声[9]。 3.3.6时间显示模块
LED是Light Emiting Diode (发光二极管)的缩写,发光二极管是能将电信号转换为光信号的电致发光器件。由条形发光二极管组成“8”字形的LED显示器,也称数码管[10]。
通过数码管中发光二极管的亮暗组合,可以显示多种数字、字母以及其他符号。数码管有7段数码管和8段数码管之分。7段数码管由7个发光二极管组成,而8段数码管则是在7段发光二极管的基础上再加一个圆点型发光二极管,用以显示小数点。8段数码管中发光二极管的排列形状以及数字显示的段组合如图9所示:
图9 八段数字显示器及发光段组合图
在使用中,为了给发光二极管加驱动电压,它们有一个公共引脚,公共引脚共有两种连接方法,如图10所示,分别为共阴极接法与共阳极接法[11]。
1.共阴极接法。把发光二极管的阴极连在一起构成阴极公共引脚,如图a所示。使用时阴极公共引脚接地,这样阴极引脚上加高电平的发光二极管就导通点亮,而加低电平的则不点亮。
2.共阳极接法。把发光二极管的阳极连在一起构成阳极公共引脚,如图b所示。使用时阳极公共引脚接+5V。这样阴极引脚上加低电平的发光二极管即可导通点亮,而加高电平的则不点亮。
a 共阳极接法 b 共阴极接法
图10 LED显示器接法
本设计中采用共阴极LED数码管显示方式,电路图如图11所示:
图11 时间显示模块
4.控制系统的软件设计
4.1 KEIL集成开发环境的应用与操作
4.1.1 KEIL集成开发环境简介
Keil C51是Keil Software公司出品的51系列兼容单片机C语言软件开发系统。 Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。。在Keil中使用C语言编程,在功能上、结构性、可读性、可维护性上有明显的优势[12]。
4.1.2 KEIL集成开发环境的基本仿真流程[13]
1.新建与保存源程序[13]
第一步:双击KEIL uVision3的桌面快捷方式,启动KEIL集成开发软件。 第二步:新建文本编辑界面或加入原有的程序文件。
选择“File(文件)”→“New”命令或菜单栏的“新建文本”命令,即可在项目界面的右侧打开一个新的文本编辑界面,默认文件名为“Text1”。
第三步:在“Text1”中输入C语言源程序。 第四步:保存源程序。
保存文件时必须加上文件的扩展名并选择路径和文件名进行保存,C语言程序文件的扩展名为“.C”。
2.建立新工程
第五步:新建KEIL工程。
选择“Project(工程)” →“New Project(新建工程)”命令,将出现保存对话框。在保存工程对话框中输入工程文件名,工程名称不用输入扩展名。输入名称后保存,将出现“Select Device for Target ”对话框。
第六步:选择CPU型号。
在对话框中选择“公司(Atmel)” →“CPU型号”,单击“确定”按钮返回主界面。
3.加入源程序到工程中
4.2 Proteus软件简介
Proteus软件是目前世界上最先进的嵌入式系统设计与仿真平台,可以实现模拟电路、数字电路及各种电路系统的仿真和PCB设计等功能,是目前唯一一个能够对各种处理器进行实时仿真、调试与测试的EDA工具。微控制器系统相关的仿真需建立编译和调试环境,可选择Keil 5 软件。该软件支持许多芯片,集编辑、编译和程序仿真于一体,同时还支持汇编和C语言的程序设计。它的界面简单易学,在调试程序、软件仿真方面有很强大的功能[14]。
其最关键的功能是:将电路仿真和微处理器仿真进行协同,直接在基于原理图的虚拟原型上进行处理器编程调试,并进行功能验证,通过动态器件如LED、
开关等,实时看到运行后的输入、输出的结果, Proteus为我们建立了比较完整的电子设计开发环境[15]。
4.3程序流程图
图12 主程序流程图
本设计的主程序是一个循环的过程,其流程是:开始运行显示正常时间,如果扫描过程中,发现有键按下,则进行时间和闹钟模式的切换,再次按下,进行时分秒的校正;如果没有键按下,则正常显示时间;在正常时间显示过程中,若定时时间到,则闹钟自动响起,否则时间正常显示。
4.4仿真结果
仿真结果如下图13所示。
图13 仿真结果
4.5 仿真结果分析
本设计实现了时分秒的显示,设计简单,对时间的调节感觉不是很好,在闹钟定时方面还是比较满意。在测试过程中,有很多小问题,通过多次的修改程序并在Proteus软件中进行仿真,最终解决可了这些问题,同时也反映出我在单片机设计和程序设计方面的不足[16]。仿真效果达到了预期的效果,能通过调节控制键来矫正时间,是本人比较满意。
5.总结
首先,我觉得这次的单片机设计非常必要,通过这次的设计使我们学到了
更多的关于单片机的实际应用知识,以前在课堂上只是简单的掌握了一些基础知识和简单指令,对于实际的应用还很陌生。
刚开始设计时,脑子里一片空白,不知道从哪开始下手,学过的知识不知道怎么运用。设计,编程,仿真,每一步都感觉很难,尤其是编程这一块,老是有错误,后来我发现,应该把程序分开来,一块一块的进行编程,不能混在一起,否则程序太大了,容易混淆,很难发现里面存在的问题。于是我把程序按照实现的功能不同分成几部分,然后进行逐一分析,进行编程,把每一部分