您好,欢迎来到华佗养生网。
搜索
您的当前位置:首页嵌入式系统原理作品报告书

嵌入式系统原理作品报告书

来源:华佗养生网
.

中国计量学院

..

《嵌入式系统原理》课程作品验收报告书

(计算机科学与技术专业用)

班 级 学 号 姓 名 指导教师 日 期

一、课程作品设计目的和功能

我们做的作品是简单的计算器,实现简单的四则运算以及幂运算、根运算、倒数运算。我们的作品主要是用Qt进行界面设计,以及后台进行运算控制。 作品设计目的:开发简单的计算器,来帮助我们进行日常运算,这样,能够很好的服务我们。同时,我们在开发过程中,能够熟悉Qt开发,并且增进对嵌入式开发的了解。 功能,实现简单的加减乘除、求根、求幂、求倒的运算。

二、作品方案设计及开发过程、

1.作品设计背景

本学期,我们学习了《嵌入式系统原理》这门课,使我对嵌入式开发产生了浓厚的兴趣,为了检验本学期的学习成果,所以决定做一个简单的作品,一方面,能够使自己对嵌入式开发的整体流程有一个更深的了解,另一方面,通过这个作品,我能够学习更多的知识。所以,有了本作品的诞生。 2.功能描述

本计算器主要有加减乘除等运算。可以进行浮点数的各种简单运算。并保留小数点后5位来保证计算的准确性。 3.主要数据结构

主要数据结构有类结构。 4.主要函数说明

void Button0Clicked();

对按钮0进行事件处理的函数

《嵌入式相关资料》

void Button1Clicked(); void Button2Clicked(); void Button3Clicked(); void Button4Clicked(); void Button5Clicked(); void Button6Clicked(); void Button7Clicked(); void Button8Clicked(); void Button9Clicked();

对按钮1进行事件处理的函数 对按钮2进行事件处理的函数 对按钮3进行事件处理的函数 对按钮4进行事件处理的函数 对按钮5进行事件处理的函数 对按钮6进行事件处理的函数 对按钮7进行事件处理的函数 对按钮8进行事件处理的函数 对按钮9进行事件处理的函数 对按钮 + 进行事件处理的函数 对按钮 / 进行事件处理的函数 对按钮 . 进行事件处理的函数

void addButtonClicked(); void divideButtonClicked(); void dotButtonClicked();

void multiplyButtonClicked(); 对按钮 * 进行事件处理的函数 void subButtonClicked(); void sumButtonClicked();

对按钮 - 进行事件处理的函数 对按钮 = 进行事件处理的函数 对按钮 1/x进行事件处理的函数

void daoshuButtonClicked();

void involutionButtonClicked(); 对按钮 ^ 进行事件处理的函数 void sqrtButtonClicked(); 对按钮 sqrt进行事件处理的函数

对按钮c进行事件处理的函数

void clearButtonClicked();

TMainForm(QWidget * parent = 0, const char * name = 0, WFlags f = WType_TopLevel) : TMainFormBase(parent,name,f) {}

对该程序类中的个成员变量进行初始化

《嵌入式相关资料》

5.算法流程图

三、调试记录与分析

我们通过构造几组数据来对我们的程序进行调试,在已经在arm上运行的计算器

2^3=

4sqrt

程序上通过按钮输入以下数据:111+22.33 = 11+22-3*2/3= =

2 ‘1/x’ =

2.2^2=

5.2 sqrt = 3.4 ‘1/x’ =

经过测试,我们的计算器都能够计算出正确的结果。说明我们的计算器没有明显的漏洞。

四、运行结果及说明

《嵌入式相关资料》

我们进行了大量的测试,包括简单的整数个各种运算,浮点数的各种运算,各种运算的连续计算,都没有发现问题。说明我们设计的计算器没有严重的逻辑错误。

五、课程作品设计总结

本次作品设计,我们严格按照软件设计流程进行了严密的设计,从确定作品,再经过逻辑结构设计,界面设计,各函数消息响应,各个函数内部功能的实现,以及各个按钮消息条件控制,到最后的调试和完善。我们都尽自己最大的努力做到毫无遗漏。但尽管这样,我们在后期数据测试时还是碰上了几个问题,像我们对各个按钮在什么情况下能进行消息响应,以及我们对后台逻辑控制与前台界面按钮关联都曾碰到问题。但是在我们经过查阅资料和互相讨论后都顺利解决。另外,由于我们在进行作品设计之初对嵌入式开发还不是很了解,以及我们对linux系统的不熟悉,导致了很多小问题,比如各种命令的使用,和arm板进行交叉编译以及数据传输。但是,我们都一一克服了。

总之,经过本次作品设计,我们对嵌入式系统原理这门实用的课程有了更深的了解,

并能进行初步灵活的运用了,这才是最最关键的。

参考资料

[1]参考文献[1]陈 琦.QT的编程技术及应用[J].科技信息,2008(33):5032504. [2]李 凡.Qt

Embedded在嵌入式Linux系统下的移植与应用[J].科技信息,2006,16(7):79280.

Embedded在嵌入式Linux上的移植[J].计算机技术与发展,2006,16(7):266.

Embedded图形界面开发[J].电子工程师,2007(33):46248.

[3]X芳辉,王建群.Qt

[4]何剑锋,邬文彪,李宏穆等.嵌入式Linux系统的Qt[6]X 波,周克贵.基于Qt编程[M].:科学,2001

[5]王自强,X海燕,李媛洲.Linux下图形用户界面程序的开发与实现[J].计算机应用与软件,2005,22(6):81283.

Embedded和Linux的嵌入式GUI的研究与实现[J].仪器仪表用户,2007,14(6):19220.

[7]孙天泽,袁文菊,X海峰.嵌入式设计及Linux驱动开发指南[M].:电子工业,2005.[8]李宋琛主编.Linux面向对象窗口高级

附录

I.作品界面

《嵌入式相关资料》

II.源程序

1.main_form.h头文件

#if !defined (__MAIN_FORM_H__) # define __MAIN_FORM_H__

#include \"main_form_base.h\" #include #include

class TMainForm: public TMainFormBase { Q_OBJECT private: QString A,B; char c; bool only; public: TMainForm(QWidget * parent = 0, const char * name = 0, WFlags f = WType_TopLevel) : TMainFormBase(parent,name,f) { A=\"0\"; B=\"0\"; c=' '; only = true; }

《嵌入式相关资料》

virtual ~TMainForm() {}

public slots: void clearButtonClicked(); void Button0Clicked(); void Button1Clicked(); void Button2Clicked(); void Button3Clicked(); void Button4Clicked(); void Button5Clicked(); void Button6Clicked(); void Button7Clicked(); void Button8Clicked(); void Button9Clicked(); void addButtonClicked(); void divideButtonClicked(); void dotButtonClicked(); void multiplyButtonClicked(); void subButtonClicked(); void sumButtonClicked(); void daoshuButtonClicked(); void involutionButtonClicked(); void sqrtButtonClicked(); }; #endif

2.main_form.cpp 文件 #include \"main_form.h\" #include #include

void TMainForm::Button1Clicked() //数字按键“1”的槽函数 { if(B==\"0\") B=\"1\"; //如果B为0直接进行替代,想象下计算器,按了“1”键总不能显示的是“01”吧.. else { B=edit_in->text(); //如果不是,先获取当前文本编辑框的内容,如B=23,再按一下那么在后面追加1.. B.append('1'); } edit_in->setText(B); //将B再次送到文本编辑框进行显示... }

void TMainForm::Button2Clicked() //同上 {

《嵌入式相关资料》

if(B==\"0\") B=\"2\"; else { B=edit_in->text(); B.append('2'); } edit_in->setText(B); }

void TMainForm::Button3Clicked() //同上.. { if(B==\"0\") B=\"3\"; else { B=edit_in->text(); B.append('3'); } edit_in->setText(B); }

void TMainForm::Button4Clicked() { if(B==\"0\") B=\"4\"; else { B=edit_in->text(); B.append('4'); } edit_in->setText(B); }

void TMainForm::Button5Clicked() { if(B==\"0\") B=\"5\"; else { B=edit_in->text(); B.append('5'); } edit_in->setText(B); }

void TMainForm::Button6Clicked() { if(B==\"0\") B=\"6\";

《嵌入式相关资料》

else { B=edit_in->text(); B.append('6'); } edit_in->setText(B); }

void TMainForm::Button7Clicked() { if(B==\"0\") B=\"7\"; else { B=edit_in->text(); B.append('7'); } edit_in->setText(B); }

void TMainForm::Button8Clicked() { if(B==\"0\") B=\"8\"; else { B=edit_in->text(); B.append('8'); } edit_in->setText(B); }

void TMainForm::Button9Clicked() { if(B==\"0\") B=\"9\"; else { B=edit_in->text(); B.append('9'); } edit_in->setText(B); }

void TMainForm::Button0Clicked() { if(B==\"0\") B=\"0\"; else

《嵌入式相关资料》

{ B=edit_in->text(); B.append('0'); } edit_in->setText(B); }

void TMainForm::dotButtonClicked() //这个是小数点键对应的slot函数,比较特殊,直接追加就可以了 { if(only == true) { if(B==\"0\") B.append('.'); else { B=edit_in->text(); B.append('.'); } edit_in->setText(B); } only = false; }

void TMainForm::addButtonClicked() //加法键 { double n,m; B=edit_in->text(); if(c==' ') //如果c为空格键,说明现在是第一次运算,那么不进行任何操作,只是将B复制给A(注意A原来是“0”) //同时保存这一次的操作符,以便下一次计算. { A=B; B=\"0\"; c='+'; } else { n=A.toDouble(); //如果上一次已经有运算符,那么将A,B都转换成浮点数 m=B.toDouble(); if(c=='+') n=n+m; if(c=='-') n=n-m; if(c=='*') n=n*m; if(c=='/') n=n/m; if(c=='^') n=pow(n,m); A=QString::number(n,'f',10); //再转换回字符形式

《嵌入式相关资料》

B=\"0\"; //将B重新初始化 c='+'; edit_in->setText(A); //显示中间结果 } only = true; }

void TMainForm::subButtonClicked() //减号 { double n,m; B=edit_in->text(); if(c==' ') { A=B; B=\"0\"; c='-'; } else { n=A.toDouble(); m=B.toDouble(); if(c=='+') n=n+m; if(c=='-') n=n-m; if(c=='*') n=n*m; if(c=='/') n=n/m; if(c=='^') n=pow(n,m); if(c=='$') n=sqrt(n); if(c=='') n=1.0/n; A=QString::number(n,'f',10); B=\"0\"; c='-'; edit_in->setText(A); } only = true; }

void TMainForm::multiplyButtonClicked() //乘号 { double n,m; B=edit_in->text(); if(c==' ') { A=B; B=\"0\"; c='*';

《嵌入式相关资料》

} else { n=A.toDouble(); m=B.toDouble(); if(c=='+') n=n+m; if(c=='-') n=n-m; if(c=='*') n=n*m; if(c=='/') n=n/m; if(c=='^') n=pow(n,m); A=QString::number(n,'f',10); B=\"0\"; c='*'; edit_in->setText(A); } only = true; }

void TMainForm::divideButtonClicked() //除号 { double n,m; B=edit_in->text(); if(c==' ') { A=B; B=\"0\"; c='/'; } else { n=A.toDouble(); m=B.toDouble(); if(c=='+') n=n+m; if(c=='-') n=n-m; if(c=='*') n=n*m; if(c=='/') n=n/m; if(c=='^') n=pow(n,m); A=QString::number(n,'f',10); B=\"0\"; c='/'; edit_in->setText(A); } only = true; }

《嵌入式相关资料》

void TMainForm::sumButtonClicked() //等号键,同上类似 { double n,m; B=edit_in->text(); if(c==' ') { A=B; B=\"0\"; edit_in->setText(A); A=\"0\"; c=' '; } else { n=A.toDouble(); m=B.toDouble(); if(c=='+') n=n+m; if(c=='-') n=n-m; if(c=='*') n=n*m; if(c=='/') n=n/m; if(c=='^') n=pow(n,m); A=QString::number(n,'f',5); B=\"0\"; c=' '; edit_in->setText(A); A=\"0\"; } only = true; }

void TMainForm::daoshuButtonClicked()//求倒数 { double n,m; B=edit_in->text(); if(c==' ') { n=B.toDouble(); n=1.0/n; B=QString::number(n,'f',10); edit_in->setText(B); A = B; B = \"0\"; } else

《嵌入式相关资料》

{ n=A.toDouble(); m=B.toDouble(); if(c=='+') n=n+m; if(c=='-') n=n-m; if(c=='*') n=n*m; if(c=='/') n=n/m; if(c=='^') n=pow(n,m); n = 1.0/n; A=QString::number(n,'f',10); B=\"0\"; c = ' '; edit_in->setText(A); } only = true; }

void TMainForm::involutionButtonClicked()//求n次方 { double n,m; B=edit_in->text(); if(c==' ') { A=B; B=\"0\"; c='^'; } else { n=A.toDouble(); m=B.toDouble(); if(c=='+') n=n+m; if(c=='-') n=n-m; if(c=='*') n=n*m; if(c=='/') n=n/m; if(c=='^') n=pow(n,m); A=QString::number(n,'f',10); B=\"0\"; c='^'; edit_in->setText(A); } only = true; }

void TMainForm::sqrtButtonClicked() //开根号

《嵌入式相关资料》

{ double n,m; B=edit_in->text(); if(c==' ') { n=B.toDouble(); n=sqrt(n); B=QString::number(n,'f',10); edit_in->setText(B); A = B; B = \"0\"; } else { n=A.toDouble(); m=B.toDouble(); if(c=='+') n=n+m; if(c=='-') n=n-m; if(c=='*') n=n*m; if(c=='/') n=n/m; if(c=='^') n=pow(n,m); n=sqrt(n); A=QString::number(n,'f',10); B=\"0\"; c = ' '; edit_in->setText(A); } only = true; }

void TMainForm::clearButtonClicked() //按了C键,所有都初始化 { A=\"0\"; B=\"0\"; c=' '; edit_in->setText(B); only = true; }

3.main.cpp 文件

#include \"main_form.h\"

#include

QTOPIA_ADD_APPLICATION(\"mycalc\QTOPIA_MAIN

《嵌入式相关资料》

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo7.cn 版权所有 湘ICP备2022005869号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务