数码相框设计与实现 - 图文

更新时间:2024-05-02 11:21:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

-

信息科学与技术系

嵌入式系统课程设计报告

设计题目: 数字计算器的设计与实现 班 级: 计科本专业10级3班 学 号: 20100811102 姓 名: 郭振钢 指导教师: 李海颖 完成日期: 2013.4.25

成绩:

数码相框设计与实现

目 录

1 绪论 ........................................................................................................................................ 2

1.1数码相框发展现况及趋势 ........................................................................................... 3 2 需求分析 ................................................................................................................................ 4

2.1嵌入式处理器简介 ....................................................................................................... 5 2.2 嵌入式操作系统简介 .................................................................................................. 6 2.3 嵌入式GUI设计软件简介 ......................................................................................... 7 3 总体设计 ................................................................................................................................ 8

3.1 软件系统平台需求分析 .............................................................................................. 8 3.2系统功能需求分析设计 ............................................................................................... 9 3.3系统运行流程 ............................................................................................................. 10 3.4图片处理过程及内容 ................................................................................................. 12 4 详细设计 .............................................................................................................................. 14

4.1 Bootloader的配置与移植 .......................................................................................... 14 4.2 嵌入式Linux的配置与移植 .................................................................................... 15

4.2.1内核的选择原则: ........................................................................................... 15 4.3 内核的配置 ................................................................................................................ 15 4.4 文件系统分区的移植 ................................................................................................ 15

4.5.1 编译和下载BusyBox ...................................................................................... 16

5 编码 ...................................................................................................................................... 16

5.1新建一个数码相框工程 ............................................................................................. 16 5.2函数主要源代码 ......................................................................................................... 17 5.3在主机上运行 ............................................................................................................. 28 5.4交叉编译生成目标文件 ............................................................................................. 28 5.5在目标板上运行 ......................................................................................................... 28 6 结论 ...................................................................................................................................... 29 学习体会 .................................................................................................................................. 30 致谢 .......................................................................................................................................... 30 参考文献 .................................................................................................................................. 30

邢台学院信息科学与技术系嵌入式课程设计

1 绪论

嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。嵌入式系统应用在一些专用设备上,通常这些设备的硬件资源非常有限,并且对成本很敏感,有时对实时响应要求很高。特别是随着消费家电的智能化,嵌入式更显重要。像我们平常常见到的手机、PDA、电子字典、可视电话、VCD/DVD/MP3播放器、数码相机、数字摄像机、U盘、机顶盒、高清电视、游戏机、智能玩具、交换机、 路由器、数控设备、汽车电子、家电控制系统、医疗仪器、航天航空设备等都是典型的嵌入式产品。数码相框正是这样一种嵌入式技术应用的代表产品。数码相框由概念型产品进入市 场至今,已经经历了5,6个年头。作为伴随数码相机及互联网不断飞速发展的衍生产物,在今天也已经被愈来愈多的普通消费者所接受。

数码相框,既拥有传统相框的精致,意味极浓的外观设计和轻便,随意摆放的功能,又彻底改变了传统相框纸质静态照片的单一展示方式。它采用了直接读取显示各种数据存储卡的工作方式,用幻灯显示的数码照片将静态照片所取代,避免了污损,变旧和丢失。数码相框由三大部件组成:LCD液晶屏,PCB电路板和外框。液晶屏可以是模拟的也可以是数码的,它通过尺寸来区分,模拟屏的垂直分辨率一般在230左右,尺寸为7寸或者7寸以下;数字屏的垂直分辨率一般400以上,尺寸为8寸或者8 寸以上。

数码相框是时尚的电子消费品,也是家庭必备的装饰品。它继承了数码的时尚和相框的温情,用途十分广泛。比如,可以作为商务礼品,节日礼品,纪念品,展览展示, 现代家私,婚纱摄影,数码摄影器材,随身个性饰品等。随着数码相框的大众化,一定会出现越来越多有意思的创意应用,为我们的平淡的生活带来无穷的乐趣。图1-1是三星的一款数码相框产品。

图1-1 三星数码相框

鉴于数码相框广泛的用途,开发数码相框软件具有重要的意义和市场价值。虽然当前数码相框并不普及但随着数码成像后期应用市场的不断扩大,数码将成为必不可少的配套产品,它也许会成为继电视,

电脑之后生活中必不可少的第三块屏幕!

1.1数码相框发展现况及趋势

数码相框产品是2001年开始出现的,但由于当时消费者的接受度及价格过高的因素,使这一市场一直到2003年都很低迷。随着主要器件价格的下降,数码相框的价格也逐步下降,市场在2004年开始有了起色,尤其在2005年,数码相框产品开始在欧美热销,但出货量也只有150万台左右,到了2006年的出货量同比上涨133%,为280万台,2007年的出货量同比上涨185%,为800万台,预计到2011年出货量将达到4000 万台。从屏幕尺寸来看,2006年5*6.9英寸产品占主流, 2007年7*8.9英寸产品成为最大市场。预计2011年7*8.9英寸产品的供货比例将持续保持首位,而平均销售 单价将以每年16.5%左右的速度降低。

在中国,2006年以前,中国生产的数码相框绝大多数出口国外。2005年底Philips 率先将数码相框在中国推广,在礼品市场上取得了一些成绩,但由于销售价格较高,约为2050元/台,这一年中国数码相框的销售量仅有1.7万台。2006年下半年,开始有更多的国内厂商在中国市场推出数码相框,因而也带动了此产品价格的下降,这一年的平均售价为1150元/台,仍然较高,市场也以商务礼品为主,但由于2005年销售量的基数较低,2006年的销售量同比增长了470.6%,达到9.7万台。直到2007年下半年, 业界才感到这个一直处于培育期的市场,开始了真正的起飞。这得益于对数码相框产品认知度的提高,价格的下滑和需求量的提高。

从IT厂商来看,仅2007年下半年以来,就有惠普,三星,优派,AOC,明基,柯达,长城等众多新军加入数码相框阵营。其中,巨头惠普2007年7月底在美国宣布进入数码相框市场,2007年数码相框出货量设定为50万台。除新军外,数码相框老牌劲旅的出货量表现也令业界振奋,如飞利浦2006年数码相框出货量达到50万台,而2007年上半年出货量已达去年总和,2007年全年出货量达150万台。而从上游面板厂商的动作来看,也显示出乐观的发展态势。中华映管,群创等厂商均显著调高了配套数码相框产品的中尺寸面板的出货量目标,2007年出货量达1000万台,预计2008年更将倍增至2000万台。其中,中华映管目前已调配一座4.5代面板厂来支持生产中尺寸面板,主要生产可携式DVD播放机面板与数码相框面板,其数码相框面板以7 英寸,8英寸,10.2英寸为主要尺寸,数码相框面板占其中尺寸面板的比重提高到40%。

从长远来看,2008年及今后几年将为处在数码相框产品供应链的各企业带来巨大的商机。未来几年,数码相框的市场将处在逐渐走向成熟期的阶段,其产销量和市场需求依然将保持大幅度的增长,在未来的三年内,市场尚无萎缩的可能。但数码相框拓展中国市场需克服两大难点:一是价格;二是拓展应用空间。价格下降是必然趋势,消费者接受只是时间的问题,而根据消费者的需求和特点,开发出相

邢台学院信息科学与技术系嵌入式课程设计

应的应用产品,则是需要数码相框厂商亟待解决的问题。

从技术上来说,未来数码相框的发展将向两极分化。一部分产品着重强调基本功能和低成本,整合家庭中的闹钟,日历和装饰功能,这些产品走的是低成本路线,以展示照片为主,追求图像的品质及幻灯片播放特效,已成为DC/DV的附属物;另一部分产品将会添加一些新的功能,如WiFi,DVB—T,还可即时报告天气,股票等信息,从而有望成为\桌面信息中心\。此外,触摸面板会成为一个应用的新亮点。

从产品形态上来说,数码相框的市场将会有非常明确的细分。

1)数码相框:

这将是以数字照片的重显为主要功能的产品,其功能更接近于传统意义上的相框。由于人机界面的限制,为了更方便的重显和浏览以及确定重显的规则,这类产品并不强调有大容量的内存以及丰富的存储卡接口,这类产品的主要特征是:

l、支持USB Device&Host以便于更新和同步数据。

2、在某些情况下(如从PC端通过相框的USB Device同步数据),允许修改数字照片的格式使得有最佳的重显效果。

3、仅依靠内置的半导体存储器存放需要重显的数字照片。 4、文件(照片)查询和播放规则设定非常简洁易用。 5、产品大致分为桌面和壁挂两种。

2)数码相册:

这是以数字照片的存储和浏览为主要功能的产品,由于需要满足跟PC相类似功能,所以这类产品的主要特征是:

1、有大容量的内置数据存储器。

2、支持USB Device&Host及各种存储卡接口,并支持内部存储器与各种数据存储器之 第一章绪论 间的同步以及相互拷贝。

3、强大的文件管理功能:浏览,搜寻,命名(重命名),复制,删除,备份等。

4、带或不带内建显示单元,有能支持其它高分辨率显示设备的接口(如色差,VGA甚至是HDMI)。

2 需求分析

目前,对嵌入式系统的定义多种多样,下面给出两种比较合理定义:

1)从技术的角度定义:以应用为中心、以计算机技术为基础、软件硬件可裁剪,应用系统对功

能、可靠性、成本、体积、功耗有着严格要求的专用计算机系统。

2)从系统的角度定义:嵌入式系统是设计出可完成复杂功能的硬件和软件,并使其紧密耦合在一起的计算机系统。术语嵌入式反映了这些系统通常是更大系统中的一个完整的部分,称为嵌入的系统。嵌入的系统中可以共存多个嵌入式系统。

2.1嵌入式处理器简介

嵌入式微控制器又称单片机,它是将整个计算机系统集成到一块芯片中。嵌入式微控制器一般以某一种微处理器内核为核心,芯片内部集成ROM/EPROM、RAM、总线、总线逻辑、定时/计数器、WatchDog、I/O、串行口、脉宽调制输出、A/D、D/A、Flash、EEPROM等各种必要功能和外设。为适应不同的应用需求,一般一个系列的单片机具有多种衍生产品,每种衍生产品的处理器内核都是一样的,不同的是存储器和外设的配置及封装。这样可以使单片机最大限度地和应用需求相匹配,功能不多不少,从而减少功耗和成本。

和嵌入式微处理器相比,微控制器的最大特点是单片化,体积大大减小,从而使功耗和成本下降、可靠性提高。微控制器是目前嵌入式系统工业的主流。微控制器的片上外设资源一般比较丰富,适合于控制,因此称微控制器。

嵌入式微控制器目前的品种和数量最多,比较有代表性的系列包括8051、P51XA、MCS.251、MCS.96/196/296、C166/167、MC68HC05/11/12/16、68300、数目众多的ARM架构芯片等。目前MCU占嵌入式系统约70%的市场份额。

过去的20年中,单片机市场与需求都是以8位机为主的。最近几年来,16位、32位单片机的嵌入式应用呈迅速增长的趋势。在一两年后,数量上虽然仍会以8位为多,但32位单片机在产值上会超过8位单片机。今后,单片机应用将呈现8位、16位、32、位并举的格局。

8位单片机处在嵌入式系统低端领域,从8位单片机诞生至今,已近30年,在百花齐放的单片机家族中,80C51系列一直扮演着一个独特的角色。随着技术的发展、智能化系统需求的增长,要求单片机相应提高运算速度。当前8位单片机在不扩展数据总线的情况下,运行速度仍有潜力可挖。例如,采用RISC结构实现并行流水线作业;CISC结构的C8051F采用CIP.8051结构,使单周期指令速度提高到原8051的12倍。可以说8位单片机虽然“古老\,但又是一个十分活跃的领域。

由于8位MCU性能的不断提升、功能的不断强化,以及32位MCU在价格上的持续下探,使16位MCU受到来自上述两方面的攻击,在发展上受到一定的限制。但是,16位MCU既具有比8位机更高的性能,又具有比32位机更快的响应时间、更低的成本,因而在某些应用中具有很大的优势。例如,在家庭安防系统中,中央控制器在远程呼叫中需要可满足语音功能并能够进行噪音消除的数字信号控制器

邢台学院信息科学与技术系嵌入式课程设计

(DSC);再比如在汽车的气囊主控制器中,主MCU就需要16位的产品收集信息并实施控制;此外,16位MCU在家电、玩具、工业以及办公自动化和通信等应用中都有市场需求。从长远发展看,16位MCU仍然会有广阔的市场前景。

在目前流行的32位嵌入式处理器中,ARM架构的处理器占据了绝对主流(资料统计90%以上的手持设备都是ARM处理器)。ARM公司是专门从事基于RISC技术芯片设计开发的公司,作为知识产权供应商,本身不直接从事芯片生产,而是转让设计许可,由合作公司生产各具特色的芯片,世界各大半导体生产商从ARM公司购买其设计的ARM微处理器内核,根据各自不同的应用领域,加入适当的外围电路,从而构成自己的ARM微处理器芯片。目前,全世界的几家大的半导体公司都使用ARM公司的授权,因此既使得ARM技术获得更多的第三方工具、制造、软件的支持,又使整个系统成本降低,使产品更容易进入市场被消费者所接受,更具有竞争力。ARM处理器本身是32位设计,但也配备16位指令集。一般来讲使用16位指令比等价的32位代码节省达35%的存储空间,然而保留了32位系统的所有优势。ARM的Jazelle技术使Java加速得到比基于软件的Java虚拟机(JVM)高得多的性能,和同等的非Java加速核相比功耗降低80%。CPU功能上增加的DSP指令集提供增强的16位和32位算术运算能力,提高了性能和灵活性。ARM还提供两个前沿特性来辅助加深嵌入处理器的高集成SOC器件的调试,它们是嵌入式ICE.RT逻辑和嵌入式跟踪宏核(ETMS)系列。ARM处理器适用于多种领域,比如工业控制、消费/教育类多媒体、DSP和移动式应用等。

本设计属于数字影音娱乐产品,需要较为强劲的处理器进行数字音频与图像解码的工作,故选用应用广泛、资料齐全的32位微处理器三星S3C2440A作为MPU的开发板。因为此开发板的外围设备接口丰富,USB HOST、SD卡接口、声卡等一应俱全,很适合进行数码相框研究工作。

2.2 嵌入式操作系统简介

嵌入式软件就是嵌入在硬件中的操作系统和开发工具软件。

嵌入式软件与嵌入式系统是密不可分的,嵌入式系统是“控制、监视或者辅助设备、机器和车间运行的装置\,而嵌入式软件就是基于嵌入式系统设计的软件,它也是计算机软件的一种,同样由程序及其文档组成,可细分成系统软件、支撑软件、应用软件三类,是嵌入式系统的重要组成部分。下面介绍一下在本次设计中起到重要作用的嵌入式操作系统。

嵌入式操作系统EOS(Embedded Operating System)是一种用途广泛的系统软件,过去它主要应用于工业控制和国防系统领域。EOS负责嵌入系统的全部软、硬件资源的分配、调度、控制、协调等;它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。嵌入式操作系统通常以商业运作为主,从上世纪80年代起,商业化的嵌入式操作系统开始得到蓬勃发展。现在国际上有名的

[2]

嵌入式操作系统有Windows CE、Palm OS、Linux、VxWorks、pSOS、QNX、OS一9、LynxOS等,已进入我国市场的国外企业有WindRiver、Microsoft、QNX和Nuclear等。我国嵌入式操作系统的起步较晚,国内此类产品主要是基于开放版权的Linux操作系统,其中以中软Linux、红旗Linux、东方Linux为代表。

目前流行的嵌入式操作系统中,除了WinCE的实时性稍差外,大多数嵌入式操作系统的实时性都很强,所以也可称为实时操作系统(Real Time Operating System)。

传统的经典RTOS中最主要的便是Vxworks[3]操作系统,以及其Tornado开发平台。Vxworks因出现稍早,实时性很强(据说可在lms内响应外部事件请求),并且内核可极小(据说最小可8K),可靠性较高,所以在北美,Vxworks占据了嵌入式系统的多半江山。特别是在通信设备等实时性要求较高的系统中,几乎非Vxworks莫属。Vxworks的很多概念和技术都和Linux很类似,主要采用C语言开发。

Linux的应用除作为服务器操作系统外,最成功的便是在嵌入式领域的应用,原因当然是免费、开源、支持软件多、呼拥者众,这样嵌入式产品成本会降低。Linux本身不是一个为嵌入式设计的操作系统,不是微内核的,实时性不强。目前应用在嵌入式领域的Linux系统主要有两类:一类是专为嵌入式设计的已被裁减过的Linux系统,最常用的是uClinux(不带MMU功能),目前占较大应用份额,可在ARM7上运行;另一类是运行在ARM 9上的,一般是将Linux 2.4.18内核移植在其上,可使用更多的Linux功能。很多人预测,嵌入式Linux预计将占嵌入式操作系统的50%以上份额。本设计根据所选用处理器的性能和配置,选用嵌入式Linux2.6.12作为操作系统。

2.3 嵌入式GUI设计软件简介

所谓GUI(Graphics User Interface)就是图形用户界面,是指计算机与其使用者之间的对话接口,是计算机系统的重要组成部分。

嵌入式GUI就是在嵌入式系统中为特定的硬件设备或环境而设计的图形用户界面系统。所以嵌入式GUI不但要有GUI的特征,在实际应用中,嵌入式系统对它来说还有如下的基本要求:占用资源少、高性能、高可靠性、可配置性。简要介绍集中常见的嵌入式系统的GUI。

1)MiniGUI

MiniGUI是在Linux控制台上运行的,基于SVGALib和LinuxThread6库的多窗口图形用户界面支持系统。MiniGUI采用了类Win32的API接口,实现了简化的类

Windows 98风格的图形用户界面。MiniGUI也是一个窗口系统,它的主要组成元素是窗口,在这个基础上MiniGUI中的窗口可以基本分四类,分别为主窗口、对话框、控件和主窗口中的窗片。MiniGUI中的主窗口和Windows应用程序的主窗口概念类似,MiniGUI中的每个主窗口对应于一个单独的线程,

邢台学院信息科学与技术系嵌入式课程设计

通过函数调用可建立主窗口以及对应的线程。每个线程有一个消息队列,主窗口从这一消息队列中获取消息并由窗口过程(回调函数)进行处理。MiniGUI的目标是保持现有小巧的特点,在Linux控制台上提供一个小的窗口系统支持,“小”是MiniGUI的特色。同时MiniGUI又将尽力与微软的Windows API保持兼容。这么定位是希望MiniGUI可以在未来以Linux为基础的应用平台上提供一个简单可行的GUl支持系统,让MiniGUI可以应用在Windows CE可以应用的任何场合。

2)QT/Embedded

Qt是Trolltech公司的一个产品,是一个多平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。自从1996年早些时候,Qt进入商业领域,它已经成为全世界范围内数千种成功的应用程序的基础。Qt也是流行的Linux桌面环境KDE的基础,KDE是所有主要的Linux发行版的一个标准组件。

Qt/Embedded是Trolltech公司的另一个产品,虽然走Open Source开发路线,采用GPL授权,但商用的要付费。Qt/Embedded是Qt的嵌入式端口,包含C++GuI和基于Linux的嵌入式平台开发工具,可用于多种开发项目。Qt/Embedded可以开发市场上多种类型的产品和设备,从消费电器(移动电话、联网板和机顶盒)到商业设备(如医学成像设备、移动信息系统等)。Qt/Embedded提供的API和Qt/Windows、Qt/X1 1相同,但不需要使用到X11,取而代之的是硬件接口、绘图程序库和完整的GUI工具。Qt/Embedded对存储内存的需求约在800kB到3MB(x86平台下)。其另一个特点就是跨平台,用QtAPI开发出来的应用程序,可以在不同的操作系统上执行。

3 总体设计

按照数码相框的工作的软硬件需求,根据图片浏览及音频播放这和两个主要功能的技术指标,提出系统的总体设计方案。

3.1 软件系统平台需求分析

本设计选用的三星S3C2440A实验箱,主频最高可达533MHZ,具有MMU与Harverd高速缓冲结构,可以流畅运行当前主流嵌入式操作系统。在当前的嵌入式操作系统中,开放源码的Linux的学习资料丰富,学习人数众多,很适合作为学习研究的对象。现在最常见的Linux系统有uc Linux和Linux,由于所使用的处理器具有MMU结构,所以选用具有虚拟地址映射,内存保护功能的Linux。因为需要操作系统,如何加载操作系统也是嵌入式系统学习的一个重点,这就是Bootloader。它把嵌入式硬件和嵌入式

操作系统衔接起来,对于嵌入式系统后续软件的开发十分重要,在整个开发中占有一定的比例。本设计采用支持众多芯片的u-boot作为Bootloader。

数码相框的用户群体是广大的普通消费者,为了实现产品的各种功能,必须有人性化、易操作的图形用户界面。与十年前嵌入式设备简单的黑白用户界面相比,现在的嵌入式GUI软件功能十分强大,界面图像华丽。我选用的是跨平台(Linux与windows)的GUI——Qt/Embedded。

3.2系统功能需求分析设计

1)图片显示功能

支持常见的图片格式:BMP,JPEG。

用户可以选择播放U盘、SD卡或内置存储器中的图片。 播放模式: (1)循环播放

每间隔设定的时间,更换一副图片。

播放过程可控制,可以实现播放,暂停,上一幅,下一幅功能。 (2)静止显示

在此状态下,可以实现缩放功能,图片以显示屏中心点为基准,以x0.2,x0.4, x0.6,x0.8,x1,x1.2,x1/4,x1.6,x1.8,x2等各比例显示。在非正常比例 显示模式下,停止图片的幻灯片播放,并可以以触控方式移动图片。 2)音乐播放功能

能播放目前常见的mp3文件。 1)单独播放功能

播放界面显示当前曲目信息,必须包括文件名,播放时间,文件格式。 播放过程可以控制,可以实现播放,暂停,上一曲,下一曲功能。 播放模式可以选择:单曲模式,多曲循环模式。 用户可以选择播放的音乐曲目(单曲或者多曲)。 2)混合播放模式

在显示图片的时候,循环播放音乐作为图片的背景音乐。 用户可以选择播放的音乐曲目(单曲或者多曲)。 4)系统设置功能

通过系统设置,可以实现以下功能:

邢台学院信息科学与技术系嵌入式课程设计

(1)设置图片播放时每张图片的停留时间。 (2)延时关机功能,可设置延时时间。 (3)关机功能。 5)用户按键功能:

硬件平台有16个按键,加上触摸屏功能,实现暂停/播放,放大/缩小,下一张,上一张,石雕,灰度,旋转90度,颜色反转,播放全部图片,退出,显示等功能。其中硬件平台的按键可以以上功能。

3.3系统运行流程

1)系统硬件组成与主要模块分析 本设计所采用的开发板的元件包括:

CPU采用三星公司的S3C2440A,系统可稳定运行在400MHZ,主频最高可达 533MHz,可以流畅播放现在流行的44.1KHZ的MP3格式的音频文件;NORFLASH采用Am29LV800DB,它是由SST公司推出的容量为8M bits,即1M字节的CMOS多用途FLASH;64M字节的SDRAM,由两片K4S561632组成,工作在32位模式下;64M字节NANDFlash,采用的是K9F1208; 10M以太网接口,采用的是CS8900Q3,带传输和连接指示灯; LCD和触摸屏接口:2个内置的USB HOST,符合USB 1.1,其中一个USBHOST接口是复用的; 一个内置的USBDevice,符合USB 1.1;支持音频输入和音频输出,音频模块S3C2440A的IIS音频总线接口和UDAl341 音频编码解码器组成,板上还集成了一个MIC,用于声音输入;2路UART串行口,波特率可达115200bps,并具有RS232电平转换电路;SD卡接口,兼容SD MemoryCard Protocol 1.0和SDIOCard Protocol 1.O;Embedded.ICE(20脚标准JTAG)接口,支持ADS,SDT软件的下载和调试以及FLASH的烧写;蜂鸣器,4个LED灯; 4个按键;开关电源,分布式电源供电; 本设计的硬件系统组成如图3-1所示,主要包括SDRAM、NOR 、FlASH、NAND 、FLASH、USB DISK、SD CARD、UART、LCD、KEY等模块。

图3-1 硬件系统

LCD模块分析

LCD模块是数码像框的主要功能模块,作用是显示图片和图片的缩放效果、移动 效果。

LCD显示图片原理:

在系统内会有一段存储空间与显示屏的像素点对应,通过改变该存储空间的内容,从而改变显示屏的内容,该存储空间被称为Frame Buffer,或显存,显示屏上的每一点都必然与Frame Buffer中的某一位置对应,所以解决显示屏的显示问题,首先要解决的是Frame Buffer的大小以及屏上的每一像素与Frame Buffer的映射关系。按照显示屏的性能或显示模式区分,显示屏可以以单色或彩色显示,我们的数码相框采用16位色显示。

计算机反映自然界的眼神是通过RGB值来表示的,如果要在屏幕某一点显示某种颜色,则必须给出相应的RGB值,Frame Buffer为屏幕提供显示的内容,就必须能够从Frame Buffer中得到每一个像素的RGB值,在16位像素模式下,Frame Buffer里的每个单元有16位,每个单元代表一个像素的RGB值。

FrameBuffersize大小计算公式为:

FrameBuffersize=(显示屏长*显示屏宽)*像素位长/8

所以640*480,16位像素,单屏幕模式,Frame Buffer大小为614400个字节 4*4键盘捕获原理:

通过调用直入键盘接口和矩阵键盘、并初始化和调用键盘寄存器,实现了4*4键盘同时使用,使得系统可以通过键盘的按键来驱动8段数码管的点亮和作出相应图片处理效果。4*4键盘主要功能

系统进入图片处理时,通过按键捕获相应图片处理效果。同时也会显示出相应的LED。

邢台学院信息科学与技术系嵌入式课程设计

3.4图片处理过程及内容

系统设计思路为:选用3.5寸的LTV350QV液晶屏(TFT型),最大刷新频率为90Hz,分辨率320*240,采用16位真彩色,每个像素点占2个字节单元。LCDCDMA (LCD专用的DMA)的FIFO存储器为64个字节单元,即32个像素点;但每次请求16个字节,8个像素点。虽然现在很多JPG图像的位深为24位,但16位的真彩色图像完全可以满足彩色显示的需要,可以达到本设计的实验性目的。通过发送VCLK像素时钟锁存信号将数据传送至液晶屏驱动器中移位寄存器,当一行数据(320个像素点)被移入寄存器后,LCD控制器发送HSYNC信号通知驱动器显示此行。如图2.3所示,S3C2440A中的LCD控制器由传送逻辑构成,这种逻辑是把位于系统内存显示缓冲区中的显示数据传到外部的LCD驱动器。LCD控制器支持单色,使用基于时间的抖动算法和帧频控制的方法,可以支持每像素2位(四级灰度)或每像素4位(16级灰度)的单色LCD显示屏。也支持彩色LCD接口,可以是每像素8位(256种颜色)和每像素12位(4096种颜色)的STNLCD。支持每像素1位、2位、4位和8位带有调色板的TFT彩色显示和每像素16位与24位的无调色板真彩色显示。根据屏幕的水平与垂直像素数、数据界面的数据宽度、界面时间和自刷新速率,LCD控制器可以编程以支持各种不同要求的显示屏。图3-2是LCD模块的原理图。

图3-2 LCD模块原理图

(2) IIS模块分析

S3C2440A的IIS(内部声音集成电路)总线接口可以用来实现对外部8/16位立体声音频数字信号编解码器电路的数据传输功能,可以满足现在流行的16Bit的MP3、WAV文件的位宽要求;IIS模块的左右声道采样率IISLRCK的范围是8KHz~96KHz,完全可以满足现在流行的MP3文件44.1KHz的采样率。IIS(Inter-IC Soundbus)又称12S,是菲利浦公司提出的串行数字音频总线协议。目前很多音频芯片和MCU都提供了对IIS的支持。 此协议支持两种数据格式:IIs总线数据格式和MSB-justified数据格式。

IIs总线接口为FIFO操作提供DMA传输模式,以代替中断模式,它可以同时传送和接收数据。 S3C2440A的IIS接口有三种工作方式,本设计使用传输/接收模式(Transmit/receiveMode)。IIS模块有两个64字节的FIFO应用于此模式。在此模式中,音频数据的传输可以使用两个DMA通道。如声音播放,先将数据送到输出FIFO(TransmitFIFo),输出FIFO装满后产生的FIFO准备好标志自动产生DMA服务请求, 请求传到DMA控制器通道2,再通过IIS控制器写入IIS总线并传输给音频芯片。DMA 控制器通道l用于录音,其数据传输流程与音频播放相反。

(3)其他模块分析

当前,NORFlash存储器的价格比较昂贵,而SDRAM和NAND Flash存储器的价格相对来说比较便宜。SDRAM是易失性存储器,掉电以后数据即消失,不能长久保存,但它随机读写的速度非常快,写入数据前也不需要擦除;而NAND Flash存储器结构决定它可以达到很大的存储容量。但NAND flash存储器需要特殊的接口来与CPU通信,因此它的随机读取的速度不及SDRAM。所以选用NAND flash存放程序,而在SDRAM上执行程序代码。而NORFlash的作用是把程序从外部存储设备传入NAND Flash(通过USB,网卡,串口等)。SD卡和USB存储器是系统启动后作为数码相框应用程序的扩展储存器,UART串行口是调试程序时与系统通信的接口。

1)系统软件组成:本设计开机后的软件运行顺序如3-3图所示:

图3-3 软件运行流程图

S3C2440A这款CPU的启动方式有两种,可以从NAND FLASH启动,也可以从 NORFLASH启动。因为程序存放在NAND FLASH,本设计的启动方式是NAND FLASH[1] 启动。系统启动后,NAND FLASH中不能直接运行程序,所以CPU中开拓出4k的 BootSRAM空间,叫做“Steppingstone”。开机后会先把BOOTLOADER的stagel复制到这个BootSRAM。BootSRAM是三星的此系列芯片中的特别设计,(Inorder to supportNAND flash bootloader,theS3C2440A is equipped wim an internal SRAMbuffer called FLASH‘Steppingstone’蛹自S3C2440A的DATASHEET)它的唯一作用就是使用NAND启动时引导启动。在三星的这块芯片中还有一块特殊的NOR FLASH,作用是开机后把NAND FLASH的BOOTLOADER复制到BootSRAM。

本设计的BOOTLOADER采用U-Boot,这是由德国DENX软件工程中一t二,Wolfgang DenkI程师维护的系统引导程序。通过这段程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为调用操作系统内核准备好合适的环境。BOOTLOADER通过启动加载模式加载Linux内核,做了几个动作:

rotate_left = new QPushButton(this, \ rotate_left->setGeometry( QRect(178, 18, 39, 39) );

rotate_left->setPixmap( QPixmap::fromMimeSource( \ rotate_left->hide();

rotate_right = new QPushButton(this, \ rotate_right->setGeometry( QRect(261, 18, 39, 39) );

rotate_right->setPixmap( QPixmap::fromMimeSource( \ rotate_right->hide();

shrink = new QPushButton(this, \

shrink->setGeometry( QRect(345, 18, 39, 39) );

shrink->setPixmap( QPixmap::fromMimeSource( \ shrink->hide();

preImage = new QPushButton(this, \ preImage->setGeometry( QRect(96, 220, 39, 38) );

preImage->setPixmap( QPixmap::fromMimeSource( \ preImage->hide();

nextImage = new QPushButton(this, \ nextImage->setGeometry( QRect(345, 220, 39, 38) );

nextImage->setPixmap( QPixmap::fromMimeSource( \ nextImage->hide();

autoplay = new QPushButton(this, \

autoplay->setGeometry( QRect(220, 220, 39, 38) );

autoplay->setPixmap( QPixmap::fromMimeSource( \ autoplay->hide();

back = new QPushButton( this, \

back->setGeometry( QRect( 433, 220, 38, 38 ) );

back->setPixmap( QPixmap::fromMimeSource( \ back->hide();

showMenu = new QIconView(this, \ showMenu->setGeometry(0, 224, 480, 50); showMenu->hide();

Dt = new DateAndTime(this, 0, Qt::WStyle_Customize |Qt::WStyle_NoBorder); Dt->setGeometry(360,0,120,80); Dt->hide();

/*菜单内容*/

menuFlag = 0; timeFlag = 0; zoomLevel = 0;

邢台学院信息科学与技术系嵌入式课程设计

image_x = 0; image_y = 0; image_w = 0; image_h = 0;

move_image_x = 0; move_image_y = 0; clickFlag = 0; #ifndef DEBUG_ON_PC fb = 0;

fb_mem = NULL; #endif

QIconViewItem *tmpItem;

tmpItem = new QIconViewItem(showMenu,\ tmpItem = new QIconViewItem(showMenu,\ tmpItem = new QIconViewItem(showMenu,\ tmpItem = new QIconViewItem(showMenu,\ tmpItem = new QIconViewItem(showMenu,\ tmpItem = new QIconViewItem(showMenu,\ tmpItem = new QIconViewItem(showMenu,\ tmpItem = new QIconViewItem(showMenu,\ tmpItem = new QIconViewItem(showMenu,\ tmpItem = new QIconViewItem(showMenu,\ tmpItem = new QIconViewItem(showMenu,\ tmpItem = new QIconViewItem(showMenu,\ tmpItem = new QIconViewItem(showMenu,\ /*菜单内容*/

connect(showMenu,SIGNAL( doubleClicked(QIconViewItem*) ), this, SLOT(onMenuItemClick(QIconViewItem*)));

connect(enlarge,SIGNAL( clicked() ), this, SLOT(onEnlarge()));

connect(rotate_left,SIGNAL( clicked() ), this, SLOT(onRotate_Left())); connect(rotate_right,SIGNAL( clicked() ), this, SLOT(onRotate_Right())); connect(shrink,SIGNAL( clicked() ), this, SLOT(onShrink()));

connect(preImage,SIGNAL( clicked() ), this, SLOT(onpreImage())); connect(nextImage,SIGNAL( clicked() ), this, SLOT(onnextImage())); connect(autoplay,SIGNAL( clicked() ), this, SLOT(onautoplay())); connect( back, SIGNAL( clicked() ), this, SLOT( onBack() ) ); }

showPhoto::~showPhoto() { }

void showPhoto::languageChange() {

setCaption( tr( \}

showMusic.cpp

#include \#include #include

#include #include #include #include #include #include #include #include

#include \

ShowMusic::ShowMusic( QWidget* parent, const char* name, bool modal, WFlags fl ) : Window( parent, name, modal, fl ) {

if ( !name )

setName( \

setMinimumSize( QSize( 480, 272 ) ); setMaximumSize( QSize( 480, 272 ) );

setPaletteBackgroundPixmap( QPixmap::fromMimeSource( \

playName = new QLabel( this, \ playName->setGeometry( QRect( 0, 0, 400, 20 ) );

playName->setPaletteForegroundColor(QColor(255, 255, 255));

playScreen = new QLabel( this, \

playScreen->setGeometry( QRect( 40, 20, 400, 170 ) );

playScreen->setPaletteBackgroundColor( QColor( 220, 235, 255 ) );

playScreen->setPaletteBackgroundPixmap(QPixmap::fromMimeSource(\ playScreen->hide();

progress = new QSlider(this, \

progress->setGeometry( QRect( 40, 190, 320, 15 ) );

progress->setPaletteBackgroundColor( QColor( 42, 42, 42 ) ); progress->setMaxValue(100);

progress->setOrientation(QSlider::Horizontal);

sound_button = new QPushButton(this, \ sound_button->setGeometry(QRect(360, 190, 20, 15));

sound_button->setPixmap(QPixmap::fromMimeSource(\ sound_button->setPaletteBackgroundColor( QColor( 220, 235, 255 ) );

邢台学院信息科学与技术系嵌入式课程设计

sound_slider = new QSlider(this, \ sound_slider->setGeometry(QRect(380, 190, 60, 15));

sound_slider->setPaletteBackgroundColor( QColor( 42, 42, 42 ) ); sound_slider->setMaxValue(35); sound_slider->setValue(25);

sound_slider->setOrientation(QSlider::Horizontal);

back = new QPushButton( this, \

back->setGeometry( QRect( 423, 222, 39, 39 ) );

back->setPaletteBackgroundColor( QColor( 225, 230, 170 ) );

back->setPixmap( QPixmap::fromMimeSource( \

next = new QPushButton( this, \

next->setGeometry( QRect( 336, 222, 39, 39 ) );

next->setPaletteBackgroundColor( QColor( 225, 230, 170 ) );

next->setPixmap( QPixmap::fromMimeSource( \

play = new QPushButton( this, \

play->setGeometry( QRect( 220, 222, 39, 39 ) );

play->setPaletteBackgroundColor( QColor( 225, 230, 170 ) );

play->setPixmap( QPixmap::fromMimeSource( \

pre = new QPushButton( this, \

pre->setGeometry( QRect( 106, 222, 39, 39 ) );

pre->setPaletteBackgroundColor( QColor( 225, 230, 170 ) );

pre->setPixmap( QPixmap::fromMimeSource( \

List = new QPushButton( this, \

List->setGeometry( QRect( 16, 222, 39, 39 ) );

List->setPaletteBackgroundColor( QColor( 225, 230, 170 ) );

List->setPixmap( QPixmap::fromMimeSource( \

playtimer = new QTimer(this); playtimer->start(50); play->setFocus(); procFlag = 0; playFlag = 0; soundFlag = 1; languageChange();

resize( QSize(480, 272).expandedTo(minimumSizeHint()) ); clearWState( WState_Polished ); // signals and slots connections[7]

connect( play, SIGNAL( clicked() ), this, SLOT( onPlay() ) ); connect( pre, SIGNAL( clicked() ), this, SLOT( onPre() ) ); connect( next, SIGNAL( clicked() ), this, SLOT( onNext() ) ); connect( List, SIGNAL( clicked() ), this, SLOT( onList() ) );

connect( back, SIGNAL( clicked() ), this, SLOT( onBack() ) );

connect( playtimer, SIGNAL(timeout()), this, SLOT(update_Progress()));

connect( progress, SIGNAL(valueChanged(int)), this, SLOT(setProgress()));

connect( sound_button, SIGNAL(clicked()), this, SLOT(onSound_Button()));

connect( sound_slider, SIGNAL(sliderMoved(int)), this, SLOT(sound_Change())); ShowMusic::~ShowMusic() { }

void ShowMusic::languageChange() {

setCaption( tr( \

playScreen->setText( tr( \ playName->setText( tr( \}

welcome.cpp

#include \#include #include #include #include #include #include #include #include

#include #include #include

#include \[8]

Welcome::Welcome( QWidget* parent, const char* name, bool modal, WFlags fl ) : Window( parent, name, modal, fl ) {

if ( !name )

setName( \

setMinimumSize( QSize( 480, 272 ) );

setMaximumSize( QSize( 480, 272 ) );

setPaletteBackgroundPixmap( QPixmap::fromMimeSource( \

photoButton = new QPushButton( this, \ photoButton->setGeometry( QRect( 68, 110, 59, 59 ) );

photoButton->setPixmap(QPixmap::fromMimeSource(\

musicButton = new QPushButton( this, \ musicButton->setGeometry( QRect( 205, 110, 59, 59 ) );

邢台学院信息科学与技术系嵌入式课程设计

musicButton->setPixmap(QPixmap::fromMimeSource(\

setupButton = new QPushButton( this, \ setupButton->setGeometry( QRect( 342, 110, 59, 59 ) );

setupButton->setPaletteBackgroundColor( QColor( 225, 225, 255 ) );

setupButton->setPixmap(QPixmap::fromMimeSource(\

timer = new QSpinBox(this, \

timer->setGeometry(QRect(285, 77, 29, 19)); timer->setValue( 5 );

reset = new QPushButton(this, \

reset->setGeometry(QRect(123, 220, 41, 41));

reset->setPaletteBackgroundColor( QColor( 210, 220, 255 ) );

reset->setPixmap( QPixmap::fromMimeSource( \出厂设置.png\

sure = new QPushButton(this, \

sure->setGeometry(QRect(292, 220, 41, 41));

sure->setPaletteBackgroundColor( QColor( 225, 225, 255 ) );

sure->setPixmap( QPixmap::fromMimeSource( \确定.png\

select = new QButtonGroup(this, \

select->setGeometry(QRect(190, 100, 100, 100));

select->setPaletteBackgroundColor( QColor( 210, 220, 255 ) ); select->setTitle(QString::null);

none = new QRadioButton(select, \ none->setGeometry(QRect(0, 0, 100, 21)); change = new QRadioButton(select, \ change->setGeometry(QRect(0, 20, 100, 21)); mosaic = new QRadioButton(select, \

mosaic[9]->setGeometry(QRect(0, 40, 100, 21)); updown = new QRadioButton(select, \ updown->setGeometry(QRect(0, 60, 100, 21)); leftright = new QRadioButton(select, \ leftright->setGeometry(QRect(0, 80, 100, 21));

none->setChecked(TRUE); onSureClick();

languageChange();

resize( QSize(480, 272).expandedTo(minimumSizeHint()) ); clearWState( WState_Polished );

connect( photoButton, SIGNAL( clicked() ), this, SLOT( onPhotoClick() ) ); connect( setupButton, SIGNAL( clicked() ), this, SLOT( onSetupClick() ) );

connect( musicButton, SIGNAL( clicked() ), this, SLOT( onMusicClick() ) ); connect( sure, SIGNAL( clicked() ), this, SLOT( onSureClick() ) ); connect( reset, SIGNAL( clicked() ), this, SLOT( onResetClick() ) ); newWindowFlag = 0; photoWindowFlag = 0;

musicWindowFlag = 0; }

Welcome::~Welcome() { }

void Welcome::languageChange() {

setCaption( tr( \

none->setText(trUtf8( \

change->setText(trUtf8( \ mosaic->setText(trUtf8( \ updown->setText(trUtf8( \ leftright->setText(trUtf8( \}

photo.cpp

#include \#include #include #include #include #include #include #include #include #include #include \

Photo::Photo( QWidget* parent, const char* name, bool modal, WFlags fl ) : Window( parent, name, modal, fl ) {

if ( !name )

setName( \

setMinimumSize( QSize( 480, 272 ) ); setMaximumSize( QSize( 480, 272 ) );

setPaletteBackgroundPixmap( QPixmap::fromMimeSource( \ countFile = new QLabel( this, \

countFile->setGeometry( QRect( 80, 245, 111, 21 ) );

countFile->setPaletteBackgroundColor( QColor( 117, 117, 117 ) ); sizePhoto = new QLabel( this, \

sizePhoto->setGeometry( QRect( 250, 245, 120, 20 ) );

sizePhoto->setPaletteBackgroundColor( QColor[10]( 117, 117, 117 ) );

邢台学院信息科学与技术系嵌入式课程设计

back = new QPushButton( this, \

back->setGeometry( QRect( 433, 202, 38, 38 ) );

back->setPaletteBackgroundColor( QColor( 225, 230, 170 ) );

back->setPixmap( QPixmap::fromMimeSource( \返回.png\ autoPlay = new QPushButton( this, \ autoPlay->setGeometry( QRect( 9, 203, 38, 38 ) );

autoPlay->setPaletteBackgroundColor( QColor( 225, 230, 170 ) );

autoPlay->setPixmap( QPixmap::fromMimeSource( \播放.png \ ) ); nextPhoto = new QPushButton(this, \

nextPhoto->setGeometry( QRect(433, 122, 38, 38) );

nextPhoto->setPaletteBackgroundColor( QColor( 220, 235, 255 ) );

nextPhoto->setPixmap( QPixmap::fromMimeSource( \ prePhoto = new QPushButton(this, \

prePhoto->setGeometry( QRect(9, 122, 38, 38) );

prePhoto->setPaletteBackgroundColor( QColor( 220, 235, 255 ) );

prePhoto->setPixmap( QPixmap::fromMimeSource( \ showContent = new NIconView( this, \ showContent->setGeometry( QRect( 53, 60, 375, 180 ) ); showContent->setAutoArrange (true); showContent->setSorting (true);

QPixmap *backGround = new QPixmap(\ showContent->setPaletteBackgroundPixmap(*backGround); path = PATH_STRING; languageChange();

resize( QSize(480, 272).expandedTo(minimumSizeHint()) ); clearWState( WState_Polished );

photoMenu = new QIconView(this, \ photoMenu->setGeometry(0, 222, 480, 50); photoMenu->hide();

secondMenu = new QIconView(this, \ secondMenu->setGeometry[11](70, 182, 170, 40); secondMenu->hide();

thirdMenu = new QIconView(this, \ thirdMenu->setGeometry(40, 182, 300, 40); thirdMenu->hide();

pro = new QProgressBar(this, \ pro->setGeometry(QRect(0, 0, 480, 20));

pro->setPaletteForegroundColor(QColor(136, 157, 211)); pro->setProgress(100);

Dt = new DateAndTime(this, 0, Qt::WStyle_Customize |Qt::WStyle_NoBorder); Dt->setGeometry(360,0,120,70); Dt->hide(); /*菜单内容*/

QIconViewItem *tmpItem;

tmpItem = new QIconViewItem(photoMenu,\

tmpItem = new QIconViewItem(photoMenu,\ tmpItem = new QIconViewItem(photoMenu,\

tmpItem = new QIconViewItem(photoMenu,\ tmpItem = new QIconViewItem(photoMenu,\ tmpItem = new QIconViewItem(photoMenu,\ tmpItem = new QIconViewItem(secondMenu,\ tmpItem = new QIconViewItem(secondMenu,\ tmpItem = new QIconViewItem(secondMenu,\ tmpItem = new QIconViewItem(secondMenu,\ tmpItem = new QIconViewItem(secondMenu,\ tmpItem = new QIconViewItem(secondMenu,\ tmpItem = new QIconViewItem(thirdMenu,\正常\ tmpItem = new QIconViewItem(thirdMenu,\飞入\ tmpItem = new QIconViewItem(thirdMenu,\挤压\ tmpItem = new QIconViewItem(thirdMenu,\展开\

tmpItem = new QIconViewItem(thirdMenu,\图片马赛克\ tmpItem = new QIconViewItem(thirdMenu,\百叶窗\ tmpItem = new QIconViewItem(thirdMenu,\缩放\ tmpItem = new QIconViewItem(thirdMenu,\棋盘\ tmpItem = new QIconViewItem(thirdMenu,\随机\ /*菜单内容*/ menuFlag = 0; timeFlag = 0; lock = 0; flag = 0;

showPhotoWindowFlag=0; Val = READ_VAL;

autoPlay->setFocus(); refreshView();

connect(photoMenu,SIGNAL( doubleClicked(QIconViewItem*) ), this, SLOT(onMenuItemClick(QIconViewItem*)));

connect(showContent, SIGNAL( doubleClicked(QIconViewItem*) ), this, SLOT(onShowItemClick(QIconViewItem*)));

connect(secondMenu, SIGNAL( doubleClicked(QIconViewItem*) ), this, SLOT(onSecondItemClick(QIconViewItem*)));

connect(thirdMenu, SIGNAL( doubleClicked(QIconViewItem*) ), this, SLOT(onThirdItemClick(QIconViewItem*)));

connect(nextPhoto, SIGNAL(clicked()), this, SLOT(onNextPhotoClick())); connect(prePhoto, SIGNAL(clicked()), this, SLOT(onPrePhotoClick())); connect( back, SIGNAL( clicked() ), this, SLOT( onBack() ) );

connect( autoPlay, SIGNAL( clicked() ), this, SLOT( onAutoPlay() ) );

connect( showContent, SIGNAL( currentChanged(QIconViewItem*) ), this, SLOT( curChanged() ) );

}

Photo::~Photo()

邢台学院信息科学与技术系嵌入式课程设计

{ }

void Photo::languageChange() {

setCaption( tr( \}

5.3在主机上运行

#qmake –project #qmake #make #./photo

运行界面如下图5-3所示:

图5-3 主机显示效果

5.4交叉编译生成目标文件

使用前期搭建好的交叉环境,交叉工具链已经安装完毕,使用其中编译工具即可: #arm-Linux-g++

5.5在目标板上运行

使用secureCRT终端工具烧入镜像,然后运行,效果如图5-4和5-5所示。

图5-4 图片浏览1 图5-5 图片浏览2

6 结论

近年来,嵌入式行业快速发展,出现了越来越多的高性能、低功耗、低价格的嵌入式CPU,而LCD与闪速存储设备(FLASH MEMERY)的价格也越来越低,有力地降低了数码相框的价格门槛,使它的普及成为可能。本文就开发一款可以广泛应用的多媒体数码相框的基本功能进行研究,是一款低成本,低功耗产品,并设计大部分产品所不具备的两个功能一一图片的触控移动,让用户可以自由地观看放大后的图片。本设计主要做了如下工作:

1)介绍并分析了数码相框的现状与发展,并且根据此分析,作出了数码相框的功能需求。 2)在作出的功能需求的基础上,综合考虑各个模块,设计出数码相框系统,并分析了数码相框工作的完整流程。

3)分析了数码相框最主要的两个功能——图像显示与音频播放——的硬件工作原理,以便熟悉驱动程序代码。

4)针对S3C2440A进行了U—BOOT的裁剪和移植,linux内核的裁剪移植,文件系统的构建和移

植。

5)在Linux系统上进行QTEmbedded 2.3.0/Qtopia 1.7.0的移植,并添/JnT\QTE

库的自定义键盘与触摸屏的接口,然后进行GUI程序的编写。分别编写了3个模块:图片浏览、音频播放与系统设置。

由于能力所限,加之时间和其他因素的影响,对于数码相框的设计研究只做 了相当有限的工作,还存在很多不足之处,有待深入讨论和完善。 需要改进的部分包括以下几个方面:

1)本设计对嵌入式系统中很重要的一个部分,驱动程序的开发并未全部涉及。驱动程序开发是嵌入式系统中一个非常重要的环节,要开发一个数码线框系统,需要编写大量设备的驱动程序代码。而且驱动程序也在不断的完善和发展中,最新型设备文件系统udev正在逐步取代老式的devfs。

2)移植TCP/IP通信协议,编写嵌入式Linux下的网络应用程序,实现PC机和系统通信,以及日益普及的无线化的网络通信。

3)添加视频播放程序,视频播放是现行数码设备中一个重要的功能,将成为相当一部分数码相框的标准功能。

4)进一步完善GUI界面的人性化设计。

邢台学院信息科学与技术系嵌入式课程设计

学习体会

经过两个多星期的实践,我的数码相框终于成功完成。这是一件非常神奇的事情,之前我一直认为我的知识有所欠缺,还不能真正参与到项目中,但通过这次真正的实践,我充分认识到了:实践出真知。当我看到码相框的界面在板子上出现的那一该,我有一种说不出的成就感。

这是我第一次做QT的项目,之前对于QT我不是很了解,一直认为它只是一个简单设计图形画界面的工具,但是通过这次实践,我看到了QT强大的功能。QT是一个多平台的C++图形用户界面应用程序框架,它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。

总的来说这次的课程设计,比较辛苦,也很乏味,做着也不轻松,我想这很可能是因为我们QT应用程序设计没有学好的原因,但是学习是个长久的过程,只要肯花时间去专研,就一定会有所收获的,就像这次的课设一样,我们还不能做出很完整的数码相框来,但是我们已经完成了基本的功能,我想更加全面的功能我会在后期的学习中来完善。

致谢

在上课期间,本课设的研究工作自始至终得到了老师的悉心指导。老师严谨的治学态度、广博的知识、认真负责的工作作风都给我留下深刻的印象。还有老师的实干创新,在研究工作中培养我们的学习能力,使我终身受益,从她身上,我学到了许多书本上难以学到的东西。在我们工作遇到棘手问题时,老师总是能给我们一些建议,课设的完成与老师的帮助是密不可分的。在这里,谨向我的指导老师李老师致以崇高的敬意和衷心的感谢。

最后,再次感谢在所有帮助过我的老师,同学和朋友们。感谢你们!

参考文献

【l】杜春雷.ARM体系结构与编程【M】.清华大学出版社,2005. 【2】胥静.嵌入式系统设计与开发实例详解【M】.北京航空航天大学出版社,2005 【3】郑灵翔.嵌入式系统设计与应用开发【M】.北京航空航天大学出版社,2006 【4】徐千洋.LinuxC函数库参考手册【M】.中国青年出版社,2002 【5】姜换新.ARM嵌入式系统C语言编程【M】.TsinghanTongfang Optical Disc Co.,Ltd.2002 【6】刘岚,张凯,ARM7嵌入式系统的中断设计与中断处理优化【M】.武汉理工大学学报,2004年4月

【7】孙琼.嵌入式Linux应用程序开发详解【M】.人民邮电出版社, 2006 【8】杜冠.基于ARM9的嵌入式Linux系统移植的研究与实现【D】.武汉:华中科技大学,2007 【9】 申伟杰,彭楚武.胡辉红.嵌入式Linux中基于Qt_Embeded触摸屏驱动的设计【J】.中国仪器仪表,2006-4

【10】中国软件技术有限公司.Qt程序设计【M】.清华大学出版社,2002 【11】DanielSolin,袁鹏飞译.24小时学通Qt编程【M】.人民邮电出版社,2005

本文来源:https://www.bwwdw.com/article/8c1g.html

Top