基于ARM的计算器设计课程设计.docx
- 文档编号:25592384
- 上传时间:2023-06-10
- 格式:DOCX
- 页数:31
- 大小:705.53KB
基于ARM的计算器设计课程设计.docx
《基于ARM的计算器设计课程设计.docx》由会员分享,可在线阅读,更多相关《基于ARM的计算器设计课程设计.docx(31页珍藏版)》请在冰豆网上搜索。
基于ARM的计算器设计课程设计
嵌入式系统应用课程设计
题目基于ARM的计算器设计
专业通信工程
班级2012级3班
学生姓名(学号)袁平20120343007
学生姓名(学号)黄飞20120343030
学生姓名(学号)
组长袁平
2015年06月27日
设计要求
基本要求
以友善之臂开发板及QT为平台,实现多功能计算器的设计
能单独的进行简单的四则运算
扩展部分
能进行数的平方,开根号,及阶乘
界面要求简洁美观,容易用户操作
摘要
电子计算器作为计算工具,为人们的生活带来了很多的方便与实惠。
随着科学技术的进步,尤其是电子工业技术的发展,计算器已经从先前的半导体技术实现到现在的广泛喜爱用高集成度芯片实现的多功能计算器,不管是白领办公室还是菜市场的小贩,计算器的出现让他们高效率的完成任务。
计算器扮演了一个重要的角色。
本设计是用C++编写的,基于Qt图形用户界面应用程序框架的计算器。
设计出的应用程序,实现了一定的计算功能。
关键字:
Qt C++ 计算器
第一章前言
1.1设计背景
计算器(calculator;counter)一般是指“电子计算器”,计算器是能进行数学运算的手持机器,拥有集成电路芯片,其结构简单,比现代电脑结构简单得多,可以说是第一代的电子计算机(电脑)。
计算器这一小小的程序机器实际上是从计算机中割裂出来的衍生品,虽然功能较单一,但因其操作模式的方便快捷和价格的低廉,携带方便等特点,已经被广泛应用于工程、学习、商业贸易等日常生活中,极大的方便了人们对于数字的整合运算,成为人们生活和办公中的必备品之一,深得使用者的青睐。
1.2设计目的
本程序是基于linux下的嵌入式开发,所用软件为QTCreator,程序虽然简单,但是通过本程序的设计,可以进一步了解嵌入式系统开发工具以及熟悉linux环境下的常用命令,为以后进入嵌入式领域打下一定的基础。
通过该计算器程序软件的设计,培养独立思考、综合运用所学有关相应知识的能力,更好地巩固《C++程序语言设计》和《高级程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,体验理论与实践相结合的过程。
第二章流程图
2.1功能描述
本次设计的计算器在功能上大致与Windows系统自带的计算器程序相似,对于所设计的科学计算器,其功能大致为可以进行加(+)、减(-)、乘(*)、除(/)、简单算术计算及平方和开方。
由于接触QT时间还不太久,所以目前只能简单地实现这些功能,相信随着以后逐步的了解,本程序将实现更多的功能。
第三章开发工具简介
3.1QT简介
由于本次设计的小程序是用QTCreator所设计的,所以我觉得有必要先介绍下QT开发工具的背景。
Qt是一个1991年由奇趣科技开发的跨平台C++图形界面应用程序开发框架。
它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台工具和服务器。
Qt是面向对象语言,易于扩展,并且允许组件编程。
QT所具有的优势是:
优良的跨平台特性,Qt支持下列操作系统:
MicrosoftWindows95/98,MicrosoftWindowsNT,Linux,Solaris,SunOS,HP-UX,DigitalUNIX(OSF/1,Tru64),Irix,FreeBSD,BSD/OS,SCO,AIX,OS390,QNX等等。
面向对象:
Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。
Qt提供了一种称为signals/slots的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。
丰富的API:
Qt包括多达250个以上的C++类,还提供基于模板的collections,serialization,file,I/Odevice,directorymanagement,date/time类。
甚至还包括正则表达式的处理功能。
支持2D/3D图形渲染,支持OpenGL大量的开发文档。
第四章详细设计过程
4.1工程的创建
打开QtCreator,如图1所示。
图1
选择File->NewFileorProject,然后在弹出的对话框中选择Applications->QtGui应用(如图2所示),然后进入下一步。
图2
定义新工程的工程名JSQ.pro并选择保存路径(如图3所示),然后进入下一步,在出现图4的界面中基类选择QDialog,最后完成新工程的创建。
图3
图4
4.2图形界面的设计
分析计算器的按键我们可以把按键事件分为以下三类,一是简单的数字按键,主要进行数字的录入,这类按键包括按键0~9;二是运算操作键,用于输入数学运算符号,进行数学运算和结果的显示,这类按键包括“+”,“-”,“*”,“/”,“=”等等;三是清屏操作键,用于显示框显示信息的清除。
进入刚才创建的空工程,双击左侧的JSQ.pro,在主编辑框中目前显示JSQ.pro的内容为空(如图5)。
图5
点击dialog.ui进入其界面(如图6)。
选择3个控件分别是PushButton,LCDNumber和BoxLayou。
界面设计(如图7)。
图6
图7
按钮设置:
选中要设置的按钮右键单击,选择“改变文本”,然后输入字符即可。
其次,同样选中按钮右键单击,选中“改变对象名称”出现如下界面:
输入对象名称即可。
图8
图9
4.3程序代码的实现
计算器程序主要分以下两部分工作:
一是实现计算器的图形界面;二是实现按键事件和该事件对应的功能绑定,即信号和对应处理槽函数的绑定。
分析计算器的按键我们可以把按键事件分为以下三类,一是简单的数字按键,
主要进行数字的录入,这类按键包括按键0~9;二是运算操作键,用于输入数学运算符号,进行数学运算和结果的显示;三是清屏操作键,用于显示框显示信息的清除。
信号和对应处理槽函数的绑定。
以数字1为例:
选中按钮1右键单击,选择“转到槽..”,在出现的界面单击“确定”即可
计算器程序源代码的分析说明
1)对calculator.h源代码的简要说明
#ifndefDIALOG_H
#defineDIALOG_H
#include
namespaceUi{
classDialog;
}
classDialog:
publicQDialog
{
Q_OBJECT
public:
explicitDialog(QWidget*parent=0);
~Dialog();
private:
Ui:
:
Dialog*ui;
privateslots:
voidbutton1();
voidbutton2();
voidbutton3();
voidbutton4();
voidbutton5();
voidbutton6();
voidbutton7();
voidbutton8();
voidbutton9();
voidbutton0();
voidbuttonPoint();
voidbuttonAdd();
voidbuttonSub();
voidbuttonMul();
voidbuttonDivision();
voidbuttonSquare();
voidbuttonReciprocal();
voidbuttonEvolution();
voidbuttonFactorial();
voidbuttonEqual();
voidbuttonEmpty();
voidbuttonDel();
};
#endif//DIALOG_H
2)对calculator.cpp源代码的简要说明
#include"dialog.h"
#include"ui_dialog.h"
#include
Dialog:
:
Dialog(QWidget*parent):
QDialog(parent),
ui(newUi:
:
Dialog)
{
ui->setupUi(this);
ui->lcdNumber->setNumDigits(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(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()));
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(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,SLOT(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,SLOT(buttonFactorial()));
}
Dialog:
:
~Dialog()
{
deleteui;
}
//QStringsum,sum1;
intaa;
voidDialog:
:
button1()
{
sum=sum.append('1');
ui->lcdNumber->display(sum);
}
voidDialog:
:
button2()
{
sum=sum.append('2');
ui->lcdNumber->display(sum);
}
voidDialog:
:
button3()
{
sum=sum.append('3');
ui->lcdNumber->display(sum);
}
voidDialog:
:
button4()
{
sum=sum.append('4');
ui->lcdNumber->display(sum);
}
voidDialog:
:
button5()
{
sum=sum.append('5');
ui->lcdNumber->display(sum);
}
voidDialog:
:
button6()
{
sum=sum.append('6');
ui->lcdNumber->display(sum);
}
voidDialog:
:
button7()
{
sum=sum.append('7');
ui->lcdNumber->display(sum);
}
voidDialog:
:
button8()
{
sum=sum.append('8');
ui->lcdNumber->display(sum);
}
voidDialog:
:
button9()
{
sum=sum.append('9');
ui->lcdNumber->display(sum);
}
voidDialog:
:
button0()
{
sum=sum.append('0');
ui->lcdNumber->display(sum);
}
voidDialog:
:
buttonPoint()
{
sum=sum.append('.');
ui->lcdNumber->display(sum);
}
voidDialog:
:
buttonEmpty()
{
sum='';
ui->lcdNumber->display(0);
}
voidDialog:
:
buttonDel()
{
sum=sum.left(sum.size()-1);
ui->lcdNumber->display(sum);
}
//voidDialog:
:
buttonAdd()
{
sum1=sum;
sum='';
aa=0;
QStringstr=sum1;
str=str.append('+');
ui->label->setText(str);
}
voidDialog:
:
buttonSub()
{
sum1=sum;
sum='';
aa=1;
QStringstr=sum1;
str=str.append('-');
ui->label->setText(str);
}
voidDialog:
:
buttonMul()
{
sum1=sum;
sum='';
aa=2;
QStringstr=sum1;
str=str.append('*');
ui->label->setText(str);
}
voidDialog:
:
buttonDivision()
{
sum1=sum;
sum='';
aa=3;
QStringstr=sum1;
str=str.append('/');
ui->label->setText(str);
}
voidDialog:
:
buttonSquare()
{
QStringstr;
str=sum;
doublea=str.toDouble();
//str=str.append;
//ui->label->setText(str);
ui->lcdNumber->display(a*a);
sum=sum.setNum(a*a);
}
voidDialog:
:
buttonReciprocal()
{
QStringstr;
str=sum;
doublea=str.toDouble();
//str=str.append;
//ui->label->setText(str);
ui->lcdNumber->display(1/a);
sum=sum.setNum(1/a);
}
voidDialog:
:
buttonEvolution()
{
QStringstr;
str=sum;
doublea=str.toDouble();
//str=str.append;
//ui->label->setText(str);
a=sqrt(a);
ui->lcdNumber->display(a);
sum=sum.setNum(a);
}
voidDialog:
:
buttonFactorial()
{
QStringstr;
str=sum;
inta=str.toInt();
intb=a;
for(inti=1;i
{
a=a*i;
}
//str=str.append;
//ui->label->setText(str);
ui->lcdNumber->display(a);
sum=sum.setNum(a);
}
voidDialog:
:
buttonEqual()
{
QStringfirst,second,str;
first=sum;
second=sum1;
doublea=first.toDouble();
doubleb=second.toDouble();
switch(aa)
{
case0:
b=b+a;ui->lcdNumber->display(b);break;
case1:
b=b-a;ui->lcdNumber->display(b);break;
case2:
b=b*a;ui->lcdNumber->display(b);break;
case3:
b=b/a;ui->lcdNumber->display(b);break;
default:
break;
}
sum=sum.setNum(b);
str='';
ui->label->setText(str);
}
第5章程序测试
第六章课程总结
这次的简易计算机的编写,能实现基本的加减乘除算法及平方和开方,也能实现小数的加减乘除,通过此次的QT学习以及上学期的C++学习,深刻的了解到设计程序并不是一件简单的事情。
并且通过网上了解到QT的强大功能,虽然现在本人的技术及知识还很贫乏,但是相信通过现在及日后的学习一定可以达到自己想要达到的水平。
就这次的课程设计报告来说,从最初的相当陌生到现在的可以理解使用。
但还有一些问题没有彻底理解。
此次课程设计并没有完全构成当初想的那样,但认为还是基本满足了老师的要求。
对于以后学习嵌入式也打下了一定的基础,最后也谢谢方飞老师上课时耐心的讲解。
参考文献
[1]邹思轶.嵌入式Linux设计与应用[M].北京:
清华大学出版社,2002:
318-325.
[2]张石.ARM嵌入式系统教程[M].北京:
机械工业出版社,2012:
191-261.
[3]闫锋欣,曾泉人.C++GUIQT4编程(第二版)[M].北京:
电子工业出版社,2010:
108-232.
[4]闫放莺.基于嵌入式Linux软件平台技术的研究[D].西安:
西北大学,2006.
[5]郭兵.嵌入式软件开放式集成开发平台体系结构研究[D].成都:
电子科技大学,2002.
[6]谭浩强.C++面向对象程序设计[M].北京:
清华大学出版社,2006.69-111.
毕业设计(论文)原创性声明和使用授权说明
原创性声明
本人郑重承诺:
所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:
日 期:
指导教师签名:
日 期:
使用授权说明
本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:
按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:
日 期:
学位论文原创性声明
本人郑重声明:
所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:
日期:
年月日
学位论文版权使用授权书
本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:
日期:
年月日
导师签名:
日期:
年月日
指导教师评阅书
指导教师评价:
一、撰写(设计)过程
1、学生在论文(设计)过程中的治学态度、工作精神
□优□良□中□及格□不及格
2、学生掌握专业知识、技能的扎实程度
□优□良□中□及格□不及格
3、学生综合运用所学知识和专业技能分析和解决问题
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 ARM 计算器 设计 课程设计