基于ARM的计算器设计讲解.docx

上传人:b****5 文档编号:6442670 上传时间:2023-01-06 格式:DOCX 页数:20 大小:800.69KB
下载 相关 举报
基于ARM的计算器设计讲解.docx_第1页
第1页 / 共20页
基于ARM的计算器设计讲解.docx_第2页
第2页 / 共20页
基于ARM的计算器设计讲解.docx_第3页
第3页 / 共20页
基于ARM的计算器设计讲解.docx_第4页
第4页 / 共20页
基于ARM的计算器设计讲解.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

基于ARM的计算器设计讲解.docx

《基于ARM的计算器设计讲解.docx》由会员分享,可在线阅读,更多相关《基于ARM的计算器设计讲解.docx(20页珍藏版)》请在冰豆网上搜索。

基于ARM的计算器设计讲解.docx

基于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);

}

第五章程序测试

第六章课程总结

这次的简易计算机的编写,能实现基本的加减乘除算法及平方和开方,也能实现小数的加减乘除,通过此次的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.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1