标题 | 基于LPC1768的多功能实时时钟系统设计 |
范文 | 徐永毅 张燕 摘要:本论文设计了一款基于NXPLPC1768实现一个完整的实用的多功能实时时钟系统。使用LPC1768内部的RTC时钟,并在LCD屏幕实现数字型时钟和模拟圆盘型时钟的双显示。实现可调日历和多闹钟的设计,并且使用五向键设置闹钟和调整日历,同时又可以使用UART调度台设置日期时间。使用DA转换模块驱动蜂鸣器实现闹钟的报警。最后通过实际LPC1768开发板的检验运行,结果说明了整个系统的正确性。 关键词:LPC1768;圆盘型时钟;可调日历;DA转换;多闹钟;UART调度台 中图分类号: TP751.1 文献标识码:A 文章编号:1009-3044(2018)11-0278-02 近年来,计算机技术和嵌入式技术的发展十分迅速,各种现代化产品在我们的生活的各个方面得到应用,使得我们生活水平和生活质量得到提高。但如今的电子产品难以满足人们对日益增长美好生活的需求,故需对电子产品的要求愈来愈严格、愈来愈人性化。然而在我们的日常生活和工作中,无时无刻都离不开时钟,并且每天都在使用着时钟闹钟。与此同时,现代电子时钟正沿着多层次用户、多品种、多规格、精度高、尺寸小、功耗低的道路发展,并且实时时钟适合于一切需要低功耗及准确计时的场合。因此多功能实时时钟系统在我们的生活具有巨大的应用前景,具有非常重大的研究意义。由此,本论文着重研究多功能的时钟,以满足当今人们的需求,以适应社会的发展。本多功能实时时钟系统的功能:a、数字型和圆盘型时钟双显示;b、可调日历;c、多闹钟的功能;d、基于DA数模转换的蜂鸣器闹钟报警系统;e、五向键和UART调度台[2]的时间日期闹钟的设置。 1系统组成和结构 该系统主要由一个CPU 构成,其型号为NXP LPC1768;LPC1768内部的时钟模块,主要用于实现精确计时的功能以及为实时时钟提供准确时间;LPC1768内部DA模块主要是用于产生信号,从而驱动蜂鸣器工作发出报警信号;LCD3.2寸显示模块是为了给用户提供有效使用界面;按键模块是为了给用户提供自身的操作空间;串口模块的功能是提供多一种方式给用户来对本产品功能的设置。 2设计原理 2.1 LCD显示模块设计 本多功能实时时钟系统的设计,需要用到像素为320*240的LCD显示屏,重点要解决两个问题:1)320*240LCD屏的画圆程序设计。2)320*240LCD屏的划线程序设计。 2.1.1 320*240LCD屏的画圆程序设计 本设计的画圆算法是利用圆的定义动点到定点的距离为定长半径,然后在LCD屏使用打点法进行画圆,但因为LCD屏显示器平面的各个像素之间是离散的,与数学上连续的图形的不一样。因此,在画线和画圆中需要在显示器有限个象素中,确定最佳逼近该圆的一组象素。确保画出来圆在有限个像素中的视觉上连续性,动点到圆心的距离Dis与半径R需要满足系:[Dis∈(R-2,R+2)]。 2.2时钟的设计 数字型和圆盘型时钟的显示。实时时钟显现是动态的过程,每秒产生都在变化,因此数字型时钟的显示也应该每秒钟显示一次时间,以此保证显示的效果;如今要实现每秒显示一次的时间,在LPC1768有两种方法实现:1)RTC 的增量中断;2)用定时器产生1秒钟的匹配中断,在中断服务程序中执行相关的显示操作即可。 本实验是使用LPC1768定时器产生一秒钟的匹配中断,然后使用钩子函数钩向时间显示函数,从而实现时间的连续显示。 2.2.1圆盘型时钟显示 首先显示表盘,时分秒的指针显示; 时分秒的指针显示,关于在LCD屏上绘制指针,本设计使用了void Hands_Show(void)函数来显示模拟指针,然后用LPC1768定时器的钩子函数钩向该指针显示函数,实现每秒显示; 首先,通过RTC_GetTime()获取系统时钟; 然后,通过正弦函数和余弦函数求出当前时间映射到圆形表盘的x,y坐标其关系如下: [xy=R000R0cos(θ)sin(θ)+x0y0] 其中x0,y0为圆盘的圆心,R0为指针的长度,[θ∈(0,2pi/60,2*2pi/60,....59*2pi/60,2pi)]。 计算出指针在圆盘的映射坐标,再通过画线函数在LCD屏各个指针显示出来。 2.3 实现可调日历的 2.3.1根据年,月来计算该月份的天数 由于篇幅限制,且实现比较简单,故不做说明。 2.3.2根据年月日来判断该月的第一天是星期几 本设计使用基姆拉尔森计算公式判断某月份的第一天是星期几。 基姆拉尔森计算公式: [W=(d+2*m+3*(m+1)/5+y+ y/4-y/100+y/400)%7] 其中在公式中d表示日期中的日數,m表示月份数,y表示年数,[W∈(0,6)],当w=0表示星期一。 2.3.3在LCD屏幕上设计日历的显示 分为两部曲:a、显示日历框,要在画出日历的表格;b、根据已获得的月天数和月第一天,将其一一对应的在表格中显示出来;实现显示日历的数据。 2.4 DA数模转换的蜂鸣器闹钟报警 DA转换产生的正弦波信号设计思路:利用LPC1768的DA定时将正弦波表SinTab的数据逐个送往DAC进行转换,从而产生一定频率的正弦波信号,并且将该信号接到蜂鸣器的输入引脚驱动其工作发出报警音。 2.5 实现多闹钟的设置 NXP LPC1768的闹钟报警中断每次只能设置一个闹钟时间,当闹钟设置的时间与实时时钟的时间相同的时候产生一个RTC报警中断。 设计3个闹钟的思路是: 2.5.1首先,通过算法找到“最佳闹钟时间”进行 先设置,(最佳闹钟时间是指:离当前时间最近且比当前时间后的闹钟时间); 2.5.2然后,当这个闹钟到来并且报警中断命令执 行后,进行设置下一个“最佳闹钟时间”;以此类推,设置闹钟;就可以实现报警中断式闹钟系统。 2.6 按键的控制 按键控制的主要是实现各个状态的切换,按键的控制分为两部分:1)利用LPC1768用户按键KEY0进行五向键控制模式与UART调度台控制模式的切换。2)五向键设置时间,日期,闹钟和实现日历翻页。 2.6.1 利用LPC1768按鍵KEY0进行五向键控制式UART调度台控制模式的切换 本设计系统设计思路:LPC1768的外部中断实现: a、当KEY0按下的次数为奇次时,设置为UART设置时间,日期。 b、当KEY0按下的次数为偶次时,设置为五向键设置时间,日期,闹钟。 3 UART调度台控制设计 UART调度台的功能是提供多一种方式来对本产品功能的设置,以满足各类人群使用,从而得设计更人性化。上位机输入控制指令然后通过串口RS232协议发送给CPU ,串口调度台的流程框图如图1所示。 LPC1768与PC的基于串口RS232协议通信,UART非阻塞式接收数据方式,存在一个致命的问题,数据的准确性没用保证,故采用阻塞式接收数据方式确保数据的准确;故本设计是采用阻塞式接收数据方式(轮询的方式)进行接收数据的,但存也在一个不足的地方,就是如果没有接收到数据,它会进入无限循环直到有数据接收,即是“死等”状态;解决这个问题在外部中断KEY0的中断字服务程序设置标志量,以此使得向键控制模式与UART调度台控制模式的顺利切换。 4 整体软件设计 4.1按键控制 按键的操作是整个设计的核心,通过按键实现各个状态的切换,从而实现各个功能模块的有序运作避免了混乱的出现。 4.2闹钟报警与设置闹钟。 软件上设计:在LPC1768的RTC的报警中断设置一个标志量(如Alarm_Ring)当中断来临时将其置位;在主函数里面采用轮询的方式查看该Alarm_Ring标志,若Alarm_Ring为1在通过DAC在P0.26引脚输出正弦波信号,从而产生报警声音,同时设置下一个“最佳闹钟”,最后清零变量Alarm_Ring。 5 结束语 本文设计了一款可以实现多功能实时时钟系统,整个系统设计完成之后进行了测试,测试结果说明了整个系统的正确性。 参考文献: [1] 邓乾中.自校准实时时钟RTC的研究和设计[D].华中科技大学,2008. [2] 张长森.调度台接口CPU与调度台工控机串行通信的设计[J].工矿自动化,2005(4). [3] 王茂华.改进的直线DDA算法[J].北京:科技资讯,2009(4). [4] 刘凯.ARM嵌入式应用技术基础[M].清华大学出版社,2009. [5] 林水强,吴亚东,余芳,等.姿势序列有限状态机动作识别方法[J].北京:计算机辅助设计与图形报,2014(9). |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。