微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于ARM7 TDMI-S CPU的LPC2103的多功能电子钟

基于ARM7 TDMI-S CPU的LPC2103的多功能电子钟

时间:11-18 来源:互联网 点击:

下之后就出现了不正常的情况,最后找到问题的所在,就纠正了过来。由于这个模块是我最先进行的,所以开始的时候我并没有给每个按键定义相应的功能,每个按键的功能我都是定义为每次按下对相应的LED进行取反操作,在之后的设计中,再在相应的按键确认语句下增加入相应的功能,这也是模块化程序设计的一个体现。

四位的数码管采用的是动态显示模式,刷新频率为50Hz,另外,由于开发板的硬件采用的是移位寄存器送笔段码,所以在软件设计方面要用到将8位笔段码不断循环右移,增加了设计的难度。起初我认为一切程序都编写得差不多的时候,烧进芯片的程序使数码管显示一片模糊,基本上显示的都是8,后来从程序的开始查起,终于找到原因,原来动态显示程序中,每次只能是一位的数码管点亮,但在程序设计中,在点亮下一位数码管时,忘记了将上一次点亮的位给关掉,导致四位数码管时同时被点亮的,最后,在点亮数码管前首先将四位数码管全部关闭,再以50Hz的频率进行点亮刷新,显示方回到正常状态。

最后就是在这两个模块的基础上来对整体的程序进行相关的调试和完善。例如在原先设置有当进入时间设置或者闹钟挂起时有LED点亮进行提示,设置时间时相关的设置超过相应的极限值,这些在最后的调试过程中得到完善,使其工作在正常的状态,调试过程也就这样基本得到完成。

五、结论

这次的课程设计基本上完成了任务书中所提出的要求。最终的成品具有如下功能:

通过数码管动态扫描的工作方式实现时分秒年月日星期的显示,利用键盘实现利用四位数码管可以进行如上时间的自由切换,时钟具有时间设置和随时的校准功能。有三组可随意设置打开或者关闭的闹钟,闹钟匹配时有蜂鸣器响和LED闪烁两种方式进行提醒。利用串口可以输出当前时间和被挂起的闹钟。

综上所述,本次的课程设计达到预期的设计要求。

六、小结与讨论

通过为期一个星期以来的单片机课程设计,感觉自己在这么的一个过程下来,还是很有收获的。这个设计的题目老师是在亚运放假之前就给我们的,我知道老师是希望我们用亚运放假的时间去思考、去准备的过程。

从暑假以来,我就利用暑假空闲的时间,来自学ARM7TDMI-S内核的一款芯片LPC2103,其与单片机相识的一些功能我都有涉及性的学习过了,在9月份,我买了它的开发板,进行相关的实践性学习。基于上述的原因,所以这次的课程设计我就想用这款LPC2103的芯片开进行这次的课程设计,也是对我之前的学习的一种检验。以前用开发板学习的时候,都是针对其的单独一个功能进行相关程序的设计,而这次的课程设计会涉及比较多的功能模块的综合应用,所以,开始的时候有点摸不着头脑的感觉。最后经过几番的思考,我就决定,针对每一个模块,一个个进行攻破,最终实现了多功能电子时钟的全部的功能。

首先,我利用LPC2103的实时时钟功能(RTC),先对其进行初始化,使其的时钟跑起来,在这个基础上,我最先是开始键盘模块的设计,这就涉及到:键盘扫描,键盘去抖动,键盘判断相关的问题,最后经过两天的编程,设计,调试,思考才把键盘模块的问题顺利地解决了。从最初的模型规划,到具体功能的实现,直到最后的软件设计和调试过程,每一个环节都让我加深了对实际问题的思考,有利于自己动手能力的提高。

这次的课程设计让我学会了系统地去解决一个实际的问题,了解到了单片机设计的基本步骤、开发设计过程中需要注意的问题、学会处理调试过程中出现的问题.,学会了巧妙运用模块化设计的思想,在整个的程序化设计过程中,学会将功能细化,分成一个小功能来实现,在设计好一个功能之后,再在这个基础上去增加其他的功能,最后完成整个多功能电子时钟的设计。总之,通过这次的课程设计,检验了我所学习的知识,使我将平时书本上的理论知识与实践很好地结合起来,利于加深对理论知识的理解和提高自己的实际动手操作能力。

七、参考文献

1、《ARM微控制器基础与实战》 出版社:北京航空航天大学出版社 2005年

2、《ARM7易学通》 出版社:人民邮电出版社 2006年

3、《EasyARM2103教材》 出版社:北京航空航天大学出版社 2008年

4、《新编单片机原理与应用》 出版社:西安电子科技大学出版社 2007年

5、《新编单片机原理与应用实验》 出版社:西安电子科技大学出版社 2005年

附录:

开发板实物图

以下是完整的源程序:

以下是名为main.c的文件

#include /* prototype declarations for I/O functions */
#include /* LPC21xx definitions */

#include "main.h"

#define LED (1<23)
UINT8 keystate=0; //按键的状态标志有0、1、2三种状态
UINT16 key4=1023;//按键的扫描输入端
UINT8 keyreturn=0; //按键的返回值
UINT8 time10=0;//10ms标志位

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top