嵌入式qt实验报告简单计算器的设计
嵌入式_实验五_简单计算器的设计
嵌入式操作系统原理与应用实验报告实验题目:实验五、简单计算器设计院系:计算机科学与技术学院专业年级:学生姓名:学号2014 年10 月7日一、实验目标和重点使用MFC编写一个如下图所示的计算器程序可以直接从键盘输入两个数,然后按下运算按钮可以计算,可以计算三角函数二、实验内容思路:设计三个edit控件,作为被运算数和结果显示,添加加减乘除按钮,按下后进行运算;添加Check 按钮检测状态,因为三角函数都是单目运算符,故只有一个数,选择其中一个edit控件显示。
三、实验步骤及结果1)首先打开Microsoft Visual Studio,选择新建项目,基于对话框2)创建一个对话框程序,在Dialog中完成以下设计图,添加“+”、“‐”,“*”,“/”按钮button 控件并在属性里修改各个控件的caption属性、控件ID。
例如:“+”修改为ID_ADD,完成修改后,如图:3)对三个edit控件进行添加变量m_num1、m_num2、m_result,前面两个为操作数,后面一个为运算结果。
5)点击“闪电”,选择添加事件如下图6)在操作符按下的click事件下添加代码:操作符“+”添加代码:void CsimplecaculatorDlg::OnBnClickedAdd() {UpdateData();m_result=m_num1+m_num2;UpdateData(FALSE);}操作符“-”添加代码:void CsimplecaculatorDlg::OnBnClickedMinus() {UpdateData();m_result=m_num1*m_num2;UpdateData(FALSE);}操作符“-”添加代码:void CsimplecaculatorDlg::OnBnClickedPlus(){UpdateData();m_result=m_num1-m_num2;UpdateData(FALSE);}操作符“/”添加代码:void CsimplecaculatorDlg::OnBnClickedDiv(){UpdateData();if(m_num2)m_result=m_num1/m_num2;elseAfxMessageBox(_T("被除数不能为!"),0,0);UpdateData(FALSE);}7)以下为三角函数的添加代码:同时要在文件的开始添加pi的值,#define pi 3.1415926操作符“sin”按下的click事件下添加以下代码UpdateData();temp=m_num1;if(m_num1<180)m_result=sin(m_num1*pi/180.0); //Pi为圆周率,定义预处理命令else{while (temp>=180){temp-=180;}m_result=sin(temp*pi/180.0);UpdateData(FALSE);其他运算符(cos tan cot )同理添加如图:8)以下为选择简单计算器和三角函数的按钮的控件添加代码:9)在操作符“清除”按下的click事件下添加以下代码:10)完成以上操作后,为了实现三角函数的函数曲线,添加以下代码:CDC *pDC=GetDC();//CClientDC * pClientDC=myWindow.GetClientRect(&rc);//得到绘图环境CPen pen,*poldpen; //创建画笔,和用来保存旧画笔pen.CreatePen(PS_SOLID,2,RGB(m_red,0,0)); //创建一个新画笔的,特性,实线,线宽个像素poldpen=pDC->SelectObject(&pen); //选择新画笔,保存旧画笔//colorBrush.CreateSolidBrush(clRGB);//CDC*pDC=GetDC();pDC->MoveTo(110,180);pDC->LineTo(260,180);pDC->MoveTo(120,110);pDC->LineTo(120,250);pDC->MoveTo(120,200);double i,x,y;for (i=0;i<=200;i++){x=120+i;y=180-20*sin(i/20);pDC->LineTo(x,y);}pDC->SelectObject(&poldpen);// 恢复原画笔状态ReleaseDC(pDC); //释放画笔CBrush colorBrush; 11)实验结果截图:四、心得体会通过此次实验,完成了简单计算器的设计。
嵌入式实验报告-简易计算器
一目的及要求1实验目的根据计算器的原理设计一个具有加减乘除功能的简易计算器。
2实验要求(1)数字和结果用数码管显示。
(2)数字、+-*/、=、C用4X4键盘实现。
(3)计算结果正确,有出错提示。
二实验原理框图基本工作原理:本设计利用数码管和4*4矩阵式键盘实现了简易计算器的功能。
接通电源,数码管显示全0。
计算时,通过键盘输入需要计算的数字,该数字显示在数码管上,当键入等号时,计算结果显示在数码管上。
进行第二次运算时,按C键清除键盘结果。
当计算出现错误时,LED灯亮报警。
当计算结果超出数码管显示出现溢出时,报警电路也会报警。
报警输出为--。
四系统软件设计1.数据输入模块原理:通过4*4矩阵模块输入数字,在数码管上显示出来。
2.运算模块原理:四种运算同步运行,通过按键加、减、乘、除选择输出对应的计算结果,当按键等号时,将所得结果反馈给运算模块输入端。
3.输出模块原理:通过按键等号来控制显示运算对象还是运算结果,当等号按下时,输出计算结果,否则显示当前输入的数据。
当输出结果溢出是LED亮四次,同时数码管显示都为--。
五实验调试首先按清零键清零。
然后进行调试。
输入数据2,再按乘法键,输入第二个数字6,按等号键,数码管显示12;再按除法键,输入第二个数据3,按等号键,数码管显示4;再按加法键,输入第三个数据7,依次按等号键,数码管显示11;按减法键,输入第四个数据99,依次按等号键,数码管显示-88。
若输入超出显示管的最大值或者超出数码管的位数,结果溢出,LED亮报警,同时数码管显示都为--。
如输入999999加上2 ,结果就溢出,LED灯亮四次报警。
六程序#include "LPC2468.h" /* LPC24xx definitions */ #include "type.h"#include "irq.h"#include "target.h"#include "timer.h"#include "fio.h"#include "keyboard.h"#include "SPI.h"extern BYTE seg_buf[50]; // LPC2468开发板使用此数组的0~5显示六个数码管;LPC2478板使用1~6BYTE seg_copy1[7];BYTE seg_copy2[7];unsigned long Num1 =0;/*第一个输入的数字*/unsigned long Num2 =0;/*第二个输入的数字*/unsigned long Num3 =0;/*第二个输入的数字*/extern BYTE KEY; // LPC2468开发板使用此数组的0~5显示六个数码管;LPC2478板使用1~6enum {Add =1,Dec,Mut,Div,nofuntion}funtion;/******************************************************************** *********** Main Function main()********************************************************************* *********/int main (void){unsigned char counter = 0; /*计算输入的数字的个数,超过6个则报警,运算结果超过6位数也报警*/unsigned char cal_allow = 1; /*允许输入数字标志*/unsigned char input_allow = 1;/*允许输入数字标志*/unsigned char funtion_type = 0;/*运算功能*/unsigned char Ne_num = 0;/*负数标志*/DWORD value=0,i=0;TargetResetInit();enable_timer(1);SPI_Init(8); // SPI总线速率为28.8/8 = 3.6 MHz Seg_Init(); // 数码管初始化LedsInit();for(i=0;i<7;i++){seg_copy1[i]=0;seg_copy2[i]=0;seg_buf[i]=0;}counter = 0;cal_allow = 1;input_allow = 1;funtion_type = nofuntion;while ( 1 ){value = KEY;/*输入数字*/if(value>0 && value<11){if(counter < 6&&input_allow==1){if(counter == 0) seg_buf[1] = value-1;else{for(i=0;i<counter;i++){seg_buf[counter+1-i] = seg_buf[counter-i]; }seg_buf[1] = value-1;}counter++;}if(counter == 6){input_allow = 0;LedOn(1);LedOn(2);LedOn(3);LedOn(4);}}/*如果是“C”键,则清除显示,清除计算标志*/if(value == 11){for(i=0;i<7;i++){seg_copy1[i]=0;seg_copy2[i]=0;seg_buf[i]=0;}counter = 0;Num1 = 0;Num2 = 0;Num3 = 0;cal_allow = 1;input_allow = 1;Ne_num = 0;/*负数标志*/funtion_type = nofuntion;}/*如果是“+”键,则显示结果*/if(value == 13 ){if(cal_allow == 1){for(i=0;i<7;i++){seg_copy1[i] = seg_buf[i];/*备份第一次输入的数字*/seg_buf[i]=0; /*显示清零以准备第二次输入数字*/}funtion_type = Add;counter = 0; /*计数器清零允许第二次计数*/cal_allow =1; /*再等号按下前不能再按第二次*/input_allow = 1; /*允许第二次输入数据*/}else{input_allow = 0; /*禁止按下2次功能键时候输入数据*/}/*如果是“-”键,则显示结果*/if(value == 14&& cal_allow == 1){if(cal_allow == 1){for(i=0;i<7;i++){seg_copy1[i] = seg_buf[i];/*备份第一次输入的数字*/seg_buf[i]=0; /*显示清零以准备第二次输入数字*/}funtion_type = Dec;counter = 0; /*计数器清零允许第二次计数*/cal_allow =1; /*再等号按下前不能再按第二次*/input_allow = 1; /*允许第二次输入数据*/}else{input_allow = 0; /*禁止按下2次功能键时候输入数据*/ }}/*如果是“X”键,则显示结果*/if(value == 15 && cal_allow == 1){if(cal_allow == 1){for(i=0;i<7;i++)seg_copy1[i] = seg_buf[i];/*备份第一次输入的数字*/seg_buf[i]=0; /*显示清零以准备第二次输入数字*/}funtion_type = Mut;counter = 0; /*计数器清零允许第二次计数*/cal_allow =1; /*再等号按下前不能再按第二次*/input_allow = 1; /*允许第二次输入数据*/}else{input_allow = 0; /*禁止按下2次功能键时候输入数据*/ }}/*如果是“/”键,则显示结果*/if(value == 16 && cal_allow == 1){if(cal_allow == 1){for(i=0;i<7;i++){seg_copy1[i] = seg_buf[i];/*备份第一次输入的数字*/seg_buf[i]=0; /*显示清零以准备第二次输入数字*/}funtion_type = Div;counter = 0; /*计数器清零允许第二次计数*/cal_allow =1; /*再等号按下前不能再按第二次*/input_allow = 1; /*允许第二次输入数据*/}else{input_allow = 0; /*禁止按下2次功能键时候输入数据*/ }}/*如果是“=”键,则清除显示,清除计算标志*/if(value == 12){for(i=0;i<7;i++){seg_copy2[i] = seg_buf[i];/*拷贝第二次输入的数字*/}/*把输入的数字串1合成运算数字*/Num1 = seg_copy1[6]*100000+seg_copy1[5]*10000+seg_copy1[4]*1000 +seg_copy1[3]*100+seg_copy1[2]*10 +seg_copy1[1];/*把输入的数字串2合成运算数字*/Num2 = seg_copy2[6]*100000+seg_copy2[5]*10000+seg_copy2[4]*1000 +seg_copy2[3]*100+seg_copy2[2]*10 +seg_copy2[1];switch(funtion_type){case Add:{Num1 = Num1+Num2;/*计算结果存在Num1中*/break;}case Dec:{if(Num1==Num2) Num1 = 0;else if(Num1>Num2){Num3 = Num1-Num2;/*计算结果存在Num1中*/ Num1 = Num3;}else if(Num2 > Num1){Num3 = Num2-Num1;Ne_num =1;Num1 = Num3;}break;}case Mut:{Num3 = Num1*Num2;/*计算结果存在Num1中*/ Num1 = Num3;break;}case Div:{if(Num1>=Num2&&Num2!=0){Num3 = Num1/Num2;/*计算结果存在Num1中*/}Num1 = Num3;break;}default:break;}/*显示结果*/if(Num1>999999||(Ne_num ==1&&Num1>99999)||Num2 ==0) {for(i=0;i<7;i++){seg_copy1[i]=0;seg_copy2[i]=0;seg_buf[i]=10;/*显示横杠表示计算溢出错误!*/}for(i=0;i<5;i++){LedOn(1);LedOn(2);LedOn(3);LedOn(4);delayMs(1,200);LedOff(1);LedOff(2);LedOff(3);LedOff(4);delayMs(1,200);}}else{seg_buf[1] = Num1%10;seg_buf[2] = (Num1%100)/10;seg_buf[3] = (Num1%1000)/100;seg_buf[4] = (Num1%10000)/1000;seg_buf[5] = (Num1%100000)/10000;seg_buf[6] = Num1/100000;if(Ne_num ==1){seg_buf[6] = 10;/*显示负号*/}}}delayMs(1,200);}}/******************************************************************** *********** End Of File********************************************************************* ********/七实验现象(1)运行成功以后的计算机界面如图一:图一(2)正确输入6+6=12的现象如图二和图三:图二图三(3)当进行除操作且除数为0时的现象如图四:图四七实验小结在设计计算机的过程中,我们遇到了很多问题,但是都通过查资料和请教同学得到了解决。
基于Qt的计算器设计
衡阳师范学院嵌入式系统课程设计题目:基于Qt的计算器设计作者姓名:陈明慧、龚秋弘、宋素梅、关妹学号:所在院系:计算机学院专业:计算机科学与技术(师范)指导老师:***2018年7月目录摘要 (3)一、总体设计方案 (4)二、功能模块 (5)1. 基本计算功能: (5)2. 辅助功能 (5)3. 数字存储 (5)三.详细设计: (6)1. 基本计算功能: (6)2. 辅助功能 (9)三、功能验证及运行结果 (12)3.1基本加减乘除: (12)3.2复杂操作 (14)四、总结: (15)五、参考资料: (15)基于Qt的计算器设计摘要当今社会是信息社会,科技经济高速发展的社会,为了更方便人们的工作生活和加速人们处理信息的速度,计算器应运而生。
然而,电脑已经成为当代人生活的必需品,运行在电脑上的计算器成为了人们的生活学习绝佳伴侣。
本设计是用C++编写的,基于Qt图形用户界面应用程序框架的计算器,并实现了一定的计算功能。
关键字:Qt C++ 计算器一、总体设计方案1.目标:基于Qt用C++编写计算器程序,仿照window7计算器,实现两数加减乘除,平方,倒数,开方运算。
2.运行环境:编写环境:Qt 5.3.0 windows64位Exe 运行:windows 103.功能描述:a.基于Qt设计计算器的ui界面。
b.编写的应用程序实现如下功能:(1)加减乘除,平方,倒数,开方(2)存储和显示之前的运行结果(3)实现清屏,退格,退出应用程序的功能c. 应用程序为exe工程建立:文件->新建文件和工程->QtwidgetsApplication包含mainwindow.uid. ui界面设计: 在QT设计器中布置好计算器界面,所有按键采用pushButton控件,显示计算结果采用的是BrowerEdit控件。
完成的界面如下图所示:二、功能模块1. 基本计算功能:1.导数运算:btnReciprocal()2.开平方运算:btnSqrtSlot()3.取反运算:btnNegateSlot()4.基本加减乘除及百分号运算:btnEquSlot()2. 辅助功能1.显示框初始化setExp()2.复位btnClearSlot()3.删除当前框里的运算数:btnClearErrorSlot()4. 退格btnBackSLot()3. 数字存储1.内存清零btnMemoryClearSlot()2.读内存btnMemoryReadSlot()3.保存内存btnMemorySaveSlot()4.累加和累减btnMemoryAddSlot()和btnMemorySubSlot()三.详细设计:1. 基本计算功能:1.导数运算:btnReciprocal()1void MainWindow::btnReciprocal()2{3if(!cur.isEmpty())4stk.push(cur);5exp="1/"+stk.top();6bool ok;7qreal t2=stk.top().toDouble(&ok);8qint64t1=stk.top().toLongLong(&ok);9stk.pop();10QString res;11if(ok)res=QString::number(double(1/(1.0*t1))); 12else res=QString::number(double(1/t2));13stk.push(res);14cur="";15showNumber(exp,res);16}2.开平方运算:btnSqrtSlot()3.取反运算:btnNegateSlot()4.基本加减乘除及百分号运算:btnEquSlot()2. 辅助功能1.显示框初始化setExp()2.复位btnClearSlot()3.删除当前框里的运算数:btnClearErrorSlot()4. 退格btnBackSLot()3. 数字存储1.内存清零btnMemoryClearSlot()2.读内存btnMemoryReadSlot()3.保存内存btnMemorySaveSlot()4.累加和累减btnMemoryAddSlot()和btnMemorySubSlot() //累加三、功能验证及运行结果3.1基本加减乘除:3.1.1加法3.1.2减法3.1.3乘法3.1.4除法除数为零时:除数非零时:3.1.5 %操作3.2复杂操作3.2.1倒数运算3.2.2开平方操作四、总结:1.通过计算器设计,我学到了利用Qt设计简单窗口应用程序的的方法,初步了解了使用QT工具编写窗口程序的新颖,了解了槽和信号等基本知识,学会了如何使用新工具(Qt)帮助程序开发。
简单计算器—实训报告
Linux应用与编程实习报告学院名称专业班级学生姓名学号指导教师山东科技大学一、实习题目: B2-简单计算器二、实习时间:19周~ 20周实习地点: J13- 128三、实习任务:实现一个简单计算器,计算器包括加、减、乘、除四种运算。
用户通过鼠标进行数据输入,输入的数据以及计算结果显示在文本框中四、小组分工说明:独立完成五、实习成绩六、指导教师对实习的评语:指导教师(签章):2015年月日目录1. 概述 -------------------------------------------------------- 42. 相关技术 -------------------------------------------------- 42.1 QT中信号和槽 -------------------------------------- 42.2 字符串输出数据组 -------- 错误!未定义书签。
3. 需求分析 -------------------------------------------------- 54. 总体设计与详细设计 ----------------------------------- 54.1 系统模块划分 --------------------------------------- 54.2 主要功能模块 --------------------------------------- 55. 编码实现 -------------------------------------------------- 6 6.测试情况说明------------------------------------------- 157. 实训中遇到的主要问题及解决方法 ---------------- 168. 实训收获与体会 ---------------------------------------- 161. 概述1.1 实训项目简介本次实训项目是应用Linux系统中的QT编译器编写一个界面简洁,操作简单的简易计算器。
嵌入式系统之基于QT的简单计算器
嵌入式系统之基于Q T的简单计算器The pony was revised in January 2021嵌入式系统课程设计报告题目:基于QT的简单计算器专业:计算机科学与技术班级:姓名:学号:指导老师:日期:2012-12-26第一章前言设计背景计算器(calculator;counter)一般是指“电子计算器”,计算器是能进行数学运算的手持机器,拥有集成电路芯片,其结构简单,比现代电脑结构简单得多,可以说是第一代的电子计算机(电脑)。
计算器这一小小的程序机器实际上是从计算机中割裂出来的衍生品,虽然功能较单一,但因其操作模式的方便快捷和价格的低廉,携带方便等特点,已经被广泛应用于工程、学习、商业贸易等日常生活中,极大的方便了人们对于数字的整合运算,成为人们生活和办公中的必备品之一,深得使用者的青睐。
设计目的本程序是基于linux下的嵌入式开发,所用软件为QT Creator,程序虽然简单,但是通过本程序的设计,可以进一步了解嵌入式系统开发工具以及熟悉linux环境下的常用命令,为以后进入嵌入式领域打下一定的基础。
通过该计算器程序软件的设计,培养独立思考、综合运用所学有关相应知识的能力,更好地巩固《C++程序语言设计》和《高级程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,体验理论与实践相结合的过程。
第二章功能需求分析功能描述本次设计的计算器在功能上大致与Windows系统自带的计算器程序相似,对于所设计的科学计算器,其功能大致为可以进行加(+)、减(-)、乘(*)、除(/)、简单算术计算。
由于接触QT时间还不太久,所以目前只能简单地实现这些功能,相信随着以后逐步的了解,本程序将实现更多的功能。
第三章开发工具简介QT简介由于本次设计的小程序是用QT Creator所设计的,所以我觉得有必要先介绍下QT 开发工具的背景。
Qt是一个1991年由奇趣科技开发的跨平台C++图形界面应用程序开发框架。
嵌入式系统之基于QT的简单计算器
嵌入式系统课程设计报告题目:基于QT的简单计算器专业:计算机科学与技术班级:姓名:学号:指导老师:日期:2012-12-26第一章前言1.1设计背景计算器(calculator;counter)一般是指“电子计算器”,计算器是能进行数学运算的手持机器,拥有集成电路芯片,其结构简单,比现代电脑结构简单得多,可以说是第一代的电子计算机(电脑)。
计算器这一小小的程序机器实际上是从计算机中割裂出来的衍生品,虽然功能较单一,但因其操作模式的方便快捷和价格的低廉,携带方便等特点,已经被广泛应用于工程、学习、商业贸易等日常生活中,极大的方便了人们对于数字的整合运算,成为人们生活和办公中的必备品之一,深得使用者的青睐。
1.2设计目的本程序是基于linux下的嵌入式开发,所用软件为QT Creator,程序虽然简单,但是通过本程序的设计,可以进一步了解嵌入式系统开发工具以及熟悉linux 环境下的常用命令,为以后进入嵌入式领域打下一定的基础。
通过该计算器程序软件的设计,培养独立思考、综合运用所学有关相应知识的能力,更好地巩固《C++程序语言设计》和《高级程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,体验理论与实践相结合的过程。
第二章功能需求分析2.1功能描述本次设计的计算器在功能上大致与Windows系统自带的计算器程序相似,对于所设计的科学计算器,其功能大致为可以进行加(+)、减(-)、乘(*)、除(/)、简单算术计算。
由于接触QT时间还不太久,所以目前只能简单地实现这些功能,相信随着以后逐步的了解,本程序将实现更多的功能。
第三章开发工具简介3.1 QT简介由于本次设计的小程序是用QT Creator所设计的,所以我觉得有必要先介绍下QT开发工具的背景。
Qt是一个1991年由奇趣科技开发的跨平台C++图形界面应用程序开发框架。
它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台工具和服务器。
嵌入式系统之基于QT的简单计算器
嵌入式系统之基于QT的简单计算器QT是一种跨平台的应用程序开发框架,它提供了一种编写图形用户界面(GUI)程序的简便方法。
在嵌入式系统中,使用QT可以快速开发出各种功能强大、界面友好的应用程序。
对于一个简单计算器来说,主要包括用户界面设计和计算逻辑两部分。
首先,我们需要设计一个界面来展示计算器的按钮和显示结果的区域。
在QT中,可以使用QGridLayout布局管理器来创建按钮布局,同时将其连接到对应的信号槽函数上,以实现按钮的点击响应。
```cpp//main.qmlimport QtQuick 2.12import QtQuick.Window 2.12import QtQuick.Controls 2.12Windowvisible: truewidth: 400height: 600title: "Simple Calculator"RowLayoutspacing: 10GridLayoutid: buttonGridrows: 4columns: 4anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter Buttontext: "7"onClicked: calculator.append("7")}Buttontext: "8"onClicked: calculator.append("8")}// ... more buttons ...Buttontext: "="onClicked: calculator.calculate}// ... more buttons ...}TextFieldid: resultFieldwidth: 200height: 50placeholderText: "0"readOnly: true}}```在这个示例中,我们使用了QT的QML语言来创建用户界面。
qt编程简单的计算器
QT编程实现简易的计算器一、实验目的1) 熟悉QtCreator的简单操作。
2) 了解Qt程序编写框架。
3) 了解信号和槽机制,熟练掌握信号与槽在应用程序中的使用。
二、实验内容1) 查看API手册,学习简单的Qt类的使用,如QLineEdit、QPushButton等。
2) 用QtCreator创建工程,用Qt编写计算器程序。
3) 对计算器程序进行移植。
三、实验步骤1. 创建工程1) 打开QtCreator,如图1所示。
选择File->New File or Project,然后在弹出的对话框中选择Other Project->Empty Qt project (如图2所示),然后进入下一步。
选择Qt版本,这里选择使用Qt4.7.1,取消对Qt in PA TH的选择(如图4所示),然后进入下一步,完成新工程的创建(如图5所示)。
实现代码Calcuulator.h代码:#ifndef CALCULATOR_H#define CALCULATOR_H#include<QApplication>#include<QDialog>#include<QPushButton>#include<QLineEdit>class Calculator:public QDialog {Q_OBJECT protected:QLineEdit *lineEditor; QPushButton *button_0; QPushButton *button_1; QPushButton *button_2; QPushButton *button_3; QPushButton *button_4; QPushButton *button_5; QPushButton *button_6; QPushButton *button_7; QPushButton *button_8; QPushButton *button_9; QPushButton *button_ce; QPushButton *button_jia; QPushButton *button_jian; QPushButton *button_cheng; QPushButton *button_chu; QPushButton *button__; QPushButton *button_dengyu; int num1,num2,result; // bool zhenghao; //int mark; //char fuhao; //QString S; //public:Calculator();private slots:void button_0_clicked();void button_1_clicked();void button_2_clicked();void button_3_clicked();void button_4_clicked();void button_5_clicked();void button_6_clicked();void button_7_clicked();void button_8_clicked();void button_9_clicked();void button_ce_clicked();void button_jia_clicked();void button_jian_clicked();void button_cheng_clicked();void button_chu_clicked();void button__clicked();void button_dengyu_clicked(); };#endif // CALCULATOR_HCalculator.cpp代码:#include<QLayout>#include<QHBoxLayout>#include<QVBoxLayout>#include<QLineEdit>#include<cmath>#include"calculator.h"Calculator::Calculator(){num1=0;num2=0;result=0;zhenghao=true;mark=1;lineEditor=new QLineEdit("0");S="";button_0=new QPushButton("0");button_1=new QPushButton("1");button_2=new QPushButton("2");button_3=new QPushButton("3");button_4=new QPushButton("4");button_5=new QPushButton("5"); button_6=new QPushButton("6"); button_7=new QPushButton("7"); button_8=new QPushButton("8"); button_9=new QPushButton("9"); button_ce=new QPushButton("CE"); button_cheng=new QPushButton("*"); button_jia=new QPushButton("+"); button_jian=new QPushButton("-"); button_chu=new QPushButton("/"); button__=new QPushButton("+/-"); button_dengyu=new QPushButton("="); QHBoxLayout *Hl1=new QHBoxLayout; QHBoxLayout *Hl2=new QHBoxLayout; QHBoxLayout *Hl3=new QHBoxLayout; QHBoxLayout *Hl4=new QHBoxLayout; QHBoxLayout *Hl5=new QHBoxLayout; Hl1->addWidget(lineEditor);Hl1->addWidget(button_ce);Hl2->addWidget(button_1);Hl2->addWidget(button_2);Hl2->addWidget(button_3);Hl2->addWidget(button_jia);Hl3->addWidget(button_4);Hl3->addWidget(button_5);Hl3->addWidget(button_6);Hl3->addWidget(button_jian);Hl4->addWidget(button_7);Hl4->addWidget(button_8);Hl4->addWidget(button_9);Hl4->addWidget(button_cheng);Hl5->addWidget(button__);Hl5->addWidget(button_0);Hl5->addWidget(button_dengyu);Hl5->addWidget(button_chu);QVBoxLayout *V1=new QVBoxLayout;V1->addLayout(Hl1);V1->addLayout(Hl2);V1->addLayout(Hl3);V1->addLayout(Hl4);V1->addLayout(Hl5);connect(button_0,SIGNAL(clicked()),this,SLOT(button_0_clicked())); connect(button_1,SIGNAL(clicked()),this,SLOT(button_1_clicked())); connect(button_2,SIGNAL(clicked()),this,SLOT(button_2_clicked()));connect(button_3,SIGNAL(clicked()),this,SLOT(button_3_clicked()));connect(button_4,SIGNAL(clicked()),this,SLOT(button_4_clicked()));connect(button_5,SIGNAL(clicked()),this,SLOT(button_5_clicked()));connect(button_6,SIGNAL(clicked()),this,SLOT(button_6_clicked()));connect(button_7,SIGNAL(clicked()),this,SLOT(button_7_clicked()));connect(button_8,SIGNAL(clicked()),this,SLOT(button_8_clicked()));connect(button_9,SIGNAL(clicked()),this,SLOT(button_9_clicked()));connect(button_jia,SIGNAL(clicked()),this,SLOT(button_jia_clicked()));connect(button_jian,SIGNAL(clicked()),this,SLOT(button_jian_clicked()));connect(button_cheng,SIGNAL(clicked()),this,SLOT(button_cheng_clicked()));connect(button_chu,SIGNAL(clicked()),this,SLOT(button_chu_clicked()));connect(button_dengyu,SIGNAL(clicked()),this,SLOT(button_dengyu_clicked()));connect(button_ce,SIGNAL(clicked()),this,SLOT(button_ce_clicked()));connect(button__,SIGNAL(clicked()),this,SLOT(button__clicked()));setLayout(V1);}void Calculator::button_0_clicked(){S+="0";lineEditor->setText(S);if(mark==1){num1=num1*10+0;}else{num2=num2*10;}}void Calculator::button_1_clicked(){ S+="1";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+1;}else{num1=num1*10-1;}}else{if(zhenghao){num2=num2*10+1;}else{num2=num2*10-1;}}}void Calculator::button_2_clicked(){lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+2;}else{num1=num1*10-2;}}else{if(zhenghao){num2=num2*10+2;}else{num2=num2*10-2;}}}void Calculator::button_3_clicked(){ S+="3";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+3;num1=num1*10-3;}}else{if(zhenghao){num2=num2*10+3;}else{num2=num2*10-3;}}}void Calculator::button_4_clicked(){ S+="4";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+4;}else{num1=num1*10-4;}}else{if(zhenghao){num2=num2*10+4;}else{num2=num2*10-4;}}}void Calculator::button_5_clicked(){ S+="5";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+5;}else{num1=num1*10-5;}}else{if(zhenghao){num2=num2*10+5;}else{num2=num2*10-5;}}}void Calculator::button_6_clicked(){ S+="6";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+6;}else{num1=num1*10-6;}}else{if(zhenghao){num2=num2*10+6;}else{num2=num2*10-6;}}}void Calculator::button_7_clicked(){ S+="7";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+7;}else{num1=num1*10-7;}}else{if(zhenghao){num2=num2*10+7;}else{num2=num2*10-7;}}}void Calculator::button_8_clicked(){ S+="8";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+8;}else{num1=num1*10-8;}if(zhenghao){num2=num2*10+8;}else{num2=num2*10-8;}}}void Calculator::button_9_clicked(){ S+="9";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+9;}else{num1=num1*10-9;}}else{if(zhenghao){num2=num2*10+9;}else{num2=num2*10-9;}}void Calculator::button_jia_clicked(){ S+="+";lineEditor->setText(S);zhenghao=true;fuhao='+';mark=2;}void Calculator::button_jian_clicked(){ S+="-";lineEditor->setText(S);zhenghao=true;fuhao='-';mark=2;}void Calculator::button_cheng_clicked(){ S+="*";lineEditor->setText(S);zhenghao=true;fuhao='*';}void Calculator::button_chu_clicked(){S+="/";lineEditor->setText(S);zhenghao=true;fuhao='/';mark=2;}void Calculator::button__clicked(){S+="-";lineEditor->setText(S);zhenghao=false;}void Calculator::button_dengyu_clicked(){ S+="=";// lineEditor->setText(S);switch(fuhao){case '+':result=num1+num2;break;case '-':result=num1-num2;break;case '*':result=num1*num2;break;case '/':if(num2)result=num1/num2;break;}int i=0;int result1=result;while(result1){i++;result1/=10;}for(;i;i--){S+=(result/(int)pow(10,i-1)+'0');result%=(int)pow(10,i-1);}lineEditor->setText(S);zhenghao=true;num1=num2=0;mark=1;S="";}void Calculator::button_ce_clicked(){zhenghao=false;S="";lineEditor->setText("0");num1=num2=0;mark=1;}Main代码:#include"calculator.h"int main(int argc,char *argv[]) {QApplication app(argc,argv);Calculator cal;cal.show();return app.exec();}运行结果四、总结通过计算器设计,学到了利用Qt设计简单窗口应用程序的的方法,初步了解了使用QT工具编写窗口程序的新颖,了解了槽和信号等基本知识,学会了如何使用新工具(Qt)帮助程序开发。
嵌入式QT实验报告
嵌入式QT实验报告一、实验目的本次实验的目的是设计并实现一个简单的计算器应用程序,基于嵌入式QT进行开发。
通过这个实验,可以熟悉QT的控件使用、界面设计和信号与槽的连接等知识点。
二、实验原理计算器应用程序的主要功能是实现基本的数学运算,包括加、减、乘、除。
用户通过界面上的按钮输入数字和运算符,程序根据用户的输入进行相应的计算,并将结果显示在界面上。
三、系统设计1.界面设计计算器的界面主要分为两个部分,一个是数字输入框,用于用户输入数字;另一个是运算符按钮区域,用于用户选择运算符。
2.数字和运算符输入用户通过按钮选择数字和运算符,并将其显示在数字输入框中,需要使用QT的信号与槽机制来连接按钮和数字输入框。
3.计算功能根据用户选择的运算符,进行相应的数学运算,并将结果显示在数字输入框中。
需要使用switch语句来判断用户选择的运算符,并进行相应的计算。
四、实验步骤1.创建QT应用程序项目在QT Creator中创建一个新的QT Widget应用程序项目,命名为"Calculator",选择嵌入式QT版本。
2.设计界面使用QT Designer设计计算器的界面,添加一个数字输入框和若干个按钮,按钮包括数字按钮和运算符按钮。
需要注意布局和按钮的大小等细节。
3.连接信号与槽4.实现计算功能在mainwindow.cpp文件中实现计算器功能的代码。
首先声明一个私有变量operand用于保存上一次的操作数;然后根据用户选择的按钮,进行相应的计算。
五、实验结果(插入计算器界面截图)六、实验总结通过本次实验,我成功地设计并实现了一个简单的计算器应用程序。
在实验过程中,我学会了使用QT Designer设计界面,了解了QT的信号与槽机制,能够连接按钮和输入框等控件;同时,也巩固了基本的C++编程知识,熟悉了switch语句的使用。
在实验过程中,我遇到了一些问题,比如界面的布局和按钮的大小等细节问题,通过查阅文档和调试,最终解决了这些问题。
QT课程设计报告【范本模板】
题目:简易计算器学院:信息科学与技术专业:软件工程姓名:学号:2014.04.19一、需求分析当今社会是信息社会,科技经济高速发展的社会,为了更方便人们的工作生活和加速人们处理信息的速度,计算器应运而生。
然而,电脑已经成为当代人生活的必需品,运行在电脑上的计算器成为了人们的生活学习绝佳伴侣。
下面是用C++编写的,基于Qt图形用户界面应用程序框架的计算器,它实现了对整数,浮点数的加﹑减﹑乘﹑除﹑幂运算。
二、设计过程1.界面设计在QT设计器中布置好计算器界面,所有按键采用的pushButton控件,显示计算结果采用的是lineEdit控件.完成的界面如下图所示:图计算器界面为了使按钮显示美观,将每个button的属性设置如下:图button大小、字体属性为符合人们的使用习惯,将lineEdit空间的属性更改,使得输入的数字和符号出现在空间的右边起。
如图:图lineEdit控件属性更改2.控件重命名将界面布局设计好后,将各个空间改名,例如“0"改为but0.3.简单信号响应对于button exit退出程序,这样简单的响应,直接在设计器中通过添加信号和槽来完成,如图:图信号和槽4.辅助数据成员及函数为了区分每一次计算和保存操作数、操作符,和辅助函数(如:输出函数),在calculator。
h的类中设定数据成员以及成员函数:calculat。
cpp中辅助函数的实现:5.数字键的响应以button 0为例,在calculator。
cpp文件中添加but0的代码,如下:6.小数点的响应当一个操作数已经输入了一个小数点时,将小数点按钮置为不可用,以防用户重复输入小数点,导致输入操作数不合法,如下如:7.运算功能的响应以加法为例,向lineEdit中输入显示+号,并在数据成员中保存,以便后面进行计算:8.清屏的响应首先将lineEdit的显示清除,再置为0;将一切辅助的数据成员数据重置到新一轮计算的开始状态,如:运算符为空,操作数为0等.实现如下:9.等号的响应根据数据成员记录的运算符和操作数进行相应的计算,并将得出的结果转化为string显示在lineEdit上,并重置辅助数据成员,准备下一轮的计算开始。
嵌入式运算器实验报告
实验二运算器组成实验1.算术逻辑运算实验一.实验目的1.了解简单运算器的数据传输通路。
2.验证运算功能发生器的组合功能。
3.掌握算术逻辑运算加、减、与的工作原理。
4.验证实验台运算的8位加、减、与、直通功能。
5.按给定数据,完成几种指定的算术和逻辑运算。
二.实验内容1.实验原理算术逻辑单元ALU的数据通路如图2-1所示。
其中运算器ALU181根据74LS181的功能用VHDL硬件描述语言编辑而成,构成8位字长的ALU。
参加运算的两个8位数据分别为A[7..0]和B[7..0],运算模式由S[3..0]的16种组合决定,而S[3..0]的值由4位2进制计数器LPM_COUNTER产生,计数时钟是Sclk(图2-1);此外,设M=0,选择算术运算,M=1为逻辑运算,C N为低位的进位位;F[7..0]为输出结果,C O为运算后的输出进位位。
两个8位数据由总线IN[7..0]分别通过两个电平锁存器74373锁入,ALU功能如表2-1所示。
表2-1 ALU181的运算功能注1、* 表示每一位都移至下一更高有效位, “+”是逻辑或,“加”是算术加注2、在借位减法表达上,表2-1与标准的74181的真值表略有不同。
三.实验步骤(1)设计ALU元件在Quartus II 环境下,用文本输入编辑器Text Editor输入ALU181.VHD算术逻辑单元文件,编译VHDL文件,并将ALU181.VHD文件制作成一个可调用的原理图元件。
(2)以原理图方式建立顶层文件工程选择图形方式。
根据图2-1输入实验电路图,从Quartus II的基本元件库中将各元件调入图形编辑窗口、连线,添加输入输出引脚。
将所设计的图形文件ALU.bdf保存到原先建立的文件夹中,将当前文件设置成工程文件,以后的操作就都是对当前工程文件进行的。
根据表2-1,从键盘输入数据A[7..0]和B[7..0],并设置S[3..0]、M、Cy,验证ALU运算器的算术运算和逻辑运算功能,记录实验数据。
嵌入式课程设计报告--电子计算器
重庆科技学院《嵌入式体系结构与接口技术》课程设计报告学院:_电气与信息工程学院_ 专业班级:计科2012-04学生姓名:杜江龙学号: 2012442090设计地点(单位):电气与信息工程学院I302实验室设计题目:_________________ 电子计算器_____ ___ __完成日期: 2014 年 7 月 4 日指导教师评语: ______________________ _________________ ___________________________________________________________________________________ ___________________________________________________________________________________ ___________________________________________________________________________________成绩(五级记分制):指导教师(签字):课程设计任务书设计题目:电子计算器教研室主任:指导教师:冯骊骁2014年6月30日摘要嵌入式系统是后PC时代被广泛使用的计算机平台,它通常都具有低功耗、体积小、功能强、集成度高等优点。
此设计一个具有加减乘除功能的计算器,硬件采用TQ2440板子LCD触摸屏,此计算器能够实现整数和小数的加减乘除的计算功能,并且动态显示,操作简单、实用。
通过此课程设计,对TQ2440板子操作更加熟悉,对ADS1.2的编程和调试更加灵活。
较好的熟悉并掌握了对LCD的操作显示原理和编程,对以后学习有一定的帮助。
关键词:TQ2440 ADS1.2 LCD目录课程设计任务书 (I)摘要 (I)目录 (II)1 系统需求分析 (1)1.1 设计内容与要求 (1)1.2 设计参数 (1)2 概要设计 (2)3 详细设计 (3)3.1 键盘部分和显示部分 (3)3.2 流程图 (4)3.3 功能函数 (5)4 测试 (13)5 总结致谢 (14)6 参考文献 (15)1 系统需求分析1.1 设计内容与要求设计一个具有能进行加减乘除运算,操作数可为整数、小数,可进行连续运算,比如按键输入“1+2*3”,按下“*”后应该显示1+2的运算结果,系统无明显bug的简易计算器。
嵌入式课程设计实验报告-计算器
华南师范大学嵌入式综设实验报告选题:基于ARM和UCOS-II系统的小型计算器指导老师:王剑x组员(学号):(20122302xxx)(20122302xxx)一、实现功能实现五位整数的加减乘除带括号的运算,由于实验箱的键盘数量有限,于是我们将键盘设置为虚拟的两层结构,其使用方法如下:(1(2二、系统流程图计算原理计算原理定义一个操作数栈sym,一个操作符栈um 。
思想是:置操作数栈为空,操作符栈压入元素"#"(它具有最高优先级),依次读入表达式中的每个字符CH,如果CH是操作数,则CH压入操作数栈,如果CH是操作符,那么将CH和操作符栈顶元素进行优先级比较(如‘×’优先级高于‘+’)。
如果优先级大于当前栈顶元素,那么将其压栈,如果其优先级小于当前栈顶元素,那么执行op=sym.pop();(取当前栈顶操作符),a=um.pop()(取当前栈顶操作数存入临时变量a);b=sym.pop()(取当前栈顶操作数存入临时变量b);c=计算(a op b); sym.push(c);如果优先级相等,则当前操作符出栈。
重复上述操作直到表达式处理完毕。
最后操作数栈剩余的操作数就是计算的最终结果。
三、程序#include "Includes.h" /* uC/OS interface */#include "option.h"#include "2410lib.h"#include "uhal.h"/* 任务栈*/OS_STK StackLED[STACKSIZE]= {0, }; // 任务LED任务栈OS_STK StackSEG[STACKSIZE]= {0, }; // 任务SEG任务栈/* 任务ID */char IdLED = '1'; // 任务LED IDchar IdSEG = '2'; // 任务SEG ID/* 任务处理函数*/void TaskLED(void *Id); // 任务LED任务处理函数void TaskSEG(void *Id); // 任务SEG任务处理函数void TmrFunc1(INT8U arg);/* 定时器1*/OS_TMR *Tmr1;char ch,ch2;char print_1[1];char print_2 [6]; /*用于串口输出*/int Page=0; /* 键盘的页面标志*//*------------------------------------栈定义---------------------------------*/ #ifndef STACK_SIZE#define STACK_SIZE 64#endifint Num[STACK_SIZE];/*数字栈*/int NumTop=0;int Sym[STACK_SIZE];/*字符栈,用来储存操作符*/int SymTop=0;void Push_(int * stack,int * top,int val);int Pop_(int * stack,int * top);/*------------------------------------声明-------------------------------------*/#define DELAYTIME 1extern unsigned char seg7table[16];int Calculate(int right,int left,int symbol);#define DELAYTIME 1void product(void);int a,b,c;char number[255];char sign;int now=0;int num=0;int SymTmp;/*对操作符处理时的中间变量*/int ResTmp;/*得数的中间变量*/int Flag = 0;/*表示数字不为空的标识符*/int count=0;/** 跑马灯闪烁函数,调用一次,四个跑马灯由亮变灭或者由灭变亮*/void User_LED_Blink(void){static int led_status = 0;led_status += 1;if(led_status % 2 == 0)Led_Display(0x0f);elseLed_Display(0x00);}/** 数码管显示实验,由0到F依次显示*/void User_SEG_Blink(void){static unsigned char seg_value[] = { 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xc0,0xdf};static int seg_status = 0;count++;// seg_status += 1;// if(seg_status > 15)// seg_status = 0;}/** 定时器Tmr1、Tmr2、Tmr3处理函数* 1、根据arg参数确定定时器* 2、三个定时器同时只打开一个,即Tmr1、Tmr2、Tmr3,三个定时器总和闪烁一次跑马灯*/void TmrFunc1(INT8U arg){ch=Key_GetKey();ch2=ch;switch(ch){case 'C':ch2='(';break;case 'D':ch2=')';break;case 'F':ch2='=';break;case 'A':ch2='.';break;case 'E':Page=1;Led_Display(0xff);break;case 'B':Page=0;Led_Display(0x00);break;default:break;}if(Page==1)switch(ch){case '1':ch2='+';break;case '4':ch2='-';break;case '7':ch2='*';break;case '0':ch2='/';break;case '2':ch2='%';break;default:ch='\0';break;}if(ch2=='E'||ch2=='B'||ch2=='.') print_1[0]='\0';elseprint_1[0]=ch2;uHALr_printf(print_1); product();}/** 任务LED任务处理函数* 1、OSStart调用之前创建的最高优先级任务,在该函数重启动时钟节拍定时器* 2、创建三个定时器,定时时间都为2秒钟,它们使用同样的TmrFunc1定时器服务函数,但是使用不同的参数,定时器1的初始状态为开,其余为关*/void TaskLED(void *Id){char key_press;char led_status = 0x0;INT8U err;/* 启动时钟节拍定时器,开始多任务调度*/ARMTargetStart();/* 初始化定时器*/OSTmrInit();/* 创建定时器,定时时间为2秒钟,它使用TmrFunc1定时器服务函数,定时器1的初始状态为开*/err = OSCreateTimer( &Tmr1, TmrFunc1, 1, 10, OS_TMR_ENABLE);OSEnableTimer(Tmr1);uHALr_printf("\n欢迎使用计算器\n");/* 该任务到此完成,不断延时*/for (;;){OSTimeDly(10);}}/** 任务SEG任务处理函数* 1、每隔100 ticks即1000ms,闪烁数码管*/void TaskSEG(void *Id){//uHALr_printf("Task2() called\n");for (;;){OSSchedLock();OSSchedUnlock();OSTimeDly(1);}}/** Main函数.* 1、初始化目标系统,初始化硬件定时器等,与操作系统无关* 2、调用OSInit初始化uC/OS-II软件数据结构等,必须在打开时钟节拍中断之前调用* 3、创建两个任务,TaskLED和TaskSEG,TaskLED的优先级为5,TaskSEG的优先级为13,TaskLED的优先级高于TaskSEG* 4、调用OSStart启动uC/OS-II*/void Main(void){/** 目标系统初始化*/ARMTargetInit();/** uC/OS-II软件初始化*/OSInit();/** 创建两个任务,TaskLED和TaskSEG,TaskLED的优先级为5,TaskSEG的优先级为13,TaskLED 的优先级高于TaskSEG*/OSTaskCreate(TaskLED, (void *)&IdLED, (OS_STK *)&StackLED[STACKSIZE - 1], 5);OSTaskCreate(TaskSEG, (void *)&IdSEG, (OS_STK *)&StackSEG[STACKSIZE - 1], 13);/** 启动多任务调度*/OSStart();/** 正常情况下,永远不会执行到这里*/return;}void product(void)if(ch2>='0'&&ch2<='9'){num = (num*10)+(ch2-'0');Flag = 1;}else if(ch2=='('||ch2==')'||ch2=='+'||ch2=='-'||ch2=='*'||ch2=='/'||ch2=='%'||ch2=='=') {if(Flag){Push_(Num,&NumTop,num);num = 0;Flag = 0;}switch(ch2){case '(': //对‘(’的处理(左括号)Push_(Sym,&SymTop,'(');break;case ')': //对‘)’的处理(右括号)while(SymTop!=0&&(SymTmp=Pop_(Sym,&SymTop))!='('){ResTmp=Calculate(Pop_(Num,&NumTop),Pop_(Num,&NumTop),SymTmp);Push_(Num,&NumTop,ResTmp);}break;case '+': // 对‘+(加号)’的处理if(SymTop!=0 && Sym[SymTop-1]!='('){ResTmp=Calculate(Pop_(Num,&NumTop),Pop_(Num,&NumTop),Pop_(Sym, &SymTop));Push_(Num,&NumTop,ResTmp);}Push_(Sym,&SymTop,'+');break;case '-': // 对‘-(减号)’的处理if(SymTop!=0 && Sym[SymTop-1]!='('){ResTmp=Calculate(Pop_(Num,&NumTop),Pop_(Num,&NumTop),Pop_(Sym, &SymTop));Push_(Num,&NumTop,ResTmp);}Push_(Sym,&SymTop,'-');break;case '*': // 对‘*(乘号)’的处理if(SymTop!=0&&Sym[SymTop-1]!='('&&Sym[SymTop-1]!='+'){ResTmp=Calculate(Pop_(Num,&NumTop),Pop_(Num,&NumTop),Pop_(Sym, &SymTop));Push_(Num,&NumTop,ResTmp);}Push_(Sym,&SymTop,'*');break;case '/': // 对‘/(除号)’的处理if(SymTop!=0&&Sym[SymTop-1]!='('&&Sym[SymTop-1]!='+'){ResTmp=Calculate(Pop_(Num,&NumTop),Pop_(Num,&NumTop),Pop_(Sym, &SymTop));Push_(Num,&NumTop,ResTmp);}Push_(Sym,&SymTop,'/');break;case '%': // 对‘(取余)’的处理if(SymTop!=0&&Sym[SymTop-1]!='('&&Sym[SymTop-1]!='+'){ResTmp=Calculate(Pop_(Num,&NumTop),Pop_(Num,&NumTop),Pop_(Sym, &SymTop));Push_(Num,&NumTop,ResTmp);}Push_(Sym,&SymTop,'%');break;case '=': // 对‘=’号处理if(SymTop!=0){while(SymTop!=0&&(SymTmp=Pop_(Sym,&SymTop))!='(' ){ResTmp=Calculate(Pop_(Num,&NumTop),Pop_(Num,&NumTop),SymTmp);Push_(Num,&NumTop,ResTmp);}}num = Pop_(Num,&NumTop);if(num<0){print_2[0]='-';num=-num;}elseprint_2[0]='+';print_2[1]=num/10000+'0';print_2[2]=num%10000/1000+'0';print_2[3]=num%1000/100+'0';print_2[4]=num%100/10+'0';print_2[5]=num%10+'0';uHALr_printf("\nResult= ");uHALr_printf(print_2);//uHALr_printf("Result= %d", num); sprintf(print_buf, "Task%c() turned\n", *(char *)Id);(void *)&IdLEDNumTop = 0;SymTop = 0;num = 0;uHALr_printf("\n");break;}}//display(num);}int Calculate(int right,int left,int symbol){int result = 0;switch(symbol){case '+':result = left+right;break;case '*':result = left*right;break;case '-':result =left-right;break;case '/':result = left/right;break;case '%':result = left%right;break;}return result;}/*-----------------------------------栈处理---------------------------------*/ void Push_(int * stack,int * top,int val){if(*top == STACK_SIZE) return;stack[(*top)++] = val; }int Pop_(int * stack,int * top){if(*top==0)return -1;return stack[--(*top)]; }。
基于QT简易计算器的设计
基于QT简易计算器的设计设计一个基于QT的简易计算器,实现基本的四则运算功能。
本文将从需求分析、界面设计、功能实现等方面进行详细介绍。
一、需求分析根据题目要求,设计一个简易计算器,需具备以下功能:1.实现基本的四则运算功能,包括加减乘除;2.支持连续多次运算,即连续按下等号键后可以继续进行后续的运算;3.支持小数点的输入,并可以进行小数运算;4.支持括号的输入,并按照正确的优先级进行计算;5.提供清空按钮,可以清空当前输入的算式;6.提供删除按钮,可以删除当前输入的最后一个字符。
二、界面设计基于QT的图形界面设计,可以使用QGridLayout布局管理器来布局计算器的主要组件。
具体界面设计如下:1. 显示屏:使用一个QLineEdit控件用于显示计算结果,并设置只读属性;2. 数字键:使用QPushButton控件实现数字键,并根据需要设置对应的信号槽;3. 功能键:使用QPushButton控件实现功能键,如加减乘除等,并根据需要设置对应的信号槽;4. 清空和删除键:使用QPushButton控件实现清空和删除键,并根据需要设置对应的信号槽;5.等号键:使用QPushButton控件实现等号键,并根据需要设置对应的信号槽。
三、功能实现2. 信号槽的连接:根据界面设计,将按钮的clicked信号连接到槽函数,实现按钮的点击响应;3.数字键的实现:将数字键的文本值追加到显示屏的文本末尾;4.加减乘除键的实现:将加减乘除键的文本值追加到显示屏的文本末尾;5.小数点键的实现:判断显示屏的文本中是否已经存在小数点,如果不存在,则将小数点追加到文本末尾;6.清空键的实现:清空显示屏的文本内容;7.删除键的实现:删除显示屏文本的最后一个字符;8.等号键的实现:获取显示屏的文本内容,并使用计算表达式的eval函数进行求值,将结果显示在显示屏上。
四、例子演示下面以一个例子进行简单演示:1.界面设计:在界面上设计一个显示屏(QLineEdit控件),以及数字键、加减乘除键和等号键(QPushButton控件),清空和删除键(QToolButton控件)。
嵌入式--计算器--实验报告
计算器设计实验报告一、实验设计主要分工04009320 文斌:算法设计,LCD显示。
04** 张希:界面(按钮控件)设计,文件内容读取。
共同调试、完善设计。
二、程序设计实现功能效果(1)支持整数、小数基本加减乘除运算;(2)有优先级的判别计算。
优先级由高到低一次为括号运算、乘除运算、加减运算。
(3)支持键盘输入和触摸屏输入;(4)能读取指定目录下文本内容(内容为计算表达式)并计算得出结果,将内容和结果显示在LCD上。
程序任务开始后,等待键盘或触摸屏的输入。
输入键有0~9数字键、+-*/()运算符、del退格键、clear清屏键、read读指定目录文本内容并计算键、enter'='键、‘.’小数点键。
每当有字符输入时,触摸屏相应键显示“AAA”,100ms后恢复原相应按键符号,同时LCD 屏幕上显示相应字符。
当输入'del'键时,屏幕显示去掉最后一位字符。
当输入'='号后,得出计算结果,结果显示于表达式的下一行。
若是除零错误,则结果显示为“/0ERROR!”。
若有非法字符(触摸点不能识别为设计按键符则视为非法字符),则结果输出为“Syntax Error!!”。
若表达式有运算符连续输入,则忽略前面的运算符,只取最后一位运算符计算,正常显示数字结果。
当输入'clear'键时,情况显示区域。
当输入'read'键时,从指定目录文本文件中读取表达式并计算。
将表达式内容和计算结果显示在LCD上。
三、程序算法实现1、计算算法首先将输入的0~9数字、+-*/()运算符的内容存储于一个全局变量cal[number]中,表达为中缀表达式。
用void str2repol()函数,将输入字符串cal[number]转换成逆波兰表达式并存于全局数组char repol[maxs]中。
str2repol()函数中缀表达式转成逆波兰后缀表达式算法如下:(1)首先构造一个运算符栈stack[maxs],此运算符在栈内遵循越往栈顶优先级越高的原则。
嵌入式qt实验报告简单计算器的设计
电子科技大学学生实验报告书课程名称实用嵌入式应用系统设计与实现任课老师实验名称简单功能计算器的设计学生姓名学生学号学生学院2015 — 2016 学年第 1 学期实验项目名称简单功能计算器的设计实验日期一、实验内容1、设计一个简单计算器并能完成简单的四则运算,实时更新运算结果;2、带界面计算器自带数字及功能按钮,能实现更多以及更灵活的的计算功能。
一、实验步骤设计(包括实验方案设计、实验步骤或算法描述等)实验设计方案如下:图1 简单计算器的设计方案流程图2 带显示界面计算器的设计方案流程实验步骤:一、简单计算器的设计:1、创建一个Qt GUI应用项目,项目名称为dialog_designer ,基类选择Qwidget。
项目建好后会自动生成一系列文件,双击界面文件widget.ui 进入Qt Designer 进行界面设计。
2、界面设计完成后修改控件的各属性,并修改Tab顺序,点击工具栏上的的“编辑Tab顺序”按钮,依次按顺序点击即可,完成后再按工具栏上的编辑控件按钮返回。
3、在头文件widget.h的Widget类添加共有槽函数;在源文件widget.cpp中添加新代码。
4、用模拟器调试运行。
二、带界面的计算器的设计:与简单计算器的设计步骤基本相同。
但是需要在项目文件(后缀为.pro)添加一段代码,使得程序中能使用Qt脚本,在原有代码的基础上添加。
在头文件widget.h的Widget类添加共有槽函数和全局变量,以及包含头文件QtScript,以使用Qt Script API。
在源文件widget.cpp中添加新代码,之后即可运行调试。
三、实验结果分析及代码(包括结果描述、综合分析及实现关键代码)实验结果如下:1、简单计算器:代码:(1)在widget.h文件中#ifndef WIDGET_H#define WIDGET_H#include<QWidget>namespace Ui{class Widget;}class Widget:public QWidget{Q_OBJECTpublic:explicit Widget(QWidget*parent=0);~Widget();private slots:void on_doubleSpinBox_1_valueChanged();void on_doubleSpinBox_2_valueChanged();void on_doubleSpinBox_3_valueChanged();void on_doubleSpinBox_4_valueChanged();void on_doubleSpinBox_5_valueChanged();void on_doubleSpinBox_6_valueChanged();void on_doubleSpinBox_7_valueChanged();void on_doubleSpinBox_8_valueChanged(); private:Ui::Widget*ui;};#endif//WIDGET_H(2)在widget.cpp源文件中#include"widget.h"#include"ui_widget.h"Widget::Widget(QWidget*parent):QWidget(parent),ui(new Ui::Widget){ui->setupUi(this);}void Widget::on_doubleSpinBox_1_valueChanged(){ui->outout_plus->setText(QString::number(ui->doubleSpinBox_1->value() +ui->doubleSpinBox_2->value()));}void Widget::on_doubleSpinBox_2_valueChanged(){ui->outout_plus->setText(QString::number(ui->doubleSpinBox_1->value() +ui->doubleSpinBox_2->value()));}void Widget::on_doubleSpinBox_3_valueChanged(){ui->outout_minus->setText(QString::number(ui->doubleSpinBox_3->value( )-ui->doubleSpinBox_4->value()));}void Widget::on_doubleSpinBox_4_valueChanged(){ui->outout_minus->setText(QString::number(ui->doubleSpinBox_3->value()-ui->doubleSpinBox_4->value()));}void Widget::on_doubleSpinBox_5_valueChanged(){ui->outout_multi->setText(QString::number(ui->doubleSpinBox_5->value( )*ui->doubleSpinBox_6->value()));}void Widget::on_doubleSpinBox_6_valueChanged(){ui->outout_multi->setText(QString::number(ui->doubleSpinBox_5->value( )*ui->doubleSpinBox_6->value()));}void Widget::on_doubleSpinBox_7_valueChanged(){ui->outout_div->setText(QString::number(ui->doubleSpinBox_7->value() /ui->doubleSpinBox_8->value()));}void Widget::on_doubleSpinBox_8_valueChanged(){ui->outout_div->setText(QString::number(ui->doubleSpinBox_7->value() /ui->doubleSpinBox_8->value()));}Widget::~Widget(){delete ui;}2、带显示界面的计算器:代码:(1)在shiyanB.pro项目文件中QT+=core guiQT+=scriptgreaterThan(QT_MAJOR_VERSION,4):QT+=widgetsTARGET=shiyanBTEMPLATE=appSOURCES+=main.cpp\widget.cppHEADERS+=widget.hFORMS+=widget.ui(2)在头文件widget.h中#ifndef WIDGET_H#define WIDGET_H#include<QtScript>#include"QWidget" namespace Ui{class Widget;}class Widget:public QWidget{Q_OBJECTpublic:QString sum;//全局变量。
简易计算器实验报告
简易计算器实验报告一、实验目的本次实验的目的是设计并实现一个简易计算器,能够进行基本的四则运算(加、减、乘、除),以及处理括号的优先级运算,提高对程序设计和逻辑思维的理解与应用能力。
二、实验原理1、四则运算的优先级规则在数学运算中,先计算括号内的表达式,然后按照先乘除后加减的顺序进行计算。
乘除法的优先级高于加减法,如果在同一级运算中,按照从左到右的顺序进行。
2、数据结构的选择使用栈(Stack)数据结构来存储操作数和运算符。
栈具有先进后出的特点,非常适合处理表达式中的括号和优先级。
3、算法思路首先,将输入的表达式进行解析,将数字和运算符分别存储到不同的栈中。
然后,根据运算符的优先级进行计算,将计算结果重新压入栈中,直到表达式计算完毕。
三、实验设备及环境1、编程工具:选择了 Python 语言作为主要的编程工具,使用PyCharm 集成开发环境进行代码编写和调试。
2、操作系统:Windows 10 操作系统。
四、实验步骤1、定义数据结构定义两个栈,一个用于存储操作数(operandStack),一个用于存储运算符(operatorStack)。
2、表达式解析遍历输入的表达式字符串,将数字转换为整数并压入操作数栈,将运算符压入运算符栈。
遇到左括号直接压入运算符栈,遇到右括号则进行括号内的运算。
3、运算处理当运算符栈不为空时,取出栈顶的运算符和两个操作数进行计算。
根据运算符的优先级进行相应的运算,将结果压入操作数栈。
4、最终结果当表达式解析完毕后,操作数栈中的唯一元素即为表达式的计算结果。
五、代码实现```pythonclass SimpleCalculator:def __init__(self):selfoperandStack =selfoperatorStack =def calculate(self, expression):for char in expression:if charisdigit():selfoperandStackappend(int(char))elif char in '+/()':if char =='(':selfoperatorStackappend(char)elif char ==')':while selfoperatorStack-1!='(':operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)selfoperatorStackpop()else:while selfoperatorStack and selfhasHigherPrecedence(selfoperatorStack-1, char):operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)selfoperatorStackappend(char)while selfoperatorStack:operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)return selfoperandStackpop()def hasHigherPrecedence(self, op1, op2):if op1 in '/' and op2 in '+':return Trueelif op1 in '+' and op2 in '+':return Falseelif op1 in '/' and op2 in '/':return Falsereturn Falsedef performOperation(self, operand1, operand2, operator):if operator =='+':return operand1 + operand2elif operator =='':return operand1 operand2elif operator =='':return operand1 operand2elif operator =='/':if operand2 == 0:raise ValueError("除数不能为 0")return operand1 / operand2if __name__ =="__main__":calculator = SimpleCalculator()expression ="2 + 3 (4 1) / 2"result = calculatorcalculate(expression)print("计算结果:", result)```六、实验结果与分析1、测试用例及结果输入表达式:"2 + 3 4",计算结果:14输入表达式:"(2 + 3) 4",计算结果:20输入表达式:"5 2 3",计算结果:-1输入表达式:"10 / 2 + 1",计算结果:62、结果分析对于简单的四则运算表达式,计算器能够正确计算出结果。
嵌入式实验-简易计算器
return value;
}
return -1;
}
void Lcd_Init(void)
{
rDITHMODE=0x1223a;
rDP1_2 =0x5a5a;
rDP4_7 =0x366cd9b;
rDP3_5 =0xda5a7;
rDP2_3 =0xad7;
{
if( (temp&0x1) == 0 )
value = '=';
else if( (temp&0x2) == 0 )
value = 6;
else if( (temp&0x4) == 0 )
value = 5;
else if( (temp&0x8) == 0 )
value = 4;
while(( temp & KEY_VALUE_MASK) != KEY_VALUE_MASK) // release
Lcd_Draw_VLine(usTop, usBottom, usRight, ucColor, 1);
}
void Lcd_DspAscII8x16(INT16U x0, INT16U y0, INT8U ForeColor, INT8U * s)
{
INT16 i,j,k,x,y,xx;
INT8U qm;
case '-' : z = x-y; break;
case '*' : z = x*y; break;
case '÷' : z = x÷y; break;
}
}
P = str;
浙江大学软件学院《嵌入式软件设计与开发》课程实验高分报告-课程实验3:简易计算器概要设计做成
《嵌入式软件设计与开发》课程实验报告课程实验3:简易计算器概要设计做成姓名包子院系软件学院学号2145xxxx任课教师赵志愚指导教师赵志愚实验地点S207 实验时间2014年12月25日星期四实验课表现出勤、表现得分10% 实验报告得分40%实验总分操作结果得分50%实验目的:进行“简易计算器”的概要设计。
实验内容:进行“简易计算器”的概要设计。
该概要设计至少包括:实现点设计、结构图、流程图以及接口设计。
实验预习:(对实验内容、原理的理解)(5分)得分:1、预习概要设计的概念以及相关概念的内容;2、预习概要设计中关于实现点设计的内容;3、预习概要设计中关于在Viso下模块图的设计与实现的相关内容;4、预习概要设计中关于在Viso下流程图的设计与实现的相关内容;5、接口设计以及定义的相关内容;实验过程设计:(20分)得分:1、结合本实验“简单计算器的设计与实现”设计并实现外部模块图。
模块图如下图所示:外部关联模块图.vsd2、结合本实验“简单计算器的设计与实现”设计并实现外部模块图。
模块图如下图所示:内部关联模块图.vsd3、结合本实验“简单计算器的设计与实现”设计并实现时序图。
时序图如下图所示:时序图.vsd4、结合以上Viso图内容以及结合实验实际情况制定接口以及接口函数的定义,如下所示:6、最后,根据实际情况并完成“简单计算器的的概要设计”。
如下所示:21451108+陈高森-概要设计.doc实验结果分析:(10分)得分:概要设计是一个设计师根据用户交互过程和用户需求来形成交互框架和视觉框架的过程,其结果往往以反映交互控件布置、界面元素分组以及界面整体板式的页面框架图的形式来呈现。
这是一个在用户研究和设计之间架起桥梁,使用户研究和设计无缝结合,将对用户目标与需求转换成具体界面设计解决方案的重要阶段。
概要设计的主要任务是把需求分析得到的系统扩展用例图转换为软件结构和数据结构。
设计软件结构的具体任务是:将一个复杂系统按功能进行模块划分、建立模块的层次结构及调用关系、确定模块间的接口及人机界面等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子科技大学学生实验报告书课程名称实用嵌入式应用系统设计与实现任课老师实验名称简单功能计算器的设计学生姓名 ________________学生学号学生学院2015 20161、实验内容与简单计算器的设计步骤基本相同。
但是需要在项目文件(后缀为.pro )添加一段代码,使得程序中能使用Qt脚本,在原有代码的基础上添加。
在头文件widget.h的Widget类添加共有槽函数和全局变量,以及包含头文件QtScript,以使用Qt Script API。
在源文件widget.cpp中添加新代码,之后即可运行调试。
三、实验结果分析及代码(包括结果描述、综合分析及实现关键代码)实验结果如下:1、简单计算器:代码:(1)在widget.h文件中#ifndef WIDGET_H#define WIDGET_H#include <QWidget>namespaceji {classWidget;classWidget: public QWidget{void on_doubleSpinBox_7_valueChanged(); void on_doubleSpinBox_8_valueChanged();#endif// WIDGET_H(2)在widget.cpp源文件中#include "widget.h"#include "ui_widget.h"Widget:WidgetQWidget*pare nt):QWidget(pare nt),ui(new Ui: Widget){ui->setupUi(this);}void Widget:on_doubleSpinBox_1_valueChanged() ui-> outout_plu&>setTextQStri ng:: number(ji->doubleSpi nBox_1>value() + ui-> doubleSp in Box_2>value()));}void Widget:on_doubleSpinBox_2_valueChanged(){ui-> outout_plu&>setTextQStri ng:: nu mber(ji->doubleSpi nBox_1>value() + ui-> doubleSp inBox_2>value()));}void Widget:on_doubleSpinBox_3_valueChanged(){ui-> outout_mi nu&> setText(QStri ng:: nu mber(ji->doubleSp in Box_3>value()- ui-> doubleSp in Box_4>value()));}void Widget:on_doubleSpinBox_4_valueChanged()ui-> outout_mi nu&> setText(QStri ng:: nu mber(ji->doubleSp in Box_3>value()- ui-> doubleSp in Box_4>value()));}void Widget:on_doubleSpinBox_5_valueChanged(){ui-> outout_multi->setText(QStri ng:: nu mberQi-> doubleSp in Box_5>value() * ui-> doubleSp in Box_6>value()));}void Widget:on_doubleSpinBox_6_valueChanged(){ui-> outout_multi->setText(QStri ng:: nu mberQi-> doubleSp in Box_5>value() * ui-> doubleSp in Box_6>value()));}void Widget:o n_doubleSpi nBox_7_valueCha nged(){ui-> outout_div->setText(QStri ng::nu mber(ji-> doubleSp in Box_7>value()/ui-> doubleSp in Box_8>value()));}void Widget:o n_doubleSpi nBox_8_valueCha nged(){ui->outout_div->setText(QStri ng:: nu mber(ji->doubleSp in Box_7>value()/ ui-> doubleSp in Box_8>value()));}Widget:~Widget()QT。
報H S旨 9w «F ()9E n N>l o o p o >。
報H s旨 9w«F o g E n E o o p o >。
報H s旨寸w «10寸E n E oo p o >。
報H s旨0w «F o e E n E o o p o >。
報Hs旨CXI w «F O CXI E n E o o po >。
報H s旨Lw «F ()LE n N >l o o p o > s o -s 0一-qndQ① 6p一 m 〜 s Hluped*a)6p一M O ¥6P一m10一dx① 。
*超阻则 1w n护八!」d =//!()|nb3>|0!|0pjOA 。
嫌国辭阴/®$f // 乂)八!CPP!Q P!OA //!()nin|AI>|O!P P!OA 。
嫌国辭阴-册第//!()snui|Al>|O!P P!OA 。
嫌国辭阴 + 册第//!()sn|d>|O!P P!OA 。
嫌国辭阴o记|即//!()8^|8a>|0!P P!OA 0^®aW UB8l°//()ue8|9>|0!p pjOA 。
嫌国辭阴(册第 /Z()i8>|oejq^>|O!p pjOA //:()妙paicn>P!Q PjOA 〃伽!0押旧 P!OA 。
嫌国辭阴 0 //!()omnN>|0!PPjOA 。
嫌国辭阴 6 //!()6innN>|0!PPjOA。
嫌国辭阴 8 //!()8innN>|0!PPjOA 。
嫌国制明L//!()ZiunN>|O!P PjOAconn ect(ui->pushButton_4SIGNAL (clicked())this,SLOT(clickNum4()));conn ect(ui->pushButton_5SIGNAL (clicked())this, SLOT(clickNum5()));conn ect(ui->pushButton_6SIGNAL (clicked())this, SLOT(clickNum6()));conn ect©i->pushButton_7SIGNAL (clicked())this,SLOT(clickNum7()));conn ect(ui->pushButton_8SIGNAL (clicked())this,SLOT(clickNum8()));conn ect(ui->pushButton_9SIGNAL (clicked())this,SLOT(clickNum9()));conn ect(ui->pushButton_0SIGNAL (clicked())this,SLOT(clickNumO()));conn ect(ui-> pushButton_poi nt,SIGNAL(clicked())this,SLOT(clickPoi nt())); conn ect(ui->pushButton_lbracketSIGNAL (clicked())this,SLOT(clickLbracket())); conn ect(ui->pushButton_rbracketSIGNAL (clicked())this,SLOT(clickRbracket())); conn ect(ji->pushButton_cleanSIGNAL(clicked())this,SLOT(clickClea n()));conn ect(ji->pushButton_deleteSIGNAL (clicked())this,SLOT(clickDelete())); conn ect(ji->pushButton_plusSIGNAL (clicked())this,SLOT(clickPlus()));connect(ui->pushButton_minusSIGNAL (clicked())this,SLOT(clickMinus()));conn ect(ji->pushButton_multi,SIGNAL(clicked())this,SLOT(clickMulti())); connect(ji->pushButton_div,SIGNAL (clicked())this,SLOT(clickDiv()));conn ectJi-> pushButton_eqjJSIGNAL (clicked())this,SLOT (clickEqul())); }void Widget:clickNum1()〃按钮 1 的槽函数。
{QString num1="1";QStri ng str= ui->li neEdit->text();str=st 叶nu ml;if(ui->li neEdit->text()=="O"){ui-> lin eEdit->setText( nu ml);}else{ui-> lin eEdit->setText(str);}}void Widget:clickNum2()〃按钮 2 的槽函数。