1、基于ARM的计算器设计课程设计嵌入式系统应用课程设计题目 基于ARM的计算器设计 专业 通信工程 班级 2012级3班 学生姓名(学号) 袁 平 20120343007 学生姓名(学号) 黄 飞 20120343030 学生姓名(学号) 组长 袁平 2015年 06 月 27日设计要求基本要求以友善之臂开发板及QT为平台,实现多功能计算器的设计能单独的进行简单的四则运算扩展部分能进行数的平方,开根号,及阶乘界面要求简洁美观,容易用户操作 摘要 电子计算器作为计算工具,为人们的生活带来了很多的方便与实惠。随着科学技术的进步,尤其是电子工业技术的发展,计算器已经从先前的半导体技术实现到现在的广泛喜
2、爱用高集成度芯片实现的多功能计算器,不管是白领办公室还是菜市场的小贩,计算器的出现让他们高效率的完成任务。计算器扮演了一个重要的角色。本设计是用C+编写的,基于Qt图形用户界面应用程序框架的计算器。设计出的应用程序,实现了一定的计算功能。关键字:QtC+计算器第一章 前言1.1设计背景计算器(calculator;counter)一般是指“电子计算器”,计算器是能进行数学运算的手持机器,拥有集成电路芯片,其结构简单,比现代电脑结构简单得多,可以说是第一代的电子计算机(电脑)。计算器这一小小的程序机器实际上是从计算机中割裂出来的衍生品,虽然功能较单一,但因其操作模式的方便快捷和价格的低廉,携带方
3、便等特点,已经被广泛应用于工程、学习、商业贸易等日常生活中,极大的方便了人们对于数字的整合运算,成为人们生活和办公中的必备品之一,深得使用者的青睐。1.2设计目的本程序是基于linux下的嵌入式开发,所用软件为QT Creator,程序虽然简单,但是通过本程序的设计,可以进一步了解嵌入式系统开发工具以及熟悉linux环境下的常用命令,为以后进入嵌入式领域打下一定的基础。通过该计算器程序软件的设计,培养独立思考、综合运用所学有关相应知识的能力,更好地巩固C+程序语言设计和高级程序设计课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,体验理论与实践相结合的过程。第二章 流程图2.1
4、功能描述本次设计的计算器在功能上大致与Windows系统自带的计算器程序相似,对于所设计的科学计算器,其功能大致为可以进行加(+)、减(-)、乘(*)、除(/)、简单算术计算及平方和开方。由于接触QT时间还不太久,所以目前只能简单地实现这些功能,相信随着以后逐步的了解,本程序将实现更多的功能。第三章 开发工具简介3.1 QT简介由于本次设计的小程序是用QT Creator所设计的,所以我觉得有必要先介绍下QT开发工具的背景。Qt是一个1991年由奇趣科技开发的跨平台C+图形界面应用程序开发框架。它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台工具和服务器。Qt是面向对象语言,易于扩
5、展,并且允许组件编程。QT所具有的优势是:优良的跨平台特性,Qt支持下列操作系统: Microsoft Windows 95/98, Microsoft Windows NT, Linux, Solaris, SunOS, HP-UX, Digital UNIX (OSF/1, Tru64), Irix, FreeBSD, BSD/OS, SCO, AIX, OS390,QNX 等等。 面向对象:Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常 方便的。 Qt 提供了一种称为 signals/slots 的安全类型来替代 callback,这使得各个元件
6、 之间的协同工作变得十分简单。 丰富的 API:Qt 包括多达 250 个以上的 C+ 类,还提供基于模板的 collections, serialization, file, I/O device, directory management, date/time 类。甚至还包括正则表达式的处理 功能。支持 2D/3D 图形渲染,支持 OpenGL大量的开发文档。第四章 详细设计过程4.1工程的创建打开QtCreator,如图1所示。图1选择File-New File or Project,然后在弹出的对话框中选择Applications-Qt Gui应用(如图2所示),然后进入下一步。图2定
7、义新工程的工程名JSQ.pro并选择保存路径(如图3所示),然后进入下一步,在出现图4的界面中基类选择QDialog,最后完成新工程的创建。图3图44.2图形界面的设计分析计算器的按键我们可以把按键事件分为以下三类,一是简单的数字按键,主要进行数字的录入,这类按键包括按键09;二是运算操作键,用于输入数学运算符号,进行数学运算和结果的显示,这类按键包括“+”,“-”,“*”,“/”,“=”等等;三是清屏操作键,用于显示框显示信息的清除。进入刚才创建的空工程,双击左侧的JSQ.pro,在主编辑框中目前显示JSQ.pro的内容为空(如图5)。图5 点击dialog.ui进入其界面(如图6)。选择3
8、个控件分别是PushButton,LCDNumber和BoxLayou。界面设计(如图7)。图6图7按钮设置:选中要设置的按钮右键单击,选择“改变文本”,然后输入字符即可。其次,同样选中按钮右键单击,选中“改变对象名称”出现如下界面:输入对象名称即可。图8图94.3程序代码的实现计算器程序主要分以下两部分工作:一是实现计算器的图形界面;二是实现按键事件和该事件对应的功能绑定,即信号和对应处理槽函数的绑定。分析计算器的按键我们可以把按键事件分为以下三类,一是简单的数字按键,主要进行数字的录入,这类按键包括按键09;二是运算操作键,用于输入数学运算符号,进行数学运算和结果的显示;三是清屏操作键,用
9、于显示框显示信息的清除。信号和对应处理槽函数的绑定。以数字1为例:选中按钮1右键单击,选择“转到槽.”,在出现的界面单击“确定”即可计算器程序源代码的分析说明1) 对calculator.h源代码的简要说明#ifndef DIALOG_H#define DIALOG_H#include namespace Ui class Dialog;class Dialog : public QDialog Q_OBJECT public: explicit Dialog(QWidget *parent = 0); Dialog(); private: Ui:Dialog *ui;private slot
10、s: void button1(); void button2(); void button3(); void button4(); void button5(); void button6(); void button7(); void button8(); void button9(); void button0(); void buttonPoint(); void buttonAdd(); void buttonSub(); void buttonMul(); void buttonDivision(); void buttonSquare(); void buttonReciproc
11、al(); void buttonEvolution(); void buttonFactorial(); void buttonEqual(); void buttonEmpty(); void buttonDel();#endif / DIALOG_H2) 对calculator.cpp源代码的简要说明#include dialog.h#include ui_dialog.h#include Dialog:Dialog(QWidget *parent) : QDialog(parent), ui(new Ui:Dialog) ui-setupUi(this); ui-lcdNumber-s
12、etNumDigits(10); setWindowTitle(Calculator); connect(ui-pushButton_1,SIGNAL(clicked(),this,SLOT(button1(); connect(ui-pushButton_2,SIGNAL(clicked(),this,SLOT(button2(); connect(ui-pushButton_3,SIGNAL(clicked(),this,SLOT(button3(); connect(ui-pushButton_4,SIGNAL(clicked(),this,SLOT(button4(); connect
13、(ui-pushButton_5,SIGNAL(clicked(),this,SLOT(button5(); connect(ui-pushButton_6,SIGNAL(clicked(),this,SLOT(button6(); connect(ui-pushButton_7,SIGNAL(clicked(),this,SLOT(button7(); connect(ui-pushButton_8,SIGNAL(clicked(),this,SLOT(button8(); connect(ui-pushButton_9,SIGNAL(clicked(),this,SLOT(button9(
14、); connect(ui-pushButton_0,SIGNAL(clicked(),this,SLOT(button0(); connect(ui-pushButton_point,SIGNAL(clicked(),this,SLOT(buttonPoint(); connect(ui-pushButton_add,SIGNAL(clicked(),this,SLOT(buttonAdd(); connect(ui-pushButton_sub,SIGNAL(clicked(),this,SLOT(buttonSub(); connect(ui-pushButton_mul,SIGNAL(
15、clicked(),this,SLOT(buttonMul(); connect(ui-pushButton_division,SIGNAL(clicked(),this,SLOT(buttonDivision(); connect(ui-pushButton_equal,SIGNAL(clicked(),this,SLOT(buttonEqual(); connect(ui-pushButton_empty,SIGNAL(clicked(),this,SLOT(buttonEmpty(); connect(ui-pushButton_del,SIGNAL(clicked(),this,SLO
16、T(buttonDel(); connect(ui-pushButton_square,SIGNAL(clicked(),this,SLOT(buttonSquare(); connect(ui-pushButton_reciprocal,SIGNAL(clicked(),this,SLOT(buttonReciprocal(); connect(ui-pushButton_evolution,SIGNAL(clicked(),this,SLOT(buttonEvolution(); connect(ui-pushButton_factorial,SIGNAL(clicked(),this,S
17、LOT(buttonFactorial();Dialog:Dialog() delete ui;/QString sum,sum1;int aa; void Dialog:button1() sum = sum.append(1); ui-lcdNumber-display(sum);void Dialog:button2() sum = sum.append(2); ui-lcdNumber-display(sum);void Dialog:button3() sum = sum.append(3); ui-lcdNumber-display(sum);void Dialog:button4
18、() sum = sum.append(4); ui-lcdNumber-display(sum);void Dialog:button5() sum = sum.append(5); ui-lcdNumber-display(sum);void Dialog:button6() sum = sum.append(6); ui-lcdNumber-display(sum);void Dialog:button7() sum = sum.append(7); ui-lcdNumber-display(sum);void Dialog:button8() sum = sum.append(8);
19、ui-lcdNumber-display(sum);void Dialog:button9() sum = sum.append(9); ui-lcdNumber-display(sum);void Dialog:button0() sum = sum.append(0); ui-lcdNumber-display(sum);void Dialog:buttonPoint() sum = sum.append(.); ui-lcdNumber-display(sum);void Dialog:buttonEmpty() sum = ; ui-lcdNumber-display(0);void
20、Dialog:buttonDel() sum = sum.left(sum.size()-1); ui-lcdNumber-display(sum);/void Dialog:buttonAdd() sum1 = sum; sum = ; aa = 0; QString str = sum1; str = str.append(+); ui-label-setText(str);void Dialog:buttonSub() sum1 = sum; sum = ; aa = 1; QString str = sum1; str = str.append(-); ui-label-setText
21、(str);void Dialog:buttonMul() sum1 = sum; sum = ; aa = 2; QString str = sum1; str = str.append(*); ui-label-setText(str);void Dialog:buttonDivision() sum1 = sum; sum = ; aa = 3; QString str = sum1; str = str.append(/); ui-label-setText(str);void Dialog:buttonSquare() QString str; str = sum; double a
22、 = str.toDouble();/ str = str.append;/ ui-label-setText(str); ui-lcdNumber-display(a*a); sum = sum.setNum(a*a);void Dialog:buttonReciprocal() QString str; str = sum; double a = str.toDouble();/ str = str.append; / ui-label-setText(str); ui-lcdNumber-display(1/a); sum = sum.setNum(1/a);void Dialog:bu
23、ttonEvolution() QString str; str = sum; double a = str.toDouble();/ str = str.append;/ ui-label-setText(str); a = sqrt(a); ui-lcdNumber-display(a); sum = sum.setNum(a);void Dialog:buttonFactorial() QString str; str = sum; int a = str.toInt(); int b = a; for(int i = 1; ilabel-setText(str); ui-lcdNumb
24、er-display(a); sum = sum.setNum(a);void Dialog:buttonEqual() QString first,second,str; first = sum; second = sum1; double a = first.toDouble(); double b = second.toDouble(); switch (aa) case 0: b = b + a;ui-lcdNumber-display(b);break; case 1: b = b - a;ui-lcdNumber-display(b);break; case 2: b = b *
25、a;ui-lcdNumber-display(b);break; case 3: b = b / a;ui-lcdNumber-display(b);break; default: break; sum = sum.setNum(b); str = ; ui-label-setText(str);第5章 程序测试 第六章 课程总结这次的简易计算机的编写,能实现基本的加减乘除算法及平方和开方,也能实现小数的加减乘除,通过此次的QT学习以及上学期的C+学习,深刻的了解到设计程序并不是一件简单的事情。并且通过网上了解到QT的强大功能,虽然现在本人的技术及知识还很贫乏,但是相信通过现在及日后的学习一定
26、可以达到自己想要达到的水平。 就这次的课程设计报告来说,从最初的相当陌生到现在的可以理解使用。但还有一些问题没有彻底理解。此次课程设计并没有完全构成当初想的那样,但认为还是基本满足了老师的要求。对于以后学习嵌入式也打下了一定的基础,最后也谢谢方飞老师上课时耐心的讲解。参考文献1 邹思轶嵌入式 Linux 设计与应用M北京:清华大学出版社,2002:318-3252 张石.ARM嵌入式系统教程M.北京:机械工业出版社,2012:191-261.3 闫锋欣,曾泉人.C+ GUI QT4编程(第二版)M.北京:电子工业出版社,2010:108-232.4 闫放莺基于嵌入式 Linux 软件平台技术的
27、研究D西安:西北大学,20065 郭兵嵌入式软件开放式集成开发平台体系结构研究D成都:电子科技大学,20026 谭浩强.C+面向对象程序设计M.北京:清华大学出版社,2006.69-111.毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。作 者 签 名: 日 期: 指导教
28、师签名: 日期: 使用授权说明本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。作者签名: 日 期: 学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明
29、。本人完全意识到本声明的法律后果由本人承担。作者签名: 日期: 年 月 日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。涉密论文按学校规定处理。作者签名: 日期: 年 月 日导师签名: 日期: 年 月 日指导教师评阅书指导教师评价:一、撰写(设计)过程1、学生在论文(设计)过程中的治学态度、工作精神 优 良 中 及格 不及格2、学生掌握专业知识、技能的扎实程度 优 良 中 及格 不及格3、学生综合运用所学知识和专业技能分析和解决问题
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1