CVI计算器设计报告.docx

上传人:b****1 文档编号:2408711 上传时间:2023-05-03 格式:DOCX 页数:38 大小:89.99KB
下载 相关 举报
CVI计算器设计报告.docx_第1页
第1页 / 共38页
CVI计算器设计报告.docx_第2页
第2页 / 共38页
CVI计算器设计报告.docx_第3页
第3页 / 共38页
CVI计算器设计报告.docx_第4页
第4页 / 共38页
CVI计算器设计报告.docx_第5页
第5页 / 共38页
CVI计算器设计报告.docx_第6页
第6页 / 共38页
CVI计算器设计报告.docx_第7页
第7页 / 共38页
CVI计算器设计报告.docx_第8页
第8页 / 共38页
CVI计算器设计报告.docx_第9页
第9页 / 共38页
CVI计算器设计报告.docx_第10页
第10页 / 共38页
CVI计算器设计报告.docx_第11页
第11页 / 共38页
CVI计算器设计报告.docx_第12页
第12页 / 共38页
CVI计算器设计报告.docx_第13页
第13页 / 共38页
CVI计算器设计报告.docx_第14页
第14页 / 共38页
CVI计算器设计报告.docx_第15页
第15页 / 共38页
CVI计算器设计报告.docx_第16页
第16页 / 共38页
CVI计算器设计报告.docx_第17页
第17页 / 共38页
CVI计算器设计报告.docx_第18页
第18页 / 共38页
CVI计算器设计报告.docx_第19页
第19页 / 共38页
CVI计算器设计报告.docx_第20页
第20页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

CVI计算器设计报告.docx

《CVI计算器设计报告.docx》由会员分享,可在线阅读,更多相关《CVI计算器设计报告.docx(38页珍藏版)》请在冰点文库上搜索。

CVI计算器设计报告.docx

CVI计算器设计报告

课程设计

基本信息

学生姓名:

学号:

院系名称:

信息与电气工程学院

课程设计名称:

用CVI设计一个普通的计算器

课程设计地点:

H408

课程设计时间:

2012年11月5日至11月10日同组人姓名:

 

课程设计内容目录页码

1、课程设计题目与任务书...……………………………………………......[2]

2、课程设计用仪器设备名称...……………………………………………..[]

3、课程设计过程……...……………………………………………………..[]

4、课程设计心得、建议等……...…………………………………………..[]

 

教师评语及课程设计成绩

评语:

 

成绩:

教师签字:

年月日

一、课程设计题目与任务书

课程设计(论文)任务书

专业

测控技术与仪器

班级

0902203

学生

徐明珠

指导教师

王玲

题目

虚拟仪器课程设计

子题

用CVI设计一个普通的计算器

设计时间

2012年11月5日至2011年11月10日共1周

设计要求

用CVI设计一个普通标准型计算器(参考操作系统中的计算器)

1、实现简单的加减乘除四则运算;

2、实现开方,百分数转化,取倒数运算;

3、可以实现清屏,清寄存器的功能;

4、实现计算器内部寄存器的存储,读取,加减,清寄存器的功能

5、菜单栏的复制,粘贴,退出等功能;

指导教师签字:

系(教研室)主任签字:

年月日

 

二、课程设计用仪器设备名称

计算机一台、NILabwindowsCVI软件;

三、课程设计过程

课程设计总体设计概述:

题目要求我们使用CVI设计一个简易的计算器,由于功能应与操作系统中的计算器类似,因而我们首先应了解系统自带的计算器的功能。

在了解了系统计算器的功能之后,我们便能使用CVI首先设计出计算器的用户界面,在生成源代码之后,为计算器每个按钮设计相对应的回调函数,通过不断的调试,使之满足设计要求,最后,我们还为设计的计算器添加了菜单,力求尽可能地与系统自带的计算器做到一样。

3.1了解系统计算器功能

图1系统计算器

操作系统自带的计算器如图1所示,下面分述各个按钮的功能

1、数字键0—9对应数字,小数点为插入小数点

2、加减乘除对应各自的功能,=号将运算结果显示出来

3、sqrt开方键,将显示的数直接开方,并显示

4、1/x倒数键,将显示的数取倒数,并显示

5、%百分号,将按百分比显示运算结果,如50+25%=62.5

6、←退格键,删除当前显示数字的最后一位

7、CE清屏

8、C清除当前的计算,包括显示的数和存储的数字和运算

9、MS将显示的数保存在内存中

10、MR将内存中存储的数显示出来

11、MC清除内存中存储的数

12、M+将显示的数与内存中存储的数相加,并存储在寄存器中

12、M—将显示的数与内存中存储的数相减,并存储在寄存器中

参照系统计算器,在CVI用户界面窗口设计了如图2的计算器面板。

图2CVI设计的计算器

3.2各按钮及回调函数介绍

加减乘除运算程序介绍:

1、数字键:

当1~9的按键按下后,其对应的回调函数会读取相应按键的标题值,并与显示框的字符串连接后重新显示在文本框中,字符串用字符串数组str1[]存储。

2、符号键:

当+,—,*,/,键按下后,会当做运算的第一个数已经输入完毕并存于str1中,将其转化为double型数据存储进strvalue1,并置运算符号的标志位,便于等号处理。

3、等号键:

当等号键按下后表明运算的第二个数已经输入完毕,将当前的输入数据转化为double型数据,并存储于strvalue2中,依据符号标志位值进行相应的操作,将运算结果存储在strvalue3中,并转化为字符串送文本框显示。

(注:

此计算器可以实现连续运算:

equalflag为输入完参加运算的两个数后是否有等号按下;若有等号按下equalflag=1,则进行有等号的正常运算操作,若没有等号按下equalflag=0,则表明有连续运算,在相应的连续运算的符号的回调函数中进行相应的运算,相当于在符号控件的回调函数中有等号运算操作)

其他按键介绍:

5、开方键:

当第一个数输入完毕后,当按下开方键后,在相应的回调函数

中将第一个数由字符串转化为double型数据存储在strvalue1中,并strvalue2=sqrt(strvalue1),将strvalue2转化为字符串并送文本框显示结果。

6、百分键:

当第一个数输入完毕后,当按下百分键后,在相应的回调函数

中将第一个数由字符串转化为double型数据存储在strvalue1中,并strvalue2=100*(strvalue1),将strvalue2转化为字符串str2,并连接%后,送文本框显示结果。

7、倒数键:

当第一个数输入完毕后,当按下倒数键后,在相应的回调函数

中将第一个数由字符串转化为double型数据存储在strvalue1中,并strvalue2=1/(strvalue1),将strvalue2转化为字符串str2,送文本框显示结果。

8、后退键:

当数输入完毕后,当按下后退键后,在相应的回调函数里,

获取当前文本框的字符串,并获取当前字符串的长度,对字符串的最后字符置零。

并送文本框显示。

9、清屏键:

当数输入完毕后,当按下清屏键后,在相应的回调函数里,

将文本框送“”显示。

10、清运算结果键:

当数输入完毕后,当按下C键后,在相应的回调

函数里将字符串数组,存储器清0。

11、当前显示数据存储键MS:

MS键将当前显示数据存储在寄存器中。

12、之前存储数据读取键MR:

MR键将之前存储在寄存器中的数据读取,并显示在文本框。

13、存储数据运算键M+(—):

将之前MS存储数据与当前数据加,减后放到文本框显示。

14、请存储键MC:

将存储器里的数据清0。

附加菜单介绍:

15、复制菜单:

将当前显示的数据复制到系统粘贴板上。

16、粘贴菜单:

将系统粘贴板上数据粘贴到当前文本框中。

四、课程设计心得

通过本次虚拟仪器课设,我学到了如何用C语言编写简单的计算器程序,熟悉了labwindowsCVI的开发环境,基本掌握了编程方法。

在实验中,我在数据的连续运算过程中遇到了困难,但通过分析,利用几个标志位来分别标志:

是否是第一次进行运算的标志xflag,两次输入数据后是否有等号按下的标志equalflag,基本解决了连续运算的问题。

总之,本次实验留给我的编程方法和思考方式,给了我很大的影响,我相信,在未来的学习中,这次实验将给予我产生巨大的指导

 

附:

//*********************************************************

//Labwindows/cvi2009实现了计算器的基本功能

//*********************************************************

#include

#include

#include

#include

#include

#include"toolbox.h"

#include"jisuanqi.h"

//*********************************************************

staticintpanelHandle,aboutpanelhandle;

staticintmenubarhandle;

staticcharstr1[20];//参数1的字符串

staticcharstr2[20];//参数2的字符串

staticcharstr3[20];

staticcharstr4[20];

staticdoublestrvalue1;//参数1的值

staticdoublestrvalue2;//参数2的值

staticdoublestrvalue3;//运算结果

staticdoublestrvalue4;//计算器存储用变量

staticdoublestrvalue5;//粘贴板用变量

staticdoublestrvalue6;//

staticdoublestrvalue7;//

staticintflag;//加减乘除的标志

staticintequalflag=1;//输完2个数后是否按下“=”标志

staticintmflag;

staticintxflag=1;

inti;

//*********************************************************

voidsetvalue(void);

//*********************************************************

intmain(intargc,char*argv[])

{

if(InitCVIRTE(0,argv,0)==0)

return-1;/*outofmemory*/

if((panelHandle=LoadPanel(0,"jisuanqi.uir",PANEL))<0)

return-1;

DisplayPanel(panelHandle);

menubarhandle=GetPanelMenuBar(panelHandle);//获取菜单栏的句柄

RunUserInterface();

DiscardPanel(panelHandle);

return0;

}

//*********************************************************

//面板的函数

//*********************************************************

intCVICALLBACKpanelcb(intpanel,intevent,void*callbackData,

inteventData1,inteventData2)

{

switch(event)

{

caseEVENT_RIGHT_CLICK:

//弹出式的菜单

RunPopupMenu(menubarhandle,MENUBAR_EDIT,panelHandle,eventData1,eventData2,0,0,0,0);

break;

caseEVENT_CLOSE:

QuitUserInterface(0);

break;

}

return0;

}

//*********************************************************

//清显示

intCVICALLBACKcmd_ce(intpanel,intcontrol,intevent,

void*callbackData,inteventData1,inteventData2)

{

switch(event)

{

caseEVENT_COMMIT:

SetCtrlVal(panelHandle,PANEL_STRING,"0");

SetCtrlVal(panelHandle,PANEL_STRING_2,"0");

break;

}

return0;

}

//*********************************************************

//清字符串

intCVICALLBACKclear(intpanel,intcontrol,intevent,

void*callbackData,inteventData1,inteventData2)

{

switch(event)

{

caseEVENT_COMMIT:

{

str1[0]='\0';

str2[0]='\0';

str3[0]='\0';

strvalue1=0;

strvalue2=0;

strvalue3=0;

strvalue4=0;

strvalue5=0;

strvalue6=0;

strvalue7=0;

flag=0;

equalflag=0;

mflag=0;

xflag=1;//清零或启动后第一次运算的标志

SetCtrlVal(panelHandle,PANEL_STRING,"0");

SetCtrlVal(panelHandle,PANEL_STRING_2,"0");

break;

}

}

return0;

}

//*********************************************************

//按键输入

//*********************************************************

intCVICALLBACKcmd_0(intpanel,intcontrol,intevent,

void*callbackData,inteventData1,inteventData2)

{

charlabeltext[2];

switch(event)

{

caseEVENT_COMMIT:

GetCtrlAttribute(panelHandle,PANEL_CMD_0,ATTR_LABEL_TEXT,labeltext);//读取控件的标题显示值

strcat(str1,labeltext);//字符串连接,将此数值控件的标题显示值加到参数1的后面

setvalue();//显示文本框显示实时的参数1

break;

}

return0;

}

//*********************************************************

intCVICALLBACKcmd_1(intpanel,intcontrol,intevent,

void*callbackData,inteventData1,inteventData2)

{

charlabeltext[2];

switch(event)

{

caseEVENT_COMMIT:

GetCtrlAttribute(panelHandle,PANEL_CMD_1,ATTR_LABEL_TEXT,labeltext);

strcat(str1,labeltext);

setvalue();

break;

}

return0;

}

//*********************************************************

intCVICALLBACKcmd_2(intpanel,intcontrol,intevent,

void*callbackData,inteventData1,inteventData2)

{

charlabeltext[2];

switch(event)

{

caseEVENT_COMMIT:

GetCtrlAttribute(panelHandle,PANEL_CMD_2,ATTR_LABEL_TEXT,labeltext);

strcat(str1,labeltext);

setvalue();

break;

}

return0;

}

//*********************************************************

intCVICALLBACKcmd_3(intpanel,intcontrol,intevent,

void*callbackData,inteventData1,inteventData2)

{

charlabeltext[2];

switch(event)

{

caseEVENT_COMMIT:

GetCtrlAttribute(panelHandle,PANEL_CMD_3,ATTR_LABEL_TEXT,labeltext);

strcat(str1,labeltext);

setvalue();

break;

}

return0;

}

//*********************************************************

intCVICALLBACKcmd_4(intpanel,intcontrol,intevent,

void*callbackData,inteventData1,inteventData2)

{

charlabeltext[2];

switch(event)

{

caseEVENT_COMMIT:

GetCtrlAttribute(panelHandle,PANEL_CMD_4,ATTR_LABEL_TEXT,labeltext);

strcat(str1,labeltext);

setvalue();

break;

}

return0;

}

//*********************************************************

intCVICALLBACKcmd_5(intpanel,intcontrol,intevent,

void*callbackData,inteventData1,inteventData2)

{

charlabeltext[2];

switch(event)

{

caseEVENT_COMMIT:

GetCtrlAttribute(panelHandle,PANEL_CMD_5,ATTR_LABEL_TEXT,labeltext);

strcat(str1,labeltext);

setvalue();

break;

}

return0;

}

//*********************************************************

intCVICALLBACKcmd_6(intpanel,intcontrol,intevent,

void*callbackData,inteventData1,inteventData2)

{

charlabeltext[2];

switch(event)

{

caseEVENT_COMMIT:

GetCtrlAttribute(panelHandle,PANEL_CMD_6,ATTR_LABEL_TEXT,labeltext);

strcat(str1,labeltext);

setvalue();

break;

}

return0;

}

//*********************************************************

intCVICALLBACKcmd_7(intpanel,intcontrol,intevent,

void*callbackData,inteventData1,inteventData2)

{

charlabeltext[2];

switch(event)

{

caseEVENT_COMMIT:

{

GetCtrlAttribute(panelHandle,PANEL_CMD_7,ATTR_LABEL_TEXT,labeltext);

strcat(str1,labeltext);

setvalue();

break;

}

}

return0;

}

//*********************************************************

intCVICALLBACKcmd_8(intpanel,intcontrol,intevent,

void*callbackData,inteventData1,inteventData2)

{

charlabeltext[2];

switch(event)

{

caseEVENT_COMMIT:

GetCtrlAttribute(panelHandle,PANEL_CMD_8,ATTR_LABEL_TEXT,labeltext);

strcat(str1,labeltext);

setvalue();

break;

}

return0;

}

//*********************************************************

intCVICALLBACKcmd_9(intpanel,intcontrol,intevent,

void*callbackData,inteventData1,inteventData2)

{

charlabeltext[2];

switch(event)

{

caseEVENT_COMMIT:

GetCtrlAttribute(panelHandle,PANEL_CMD_9,ATTR_LABEL_TEXT,labeltext);

strcat(str1,labeltext);

setvalue();

break;

}

return0;

}

//*********************************************************

intCVICALLBACKcmd_dot(intpanel,intcontrol,int

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2