当前位置:首页 >> 工学 >>

迷你计算器设计


《嵌入式系统》课程设计说明书

迷你计算器设计
院 、 部: 学生姓名

湖南工学院嵌入式系统课程设计课题任务书
指导教师 课题名称 学生姓名

迷你计算器设计

一、目标 在 GEC210 开发板上使用 QT 设计一个迷你计算器。 二、任务 根据控制要求,明确设计任务,拟定设计方案与进度计划,运用所学的理论知识, 进行迷你计算器原理设计、程序框架设计、创新设计,提高理论知识、系统调试能力、 分析问题与解决问题的能力。主要内容包括: 1. 嵌入式交叉开发环境搭建。 2. Linux 操作系统的移植。 3. 根据需求确定外围模块设计并完成相应驱动开发。 4. 应用程序原理及框架设计。 5. Linux 下应用程序编写及移植。 内 容 及 任 务 6. 系统总体功能调试。 7. 编写设计说明书。 三、要求 1.迷你计算器的功能显示界面示例如下:

2.能够完成十进制数的加、减、乘、除等简单计算。 3.对不正确的表达式能指出其错误。

I

[1]马忠梅,ARM & Linux 嵌入式系统教程(第 3 版)[M]。北京:北京航空航天大学出 版社,2014 主 要 参 考 资 料 [2]曹忠明,程姚根。从实践中学嵌入式 Linux 操作系统[M]。北京:电子工业出版社, 2012 [3]宋宝华,Linux 设备驱动开发详解(第二版)[M]。北京:人民邮电出版社,2010。 [4]韦东山,嵌入式 Linux 应用开发完全手册[M]。北京:人民邮电出版社,2008 [5] 陆文周,Qt5 开发及实例[M]。北京:电子工业出版社,2015 [6] Stephen Prata,C Primer Plus[M]。北京:人民邮电出版社,2005

教 研 室 意 见

教研室主任: 年 月 日

II





人类已经进入信息化时代。信息技术发展如新月异,计算器已经进入人们生活的 各个领域,在现代生活中不可或缺。大型复杂的计算是人脑不能胜任的,而且比较容 易出错。本文针对 QT 计算器进行研究,设有简单的四则运算:“+”、“-”、“*”、 “/”,给用户带来了很多方便,并且提高了用户的运算效率。 本文从项目背景、需求分析、软件设计等方面详细说明了 QT 计算器的开发设计过程。 软件采用 VM 虚拟机,用 Linux 编写代码,QT 设计界面来开发。计算器包含简单计算 功能。 计算器具有界面可视化,方便用户操作等特点,用户只能使用计算器做简单的四 则运算,尽管如此,此计算器还是能够满足人们日常简单的运算,为用户提供了有效 保证。

关键词:计算器;四则运算;QT 设计界面;Linux

III





1 嵌入式系统基础 ......................................................... 1 1.1 嵌入式系统的基本概述 ............................................. 1 1.1.1 嵌入式系统的基本概念 ........................................ 1 1.1.2 嵌入式系统的体系结构 ........................................ 2 1.1.3 嵌入式系统发展趋势 .......................................... 2 1.2 ARM 处理器硬件平台................................................ 3 1.2.1 嵌入式处理器简介 ............................................ 3 1.2.2 ARM 处理器简介 .............................................. 3 2Qt 开发工具简介 ......................................................... 4 2.1 Qt 概述........................................................... 4 2.2 Qt 主要特点....................................................... 4 2.3 Qt 编程机制简介................................................... 5 3 项目设计 ............................................................... 8 3.1 项目构想 ......................................................... 8 3.2 需求分析 ......................................................... 8 3.2.1 功能需求.................................................... 8 3.2.2 功能分析.................................................... 9 3.2.3 硬件需求.................................................... 9 3.2.4 软件需求.................................................... 9 3.2.5 程序流程图................................................. 10 4 嵌入式计算器的设计与实现 .............................................. 11 4.1 项目实施 ........................................................ 11 4.1.1 创建工程................................................... 11 4.1.2 计算器程序的实现........................................... 11 4.1.3 计算器程序的编译运行 ....................................... 13 5 项目总结 .............................................................. 14 致 谢.................................................................. 15 参考文献................................................................ 16 附录.................................................................... 17

IV

1

嵌入式系统基础

1.1 嵌入式系统的基本概述
在社会日益信息化的今天,计算机和网络的应用已经全面渗透到日常生活 中。应用嵌入式系统的电子产品随处可见,如人们平常使用的手机、摄像机、医 疗仪器、汽车。在经济发达国家,每个家庭平均拥有 255 个嵌入式系统,如每辆 汽车平均装有 35 个嵌入式系统。嵌入式系统的应用广泛进入到工业、军事、宇 宙、通信、运输、金融、医疗、气象、农业等众多领域。 1.1.1 嵌入式系统的基本概念 在嵌入式系统行业内有一个被普遍接受的定义:嵌入式系统是以应用为中 心,以计算机控制系统为基础,并且软硬件可裁减,适用于应用系统对功能、可 靠性、成本、体积、功耗有严格要求的专用计算机系统。将一套计算机控制系统 嵌入到已具有某种完整的特定功能的(或者将会具备完整功能的)系统内(例如 各种机械设备),以实现对原有系统的计算机控制,此时将这个计算机控制系统 叫做嵌入式系统。 简单地说, 嵌入式系统就是被嵌入到电子设备中的专用计算系 统。 嵌入式系统通常由特定功能模块和计算机控制模块组成,主要由嵌入式微处 理器、 外围硬件设备、 嵌入式操作系统以及用户应用软件等部分组成。 它具有 “嵌 入性”、“专用性”、与“计算机系统”的三个基本要素。嵌入式系统的特点如 下。 (1) 面向特定应用。 (2) 嵌入式系统的硬件和软件都必须进行高效地设计。 (3) 嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行 业的具体应用相结合的产物。 (4) 为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在 存储器芯片中或单片机本身,而不是存储于磁盘中。 (5) 嵌入式开发的软件代码尤其要求高质量、高可靠性。 (6) 嵌入式系统本身不具备二次开发功能,即设计完成后用户通常不能在 该平台上直接对程序进行修改,必须有一套开发工具和环境才能进行 再次开发。

1

1.1.2 嵌入式系统的体系结构 嵌入式系统是一类特殊的计算机系统,一般包括硬件设备、嵌入式操作系统 和应用软件。它们之间的关系如图 1 所示。

应用软件

嵌入式操作系统

硬件设备 嵌入式处理器/外围设 备

图飞 1 嵌入式系统的组成

硬件设备包括嵌入式处理器和外围设备。 其中的嵌入式处理器是嵌入式系统 的核心部分, 它与通用处理器最大的区别在于,嵌入式处理器大多工作在为特定 用户群所专门设计的系统中, 它将通用处理器中许多由板卡完成的任务集成到芯 片内部, 从而有利于嵌入式系统在设计时趋于小型化,同时还具有很高的效率和 可靠性。 外围设备是指嵌入式系统中用于完成存储、通信、调试、显示等辅助功能的 其他部件。 目前常用的嵌入式外围设备按功能可以分为存储设备 (如 RAM、 SRAM、 Flash 等)、通信设备(如 RS-232 接口、SPI 接口、以太网接口、USB 接口、无 线通信等)和显示设备(如显示屏等)3 类。 1.1.3 嵌入式系统发展趋势 1. 提供强大的网络服务 针对外部联网要求,嵌入设备必须配有通信接口,相应需要 TCP/IP 协议簇 软件支持; 为满足家用电器相互关联及实验现场仪器的协调工作等要求,新一代 嵌入式设备还需要具备 IEEE1394、USB、CAN、Bluetooth 或 IrDA 通信接口,同 时也需要提供相应的通信组网协议软件和物理层驱动软件。 为了支持应用软件的 特定编辑模式,还需要相应的浏览器。 2. 小型化、低成本、低功耗 为满足这种特性, 要求嵌入式产品设计者相应降低处理器的性能,限制内存 容量和复用接口芯片。这就相应提高了对嵌入式软件设计技术要求。 3. 人性化的人机界面
2

用户之所以乐于接受嵌入式设备, 其重要因素之一是它们与使用者之间的亲 和力。 它具有自然的人机交互界面。人们与信息终端交互要求以 GUI 屏幕为主的 多媒体界面。 4. 完善的开发平台 随着 Internet 技术的成熟、带宽的提高,ICP 和 ASP 在网上提供的信息内 容日趋丰富、应用项目多种多样。为了满足应用功能的升级,设计者一方面采用 更强大的嵌入式处理器,如 32 位、64 位 RISC 芯片或数字信号处理器(DSP)增 强处理能力; 同时还采用实时多任务编程技术和交叉开发工具技术来控制功能复 杂性,简化应用程序设计、保障软件质量和缩短开发周期。

1.2 ARM 处理器硬件平台
1.2.1 嵌入式处理器简介 嵌入式系统的核心部件是各种类型的嵌入式处理器,据不完全统计,全世界 嵌入式处理器的品种总量已经超过 1000 种,流行的体系结构有 30 多个系列,数 据总线宽度从 8 位到 32 位, 处理速度从 0.1 到 2000MIPS (MIPS 指每秒执行的百 万条指令数)。按功能和内部结构等因素,嵌入式系统硬件平台可以分为嵌入式 RISC 微处理器、嵌入式 CISC 微处理器两种。它们之间主要区别如表 1 所示。
表 1 RISC 和 CISC 之间的主要区别 指标 指令集 流水线 寄存器 Load/Store 结构 RISC CISC 一个周期执行一条指令, 通过简单指 指令长度不固定,执行需 令的组合实现复杂操作; 指令长度固定 要多个周期 流水线每周期前进一步 更多通用寄存器 独立的 Load 和 Store 指令完成数据 在寄存器和外部存储器之间的传输 指令的执行需要调用微代 码的一个微程序 用于特定目的的专用寄存器 处理器能够直接处理存储 器中的数据

1.2.2 ARM 处理器简介 ARM 有 3 种含义,它是一个公司的名称,是一类微处理器的通称,还是一种 技术的名称。ARM 公司是微处理器行业的一家知名企业,其设计了大量高性能、 廉价、低耗能的 RISC 芯片,并开发了相关技术和软件。ARM 处理器具有高性能、 低成本和低功耗的特点,适用于嵌入式控制、消费/教育类多媒体、DSP 和移动 式应用等领域。 ARM 处理器的产品分为多个系列,包括 ARM7、ARM9、ARM9E、ARM10E、ARM11 和 SecurCore 等。每个系列提供一套特定的性能来满足设计者对功耗、性能、体
3

积的需求。SecurCore 是独立的一个产品系列,是专门为安全设备而设计的。

2

Qt 开发工具简介

Qt 作为嵌入式 Linux 环境下图形用户界面的强大编成工具,能给用户提供 精美图形界面所需要的所有元素,已经得到越来越广泛的应用。

2.1 Qt 概述
Qt 是一个跨平台的 C++图形用户界面库,由挪威 TrollTech 公司开发,目前 包括 Qt/X11、基于 Framebuffer 的 Qt/Embedded、快速开发工具 Qt Designer 以及国际化工具 Qt Linguist 等。人们所熟知的 Linux 下面的 KDE 环境就是基于 Qt 开发而成的。Qt 支持 Unix 和 Linux 系统以及 Windows 系统。 Qt 能以漂亮的用户界面,快速而有效地开发软件。专业版,用于创造成功 地商业贸易方面的跨平台软件,技术支持可依赖于 Troll Tech 公司。Qt 自由版 已经成为用 C++ GUI 工具包在 Unix 上自由软件的开发的主流,并获得广泛的认 可,它是 Linux 上流行的 KDE 桌面环境的基础。这意味着在 Internet 上有很多 关于 Qt 编程的有用资源,比如 Qt 发布程序和一个动态的 Qt 编程人员的 E-mail 列表。 Qt 有广阔的应用前景,开发 Qt 绝对安全,Troll Tech 公司将负责维护 Qt, 他们将持续地为最新的版本在公布给自由软件联盟方面提供合法保障。

2.2 Qt 主要特点
Qt 的主要特点有:面向对象,很容易扩展,并且允许真正的组件编程;Qt 对各个模块进行了良好的封装, 使各模块可重用性较好; 优良的跨平台特性, 使 用 Qt 类编写的程序可以实现 “一次编码,到处编译”,极大的降低了跨平台开 发的难度(丁丁等,2004);构件支持,对于对象间通信,Qt 没有采用函数回 调的方法, 而是采用了一种全新并且可选的被称为“信号与槽”的对象间通信机 制,通过一个对象信号的发射,另一个槽函数的响应,使各个对象之间的通信安 全而且高效。Qt 的这些特点使它非常适合于真正的构件编程,同时使各个组件 之间的协同工作变得十分简单, 并且 Qt 是直接基于 Xlib 的,不依赖 Motif 工 具包,所以它的执行效率比一般的基于平台的代码的执行效率要高。

4

2.3 Qt 编程机制简介
1. Qt 系统的信号与槽机制简介 信号/槽机制是 Qt 的一个中心特征并且也许是 Qt 与其它工具包的最不相同 的部分。 在图形用户界面编程中,我们经常希望一个窗口部件的一个变化被通知 给另一个窗口部件。 更一般地, 我们希望任何一类的对象可以和其它对象进行通 讯。 较老的工具包使用一种被称作回调的通讯方式来实现同一目的。 回调是指一 个函数的指针, 所以如果你希望一个处理函数通知你一些事件,你可以把另一个 函数 (回调) 的指针传递给处理函数。 处理函数在适当的时候调用回调 (倪继利, 2006)。回调有两个主要缺点。首先他们不是类型安全的。我们从来都不能确定 处理函数使用了正确的参数来调用回调。因此容易造成进程崩溃,另外一个问题 是, 回调这种方式紧紧的绑定了图形用户接口的功能元素,因而很难把开发进行 独立的分类。 Qt 的信号与槽机制是不同的。Qt 的信号与槽均以函数形式出现,Qt 的窗口 部件有很多预定义的信号, 但我们也可以通过继承来加入我们自己的信号。槽就 是一个可以被调用处理特定信号的函数。Qt 的窗口部件有很多预定义的槽,但 是通常的习惯是你可以加入自己的槽,这样你就可以处理你所感兴趣的信号。我 们可以用 connect()函数对需要的信号和槽进行连接。当对象的内部状态发生改 变,信号就被发射。从某种意义上讲,它们也许对外面的世界感兴趣。这就是所 有的对象通讯时所做的一切。 它不知道也不注意无论有没有东西接收它所发射的 信号。当一个信号被发射,它所连接的槽会被立即执行,就像一个普通函数调用 一样(见图 2.1)。信号/槽机制完全不依赖于任何一种图形用户界面的事件回 路。 当所有的槽都返回后发射的信号也将返回。信号与插槽机制并不要求类之间 互相知道细节,这样就可以相对容易的开发出代码可高重用的类 (Matthias Dalheimer,2002)。 信号和槽的机制是类型安全的: 一个信号的签名必须与它的接收槽的签名相 匹配。 (实际上一个槽的签名可以比它接收的信号的签名少,因为它可以忽略额 外的签名。)因为签名是一致的,编译器就可以帮助我们检测类型不匹配。它以 警告的方式报告类型错误, 而不会使系统产生崩溃。信号和槽是宽松地联系在一 起的:一个发射信号的类不用知道也不用注意哪个槽要接收这个信号 (Johan Thelin,2007)。Qt 的信号和槽的机制可以保证如果你把一个信号和一个槽连接
5

起来, 槽会在正确的时间使用信号的参数而被调用。 信号和槽可以使用任何数量、 任何类型的参数。它们是完全类型安全的:不会再有回调核心转储(core dump)。 你可以把许多信号和你所希望的单一槽相连, 并且一个信号也可以和你所期望的 许多槽相连。把一个信号和另一个信号直接相连也是可以的。(这时,只要第一 个信号被发射时,第二个信号立刻就被发射。) 总体来看, 信号和槽构成了一个强有力的组件编程机制。如果一个类要使用 信号与槽机制, 它就必须是从 QObject 或 QObject 的子类继承,而且类的定义必 须加上 Q_OBJECT 宏。signals、slots 和 emit 是 Qt 特有的关键字,分别用来表 示信号、槽、和发送信号,移除这些关键字和预处理程序,就可以使用标准的 C++编译器。槽同其他函数一样也具有访问权限,只是槽的访问权限决定了谁可 以和它相连,如一个 public slots: 包含了任何信号都可以相连的槽 (Andrew Krause,2007) 。一个 protected slots:包含了只有这个类和它的子类的信号才 能连接的槽。这就是说这些槽只是类的实现的一部分,而不是它和外界的接口。 一个 private slots:包含了只有这个类本身的信号可以连接的槽,甚至它的子 类都没有获得连接的权利。 2. Qt 元对象系统 Qt 中的元对象系统是用来处理对象间通讯的信号/槽机制、运行时的类型信 息和动态属性系统。它基于下列三类: QObject 类、类声明中的私有段中的 Q_OBJECT 宏、元对象编译器(moc)。 moc 读取 C++ 源文件。如果它发现其中包含一个或多个类的声明中含有 Q_OBJECT 宏,它就会给含有 Q_OBJECT 宏的类生成另一个含有元对象代码的 C++ 源文件。这个生成的源文件可以被类的源文件包含(#include)到或者和这个类 的实现一起编译和连接。 除了提供对象间通讯的信号和槽机制之外(介绍这个系统的主要原因), QObject 中的元对象代码实现其它特征: className()函数在运行的时候以字符串返回类的名称,不需要 C++编译器中的 本地运行类型信息(RTTI)的支持。 inherits()函数返回这个对象是否是一个继承于 QObject 继承树中一个特 定类的类的实例。 tr()和 trUtf8() 两个函数是用于国际化中的字符串翻译。 setProperty()函数和 property()函数,这两个函数是用来通过名称动态设 置和获得对象属性的。 metaObject()函数返回这个类所关联的元对象。 虽然使用 QObject 作为一个基类而不使用 Q_OBJECT 宏和元对象代码是可以

6

的,但是如果 Q_OBJECT 宏没有被使用,那么这里的信号和槽以及其它特征描述 都不会被提供。 根据元对象系统的观点,一个没有元代码的 QObject 的子类和它 含有元对象代码的最近的祖先相同。举例来说就是,className()将不会返回你 的类的实际名称,返回的是它的这个祖先的名称。故强烈建议 QObject 的所有 子类使用 Q_OBJECT 宏,而不管它们是否实际使用了信号、槽和属性(Jonathan Corbet, 2005)。

7

3

项目设计

3.1 项目构想
根据《嵌入式 Linux 应用开发》课程设计说明以及网上的一些介绍,我决定 此次课程设计将制作一个简易的四则计算器。当今社会,计算器已经成了人们工 作生活中必不可少的一种计算工具,有了计算器,人们在需要算数的时候就会很 快的得出答案,并且能保证结果的准确性。以前,人们有算盘之类的算数工具, 但相比计算器而言就没那么直观、方便,还不易学习。计算器的发明无疑成了人 们最好的帮手。 因此, 通过这样的启发, 我决定自己亲手尝试做一个简易计算器, 从而能够让自己了解计算器内部的程序结构。 3.2 需求分析 3.2.1 功能需求 在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语法 及语义分析原理的理解,并实现对命令语句的灵活应用。在程序设计中,可以用 两种方法解决问题: 一是传统的结构化程序设计方法,二是更先进的面向对象程 序设计方法。 而在面向对象程序设计中关键是如何将问题域中的实体(即日常所 见的概念)抽取出来,作为 C++程序中的类,而属性与行为作为类的两类要素通 常是必不可少的,甚至还应考虑类必须满足的约束。 我们日常生活的开支?大额数字或是多倍小数的计算都需要计算器的帮助 处理数字的开方、正余弦都离不开计算器。虽然现在的计算器价格比较低廉,但 是功能过于简单的不能满足个人需求,功能多的价格较贵,操作不便不说,很多 功能根本用不到。 所以, 我们想到可不可以用自己的所学为自己设计开发一个属 于自己的简单计算器来完成日常生活的需求。 计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除、开方、 求倒数等简单运算的工具。要实现计算功能,可以用 C++和 Qt 的知识编写程序 来解决此问题。 该计算器大大的降低了数字计算的难度及提高了计算的准确度和
8

精确度。 该计算器使用非常简单和方便, 对广大中小学生的学习有巨大帮助作用, 也对在职人员的工作有点帮助作用。本文的程序设计设计工作环境为 Fedora-VMware workstation、QtCreator,在程序设计中,采用了结构化与面向 对象两种解决问题的方法。 3.2.2 功能分析 该计算器采用简单的四则运算模块。这一模块要求进行加减乘除运算。支持 十进制的直接输入、计算,并设有清除键、等号键。当输入等号键时直接给出当 前算式的运算结果。 3.2.3 硬件需求 GEC210 开发板简介 GEC210 是一款高性能的 Cortex A8 核心板,它由广州粤嵌股份设计、生产 和发行销售。它采用三星 S5PV210 作为主处理器,运行主频可高 1GHz。S5PV210 内部集成了 PowerVR SGX540 高性能图形引擎,支持 3D 图形流畅运行,并可流 畅播放 1080P 大尺寸视频。 GEC210 主要采用了 2.0mm 间距的双排针,引出 CPU 大部分常用功能引脚, 另外还根据 S5PV210 芯片的特性,分别引出了标准的 miniHDMI 接口,GEC210 板 载 512M DDR2 内存,可流畅运行 Android, Linux 和 WinCE6 等高级操作系统。它 非常适合开发高端物联网终端,广告多媒体终端,智能家居,高端监控系统,游 戏机控制板等设备。 3.2.4 软件需求 要实现项目需求目标,完成项目任务,需要解决软件方案的确定问题,以下 详细列出了 8 个需要安装的软件。 1.配置超级终端 2.安装与配置 DNW 3.安装与配置虚拟机 4.安装 Linux 操作系统 5.实现 Windows 共享 6.配置 NFS 服务 7.配置 FTP 服务 8.安装与配置交叉编译工具链

9

3.2.5 程序流程图 本项目为嵌入式计算器,具体流程图如下图 2 所示。
开始

显示计算机界面

输入数值

选择功能键

判断选项









clear

结束

图 2 流程图

10

4

嵌入式计算器的设计与实现

本章内容主要为大家详细讲述一下嵌入式计算器的设计过程以及需要用到的一 些程序代码。

4.1 项目实施
4.1.1 创建工程 1.打开 QtCreator,选择 File->New File or Project,然后在弹出的对话 框中选择“其他控件”->“空的 Qt 项目”,然后进入下一步。 2.定义新工程的工程名并选择保存路径,然后进入下一步。 3.选择创建于“桌面”,点击完成,即可完成新工程的创建。如图 3 所示。

图 3 系统工程图

4.1.2 计算器程序的实现
11

计算器程序主要分以下两部分工作:一是实现计算器的图形界面;二是实现 按键事件和该事件对应的功能绑定,即信号和对应处理槽函数的绑定。 1.计算器图形界面的实现 通过分析计算器的功能我们可知,需要 16 个按键和一个显示框,同时考虑 到整体的排布, 还需要水平布局器和垂直布局器。通过组织这些类我们可以实现 一个简单的带有数字 0~9,可以进行简单四则运算且具有清屏功能的计算器。 对于这些类的具体操作会在后面的代码中详细说明。 2.信号和对应槽函数的绑定 3.分析计算器的按键我们可以把按键事件分为以下三类, 一是简单的数字按 键, 4.主要进行数字的录入,这类按键包括按键 0~9;二是运算操作键,用于 输入数学运算符号,进行数学运算和结果的显示,这类按键包括“+”,“-”, “*”,“/”,“=”;三是清屏操作键,用于显示框显示信息的清除。 5.进入刚才创建的空工程,双击左侧的 Calculator.pro,在主编辑框中目 前显示 Calculator.pro 的内容为空,如上图 4.1 所示。这是因为目前什么文件 都没有添加的缘故。 6.添加文件 calculator.h 7.在工程 Calculator 上面点击右键, 然后点击 Add New, 选择添加 C++ Header File,进入下一步后输入文件名 calculator.h,然后完成文件的添加。 8.添加文件 calculator.cpp 和 main.cpp 9.与添加文件 calculator.h 的过程类似, 只是在选择文件类型时选择为 C++ Source File。完成后可以查看 Calculator.pro 文件的内容,整个工程的文件结 构如图 4 所示。

12

图 4 系统工程图

4.1.3 计算器程序的编译运行 1.完成程序的编辑后, 可以直接点击运行按钮,这时 QtCreator 会自动编译 源程序并生成可执行程序。 2.计算器在 PC 机上的界面如图 5 所示,可以进行简单的计算来测试计算器 的功能。

图 5 计算器界面图

3. 将其下载到目标机上运行,在此之前要先进行交叉编译。利用 FTP 登录 到目标机,将应用程序下载到目标机的/home/plg/jisuanqi 下。修改应用程序 执行权限,最后运行应用程序。计算器应成功的在目标机中显示,此时便可对计 算器做相应的测试工作,至此,项目全部完成。

13

5

项目总结

本文围绕用户的基本需求,提出了一个基于嵌入式 Qt 的计算器设计方案。 该计算器支持加、减、乘、除四则简单运算,还包括清除、等于两项功能。经反 复修改验证,各环节都能正常运行,达到了预期的目标。 由于时间关系,本文仅实现了计算器的基本功能。在计算器设计中,还存在 着许多的不足之处。 还需要更多拓展功能的支持,才能使开发出的软件为更多用 户方便的使用。我们需要做的事情还有很多,例如计算器功能的完善,界面的美 化等。总体来说,此次设计的计算器可以供很多场合使用,基本满足了大众的需 求。

14





首先,我要感谢我的指导老师,在设计过程中,每次遇到问题,老师都能耐 心的指导我,为我答疑除惑,为我顺利完成课题奠定了坚实的基础,让我更加有 信心完成此课题。从陈老师身上,我不但获得了丰富的专业知识和研究方法,还 从他身上学到了严谨的治学态度和精益求精的处事风格,使我终生受益。 感谢我的同学,他们给予我很多的帮助,在我遇到不懂的地方,他们能给我 提供很多的方法和意见。 感谢我的母校, 给了我一个浓厚的学习氛围,提供给我们丰富的图书资源和 良好的实验环境。

15

参考文献

[1]陈长顺.《嵌入式 Linux 应用开发精解》.北京航空航天大学出版社 [2]张秋香.《Qt 程序设计》.清华大学出版社 [3]赵苍明,穆煜.《嵌入式 Linux 应用开发教程》.人民邮电出版社 [4]刘峥嵘.嵌入式 Linux 应用开发详解.机械工业出版社 [5]丁林松,黄丽琴.Qt4 图形设计与嵌入式开发.人民邮电出版社

16





附录:程序源代码的分析说明
1.对 calculator.h 源代码的简要说明 calculator.h 源文件如下: #define CALCULATOR_H #define CALCULATOR_H #include<QWidget> #include<QPushButton> #include<QVBoxLayout> #include<QHBoxLayout> #include<QLineEdit> class Calculator : publicQWidget { Q_OBJECT public: Calculator(); ~Calculator(); public slots: voidzeroButtonPress(); voidoneButtonPress(); voidtwoButtonPress(); voidthreeButtonPress(); voidfourButtonPress(); voidfiveButtonPress();
17

voidsixButtonPress(); voidsevenButtonPress(); voideightButtonPress(); voidnineButtonPress(); voidaddButtonPress(); voidsubButtonPress(); voidmulButtonPress(); voiddivButtonPress(); voidclearButtonPress(); voidequButtonPress(); private: QLineEdit *operateEdit;//声明显示框 QPushButton *zeroButton;//声明数字按键? QPushButton *oneButton; QPushButton *twoButton; QPushButton *threeButton; QPushButton *fourButton; QPushButton *fiveButton; QPushButton *sixButton; QPushButton *sevenButton; QPushButton *eightButton; QPushButton *nineButton; QPushButton *clearButton;//声明运算符按键 QPushButton *addButton; QPushButton *subButton; QPushButton *divButton; QPushButton *mulButton; QPushButton *equButton; QHBoxLayout *firstLayout; QHBoxLayout *secondLayout; QHBoxLayout *thirdLayout; QHBoxLayout *fourthLayout; QVBoxLayout *mainLayout;//声明垂直布局器 QString input1;//计算器第一个运算操作数

18

QString input2;//计算器第二个运算操作数 char operate;//运算符 }; #endif 2.对 calculator.cpp 源代码的简要说明 首先是构造函数的实现: Calculator::Calculator() { operateEdit = newQLineEdit(this);//初始化显示框 operateEdit->setReadOnly(true); //设置显示框为只读 operateEdit->setText(tr("0")); zeroButton = newQPushButton;//初始化按键 zeroButton->setText(tr("0"));//设置按键上显示的标签 oneButton = newQPushButton; oneButton->setText(tr("1")); twoButton = newQPushButton; twoButton->setText(tr("2")); threeButton = newQPushButton; threeButton->setText(tr("3")); fourButton = newQPushButton; fourButton->setText(tr("4")); fiveButton = newQPushButton; fiveButton->setText(tr("5")); sixButton = newQPushButton; sixButton->setText(tr("6")); sevenButton = newQPushButton; sevenButton->setText(tr("7")); eightButton = newQPushButton; eightButton->setText(tr("8")); nineButton = newQPushButton; nineButton->setText(tr("9")); clearButton = newQPushButton; clearButton->setText(tr("Clear")); addButton = newQPushButton;

19

addButton->setText(tr("+")); subButton = newQPushButton; subButton->setText(tr("-")); mulButton = newQPushButton; mulButton->setText(tr("*")); divButton = newQPushButton; divButton->setText(tr("/")); equButton = newQPushButton; equButton->setText(tr("=")); firstLayout = newQHBoxLayout; firstLayout->addWidget(zeroButton); firstLayout->addWidget(oneButton); firstLayout->addWidget(twoButton); secondLayout = newQHBoxLayout; secondLayout->addWidget(threeButton); secondLayout->addWidget(fourButton); secondLayout->addWidget(fiveButton); secondLayout->addWidget(subButton); thirdLayout = newQHBoxLayout; thirdLayout->addWidget(sixButton); thirdLayout->addWidget(sevenButton); thirdLayout->addWidget(eightButton); thirdLayout->addWidget(mulButton); fourthLayout = newQHBoxLayout; fourthLayout->addWidget(nineButton); fourthLayout->addWidget(clearButton); fourthLayout->addWidget(equButton); fourthLayout->addWidget(divButton); mainLayout = newQVBoxLayout(this); mainLayout->addWidget(operateEdit); mainLayout->addLayout(firstLayout); mainLayout->addLayout(secondLayout); mainLayout->addLayout(thirdLayout); connect(zeroButton,SIGNAL(clicked()),this,SLOT(zeroButtonP

20

ress())); connect(oneButton,SIGNAL(clicked()),this,SLOT(oneButtonPre ss())); connect(twoButton,SIGNAL(clicked()),this,SLOT(twoButtonPre ss())); connect(threeButton,SIGNAL(clicked()),this,SLOT(threeButto nPress())); connect(fourButton,SIGNAL(clicked()),this,SLOT(fourButtonP ress())); connect(fiveButton,SIGNAL(clicked()),this,SLOT(fiveButtonP ress())); connect(sixButton,SIGNAL(clicked()),this,SLOT(sixButtonPre ss())); connect(sevenButton,SIGNAL(clicked()),this,SLOT(sevenButto nPress())); connect(eightButton,SIGNAL(clicked()),this,SLOT(eightButto nPress())); connect(nineButton,SIGNAL(clicked()),this,SLOT(nineButtonP ress())); connect(addButton,SIGNAL(clicked()),this,SLOT(addButtonPre ss())); connect(subButton,SIGNAL(clicked()),this,SLOT(subButtonPre ss())); connect(mulButton,SIGNAL(clicked()),this,SLOT(mulButtonPre ss())); connect(divButton,SIGNAL(clicked()),this,SLOT(divButtonPre ss())); connect(equButton,SIGNAL(clicked()),this,SLOT(equButtonPre ss())); connect(clearButton,SIGNAL(clicked()),this,SLOT(clearButto nPress())); this->setWindowTitle(tr("Calculator")); input2= "0"; input1 = "0";

21

operate = '0'; } 3. 根据前面对按键事件的分析,有数字输入键,运算操作符输入键和清屏 键三种,故对每种事件的槽响应函数都只说明一种,其他依此类推。 数字输入键响应槽函数,以按键“1”为例: void Calculator::oneButtonPress() { if(input2=="0")//如果当前显示框为0 { input2="1";//变0为1 } else//如果当前显示框不为0 { input2= operateEdit->text(); input2.append(tr("1"));//在显示的数据后面追加1 } operateEdit->setText(input2);//更新显示框中的显示信息 } 运算操作符输入键响应槽函数,以按键“+”为例: void Calculator::addButtonPress() { floatfirst,second; input2= operateEdit->text(); If(operate == '0') { input1 = input2; input2= "0";//清除运算操作数2中的数据 operate = '+';//把运算符键置’+’ } Else//如果是第二次按下运算符键 { second=input2.toFloat(); first=input1.toFloat();

22

switch(operate) { case'+':first = first+second;break; case'-':first = first-second;break; case'*':first = first*second;break; case'/':first = first/second;break; } input1 = QString::number(first,'f',10); input2 = "0"; operate = '+'; } operateEdit->setText(input1); } 清屏操作响应函数: void Calculator::clearButtonPress() { input2="0"; input1="0"; operateEdit->setText(input2); } 4. 对 main.cpp 源代码的简要说明 #include <QApplication> #include "calculator.h" int main(intargc, char *argv[]) { QApplication app(argc, argv); Calculator mainwindow; mainwindow.showMaximized(); return app.exec(); }

23

24


赞助商链接
相关文章:
迷你计算器设计
软件技术专业 算法与数据结构课程设计任务书 (11 级)题目:迷你计算器设计 学生姓名: 班级: 题目类型:软件工程(R) 指导教师: 学号: 一. 题目简介 该设计要求...
迷你计算器设计说明书
题目: 专业班级: 姓名: 学号: 指导教师: 成绩: 课程设计 迷你计算器设计 计算机 3 班 刘忠雄 12240304 年福忠 前 言 当今社会是信息社会,科技经济高速发展的...
13-迷你计算器设计
信息与计算科学本科专业 数据结构课程设计任务书 (10 级)题目:迷你计算器设计 学生姓名: 班级: 题目类型:软件工程(R) 指导教师: 学号: 一. 题目简介 该设计要...
迷你计算器设计
同 WINDOWS 自带计算器运算相同。 系统模块划分如下图 2.1: 5 迷你计算器 设置各个按钮 行为 面板设计 数字按钮功能 的实现 操作符(+—*/=) 按钮功能实现 ...
迷你计算器设计说明书
*** 实践教学 *** 兰州理工大学计算机与通信学院 2013 年秋季学期 Java 课程设计 题目: 迷你计算器设计 专业班级: 姓名: 学号: 指导教师: 成绩: 摘 要 目前...
迷你计算器设计
迷你计算器设计_工学_高等教育_教育专区。c++实现迷你计算器*** 实践教学 *** 兰州理工大学计算机与通信学院 2009 年秋季学期 面向对象编程训练课程设计 题 目:...
迷你计算器
计算机与通信学院 2013 年秋季学期 面向对象 课程设计 题目: 专业班级: 姓名: 学号: 指导教师: 成绩: 迷你计算器 前问题描述: 编写一个程序来实现算术计算器。...
10-迷你计算器设计
计算机科学与技术本科专业 Java 课程设计任务书(10 级)题目:迷你计算器设计 学生姓名: 班级: 题目类型:软件工程(R) 一. 题目简介 指导教师: 学号: 该设计要求...
迷你计算器说明书
迷你计算器设计 16页 10财富值 ENKO KK-105B科学计算器使... 2页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈...
计算器可爱 计算器迷你价格_图文
计算器可爱 计算器迷你价格 - 慧采科技 http://www.quandeli.com NC-1680 广博语音型计算器 订货号:HC01099297 折扣价?***.56 销售价?35...
更多相关标签: