嵌入式linux时钟报告_第1页
嵌入式linux时钟报告_第2页
嵌入式linux时钟报告_第3页
嵌入式linux时钟报告_第4页
嵌入式linux时钟报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、设计背景介绍面向21世纪的科技发展,嵌入式系统(Embedded Systems)开始进入到IT时代,并且稳健发展,逐步形成一个主流。嵌入式是同是以应用为中心,以计算技术为基础,软硬件可裁剪,适于应用系统对功能、可靠性、成本、体积、功耗等综合性严格要求的专用计算机系统。它是一个技术密集、资金密集、高度分散、不断创新,基于硅片的知识集成系统。今天的嵌入式系统已普遍应用于国防电子、数字家庭、工业自动化、汽车电子、医学科技、消费电子、无线通信、电力系统等国民经济的主要行业。随着嵌入式技术的发展,嵌入式系统将更广泛地应用于人类生活的方方面面,如:基于嵌入式Internet网络的电子皮肤、可以嵌入到

2、牙齿上的 都在研发之中。著名嵌入式系统专家沈绪榜院士认为,“计算机是认识世界的工具,而嵌入式系统则是改造世界的产物。”ARM是一种目前应用最为广泛的嵌入式微处理器核,本实验所用的UP-NetARM2410-S开发板采用的是CPU为ARM920T内核的三星S3c2410芯片;适用于设计移动手持设备类产品,具有高性能、低功耗、接口丰富和体积小等优良特性。以开放源代码、模块化设计为主要特点的Linux操作系统是较为常用的嵌入式操作系统,实际上目前正在开发的嵌入式系统中,50%以上的项目选择Linux作为嵌入式操作系统。Linux是一个遵循POSIX标准的免费操作系统,具有BSD和SYSV的扩展特性。

3、与其他操作系统相比,Linux有其自身的一些特点:多任务、多用户、多平台、使用分页技术的虚拟内存等。同时由于它源代码完全公开,用户可根据需要自己定制自己的操作系统,从而系统能够很好的满足用户的要求。它是免费的自由软件,用其构建的系统成本较低,而且Linux是单内核的操作系统,并可按要求进行任意剪裁,因此具有很好的实时性,很强的稳定性、嵌入性的操作系统,因此越来越多的研究人员开始采用Linux平台来开发自己的产品。自由开源软件在嵌入式应用上受到青睐,Linux日益成为主流的嵌入式操作系统之一。可应用于多种硬件平台,Linux采用一个统一的框架对硬件进行管理,同时从一个硬件平台到另一个硬件平台的改

4、动与上层无关。Linux具有独特的内核模块机制,它可以根据用户的需要,实时地将某些模块插入到内核中或者从内核中移走,并能根据嵌入式设备中的个性需要量体裁衣。Linux系统内核精简、高效并且稳定,能够充分发挥硬件的功能,因此它比其他操作系统的运行效率更高。Linux是首先实现TCP/IP协议栈的操作系统,它的内核结构在网络方面是非常完整的,并提供了对包括十兆位、百兆位及千兆位的以太网,还有无线网络、Token ring(令牌环)和光纤甚至卫星的支持,这对现在依赖于网络的嵌入式设备来说无疑是很好的选择。Linux操作系统下有一个强大的图形用户界面工具包 Qt是一个跨平台的HYPERLINK :/b

5、aike.baidu /view/824.htm t _blankC+图形aike.baidu /view/362528.htm t _blank用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全HYPERLINK :/baike.baidu /view/125370.htm t _blank面向对象的,很容易扩展,并且允许真正地组件HYPERLINK :/baike.baidu /view/3281.htm t _blank编程。且具备面向对象、丰富的 API、强大的类等优点,这将为我们提供图形化编程的便利。本次我们在实验中所做的是电子时钟的设计与

6、实现。时钟是我们日常生活中经常用到的工具,时钟的外观和多样化能给我们的生活带来更多的方便和乐趣。基于此我们设计了两种不同的时钟,一种是模拟时钟,即指针式的时钟;另一种是数字时钟,能够显示时间数字和日期数字。 二、系统总体方案对于时钟来说,时间界面是必不可少的。该界面是用户操作平台,也是各项信息的显示平台。在本次的课程设计中,我们依托于S3C2410 Core小板及LCD 显示屏、Linux操作系统下的图形用户界面工具包Qt,通过编写Qt代码,结合一些算法机制,来达到实现时钟的基本功能的目的,即人性化的图形操作界面,包括时针形式的指针时钟和数字式的电子时钟;数字时钟能够查询日期的功能;结合触摸屏

7、的显示设计。在本次课程设计中,无论是模拟时钟还是数字时钟的设计,我们都比较好的把C+与Qt结合起来使用。Qt作为面向对象的软件开发工具,它使用信号Signal/槽slot机制来进行对象间的通信。信号/槽机制是Qt的一个中心特征并且也许是Qt与其它工具包的最不相同的部分。这样便解决了我们在用户界面上的操作,如单击某个按钮与内部对象之间的信号传输。Qt运行速度快、执行效率高,再加上它提供了一组更容易理解的GUI类,信号与槽易使用,它所拥有的插入体系结构,使得我们可以将代码加载到一个应用中而无需进行重新编译或重链接等优点,为我们本次设计增色不少,能使图形界面看起来更加舒服,使用起来更加灵活。三、系统

8、具体设计首先是数字时钟的设计,当我们运行可执行文件后,即出现如图1所示的图形界面,即系统的整体界面图,其标题为“Qt- digitalclock”。 图1 数字时钟主窗口界面由图1可以看到,我们的主窗口整体上有一个菜单条和一个显示各项信息的中央窗口部件组成。数字时钟的菜单条如图2图2 数字时钟菜单条其次是指针时钟的运行,当我们运行可执行文件后,即出现如图1所示的图形界面,即系统的整体界面图,其标题为“Qt-analogyclock”。图3 指针时钟主窗口界面指针时钟的菜单如图4所示图4 指针时钟主窗口界面3.2核心算法及说明.1 数字时钟程序流程图如下: 首先进入main()函数,由于在每一个

9、使用Qt的应用程序中都必须使用一个QApplication对象,故用HYPERLINK :/ kuqin /qtdocument/qapplication.htmlQApplication a( argc, argv )语句定义一个对象a; 其次根据自己新定义的类DigitalClock创建一个对象,系统自动进入DigitalClock的构造函数中。(1)在初始化程序中,时和分中间的冒号显示函数初始化为FALSE,设置框架的风格,框架的线宽为2;(2)然后调用时间显示函数showTime(),其中通过QTime类中的current Time()函数来获取当前系统时钟的时间,并调用display

10、()函数将数字显示在框架中;(3)初始化设置显示日期定时器showDateTimer成员变量为-1,即不显示日期;(4)创建一个QTimer对象normalTimer,使用imer.html l start#startstart()来开始并且把它的HYPERLINK :/ kuqin /qtdocument/qtimer.html l timeout#timeouttimeout()连接到适当的槽。 然后系统等待触发器或者鼠标左键按下事件或者鼠标移动事件。(1)当鼠标左键按下,系统立即捕获到消息,进入void DigitalClock:mousePressEvent()函数中,判断若是左键按下

11、,则调用显示日期showDate()函数。若showDateTimer不等于-1则返回,因为它说明当前正在显示日期;否则通过QDate:currentDate()来获取系统中的日期并显示出来,利用startTimer(2000)保持这种状态2秒,并且showDateTimer等于startTimer(2000)返回的定时器标识符,每隔2秒便会出现定时器事件。而HYPERLINK :/ kuqin /qtdocument/qobject.html l timerEventtimerEvent()函数接收对象的定时器事件,由于有两个定时器在运行,所以QTHYPERLINK :/ kuqin /qt

12、document/qobject.html l timerEventimerEvent:timerId()函数被用来找到那个定时器。如果e-timerId() = showDateTimer,则调用stopDate()函数,killTimer()被调用关闭定时器,showDateTimer设置为-1,调用显示时间函数;否则如果showDateTimer=-1,则调用showTime()函数显示时间。最后设置时钟的大小,将时钟设为这个应用程序的主窗口部件,标题为“Qt-Digital Clock”,显示时钟。在数字时钟算法中,定时器的使用是比较难的。为对象调用HYPERLINK :/ kuqin

13、 /qtdocument/qobject.html l startTimerQObject:startTimer()和在DigitalClock类中重新实现nt/qobject.html l timerEventQObject:timerEvent()事件处理器。HYPERLINK :/ kuqin /qtdocument/qobject.html l startTimerQObject:startTimer(interval)定时器开始计时并返回一个定时器标识符,每interval毫秒出现一个定时器事件直到killTimer()被调用。normalTimer = startTimer( 50

14、0 );showDateTimer = startTimer( 2000 );/两个定时器void DigitalClock:timerEvent( QTimerEvent *e ) if ( e-timerId() = showDateTimer ) /HYPERLINK :/ kuqin /qtdocument/qobject.html l timerEventtimerEvent()函数接收对象的定时器事件,由于有两个定时器在运行,所以timerId()函数被用来确定是哪个定时器。若是显示日期的定时器2秒到了,则调用关闭日期的函数。 stopDate();else if ( showDa

15、teTimer = -1 ) /若条件成立,显示时间 showTime(); .2指针时钟指针时钟的程序流程图如下:在指针模拟时钟中,绘制时钟是比较难的。在Qt中的一个HYPERLINK :/ kuqin /qtdocument/qpaintdevice.html绘画设备是一个可画的二维平面,所以绘制时需要坐标变换。(1)使用通用变换矩阵。如HYPERLINK :/ kuqin /qtdocument/qpainter.html l saveQPainter:save()和HYPERLINK :/ kuqin /qtdocument/qpainter.html l restoreQPainte

16、r:restore()存储和恢复这个矩阵;(2) 使用窗口。这个窗口在模式坐标上说明视图的边界。矩阵定位对象并且HYPERLINK :/ kuqin /qtdocument/qpainter.html l setWindowQPainter:setWindow()定位这个窗口,决定哪个坐标系统是可见的。(3) 使用视口。视口也描述视图的边界,但是是在设备坐标上。视口和窗口描述的是同一个矩形,但是在不同的坐标系统中。所以每一个要画的对象被使用HYPERLINK :/ kuqin /qtdocument/qpainter.html l worldMatrixQPainter:worldMatrix

17、()变换到模式坐标中,然后被HYPERLINK :/ kuqin /qtdocument/qpainter.html l windowQPainter:window()剪辑,最后被使用HYPERLINK :/ kuqin /qtdocument/qpainter.html l viewportQPainter:viewport()定位到所画的设备上。下面是时钟绘制算法: void AnalogClock:drawClock( QPainter *paint ) paint-save();/保存绘画工具的状态 paint-setWindow( -500,-500, 1000,1000 );/设置

18、一个1000*1000、原点(0,0)在中间的窗口的模式坐标系统 QRect v = paint-viewport(); int d = QMIN( v.width(), v.height() );/窗口也许不是正方形的,但希望钟视口面是正方形的,找到当前窗口并计算它最短的边 paint-setViewport( v.left() + (v.width()-d)/2, v.top() + (v.height()-d)/2, d, d );/设置一个新的正方形视口,把它放在窗口的中间 / time = QTime:currentTime(); QPointArray pts; paint-sav

19、e();/保存绘画工具 paint-rotate( 30*(time.hour()%12-3) + time.minute()/2 );/时针转动的角度 pts.setPoints( 4, -20,0, 0,-20, 300,0, 0,20 ); /设定三点钟方向为初始点 paint-drawConvexPolygon( pts ); paint-restore(); /恢复被保存绘图工具,取消旋转 paint-save(); paint-rotate( (time.minute()-15)*6 ); /分针转动的角度 pts.setPoints( 4, -10,0, 0,-10, 400,0

20、, 0,10 ); /设定三点钟方向为初始点 paint-drawConvexPolygon( pts ); paint-restore(); /画钟表面板 for ( int i=0; idrawLine( 440,0, 460,0 ); /初始点 paint-rotate( 30 );/刻度之间间隔三十度 paint-restore();/恢复绘图工具鼠标消息处理如下:AnalogClock:AnalogClock( QWidget *parent, const char *name ) : QWidget( parent, name ) time = QTime:currentTime(

21、); / 捕获当前时间 QTimer *internalTimer = new QTimer( this ); connect( internalTimer, SIGNAL(timeout(), SLOT(timeout() ); internalTimer-start( 5000 ); / 每5秒闪烁一次鼠标按下,获取钟表视口的中心位置void AnalogClock:mousePressEvent( QMouseEvent *e ) if(isTopLevel() clickPos = e-pos() + QPoint(geometry().topLeft() - frameGeometr

22、y().topLeft();/鼠标拖动改变窗口大小,钟表视口跟随窗口一起改变void AnalogClock:mouseMoveEvent( QMouseEvent *e ) if(isTopLevel() move( e-globalPos() - clickPos );3.3系统调试及结果分析编写好代码后,数字时钟有三个文件,分别是dclock.h,dclock.cpp和main.cpp。利用Qt编译只在Linux操作系统下运行。使用Qt提供的连编工具qmake,即在终端输入以下命令:qmake project,即可生成(项目)文件;接着输入qmake命令,则可根据先前生成的项目文件来生成一个(系统相关的)Makefile;最后输入make命令即可生成诸多文件即moc_dclock.cpp,moc_dclock可执行文件digitalcloc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论