计算器课程研究型学习技术报告.doc_第1页
计算器课程研究型学习技术报告.doc_第2页
计算器课程研究型学习技术报告.doc_第3页
计算器课程研究型学习技术报告.doc_第4页
计算器课程研究型学习技术报告.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Labwindows CVI课程研究型学习技术报告项目名称: 基于CVI的简易计算器 学生姓名: 学号: 项目序号: 专业: 自动化 提交时间: 指导老师: 目录一、项目概述11.1前面板设计11.2前面板各按键编辑面板11.3各个按钮功能21.4 各按钮及回调函数介绍2二、硬件设计3三、程序设计4五、运行结果20六、讨论22七、参考文献22一、项目概述1.1前面板设计1.2前面板各按键编辑面板表1 控件属性设置表名称控件类型主要属性CMD_OFFCommand Button标题:_OFF回调函数: offCMD_CLEARCommand Button标题:_AC回调函数:clearCMD_1Command Button标题:1 回调函数:cmd_1CMD_2Command Button标题:2 回调函数:cmd_2CMD_3Command Button标题:3 回调函数:cmd_3CMD_4Command Button标题:4 回调函数:cmd_4CMD_5Command Button标题:5 回调函数:cmd_5CMD_6Command Button标题:6 回调函数:cmd_6CMD_7Command Button标题:7 回调函数:cmd_7CMD_8Command Button标题:8 回调函数:cmd_8CMD_9Command Button标题:9 回调函数:cmd_9CMD_0Command Button标题:0 回调函数:cmd_0CMD_PLUSCommand Button标题:+ 回调函数:cmd_plusCMD_MINUSCommand Button标题:- 回调函数:cmd_minusCMD_MULCommand Button标题:* 回调函数:cmd_mulCMD_DIVCommand Button标题:/ 回调函数:cmd_divCMD_SQUCommand Button标题:x2 回调函数:cnd_squCMD_SQRCommand Button标题: 回调函数:cmd_sqrCMD_EQUALCommand Button标题:= 回调函数:cmd_equalCMD_DAOCommand Button标题:1/x 回调函数:cmd_daoStringstring标题:无DECORATIONdecoration标题:无DECORATION_2decoration标题:无1.3各个按钮功能1.数字键09对应数字,小数点为插入小数点;2.加减乘除对应各自的功能;3.sqrt开方键,将显示的数直接开方并显示;4.1/x 倒数键,将显示的数取倒数并显示;5.x2平方键,将显示的数平方并显示;6.退格键,删除当前显示数字的最后一位;7.AE 清屏;8.= 号将运算结果显示出来;9.OFF键关闭计算器。1.4 各按钮及回调函数介绍1.数字键:当19的按键按下后,其对应的回调函数会读取相应按键的标题值,并与显示框的字符串连接后重新显示在文本框中,字符串用字符串数组str1 存储。2.符号键:当+,*,/,键按下后,会当做运算的第一个数已经输入完毕并存于str1中,将其转化为double型数据存储进strvalue1,并置运算符号的标志位,便于等号处理。3.等号键:当等号键按下后表明运算的第二个数已经输入完毕,将当前的输入数据转化为double型数据,并存储于strvalue2中,依据符号标志位值进行相应的操作,将运算结果存储在strvalue3中,并转化为字符串送文本框显示。 4.开方键:当第一个数输入完毕后,当按下开方键后,在相应的回调函数中将第一个数由字符串转化为double型数据存储在strvalue1中,并strvalue2=sqrt(strvalue1),将strvalue2转化为字符串并送文本框显示结果。 5.平方键:当第一个数输入完毕后,当按下平方键后,在相应的回调函数中将第一个数由字符串转化为double型数据存储在strvalue1中,并strvalue2= strvalue1*strvalue1,将strvalue2转化为字符串str2,送文本框显示结果。6.倒数键:当第一个数输入完毕后,当按下倒数键后,在相应的回调函数中将第一个数由字符串转化为double型数据存储在strvalue1中,并strvalue2=1/ (strvalue1),将strvalue2转化为字符串str2,送文本框显示结果。7.后退键:当数输入完毕后,当按下后退键后,在相应的回调函数里,获取当前文本框的字符串,并获取当前字符串的长度,对字符串的最后字符置零并送文本框显示。8.清屏键:当数输入完毕后,当按下清屏键后,在相应的回调函数里,将文本框送“”显示。9.结束键:当按下结束键后,在相应的回调函数里关闭面板。二、硬件设计无三、程序设计四、程序代码/头文件#include #include #include #include #include #include jsq.hstatic int panelHandle;/定义两个数组,是两个要运算的字符串显示static char str150;static char str250;/定义三个值,两个运算值和一个结果值static double strvalue1;static double strvalue2;static double strvalue3;/判断加减乘除四则运算static int flag;/static int euqal=0; int main (int argc, char *argv)if (InitCVIRTE (0, argv, 0) = 0)return -1;/* out of memory */if (panelHandle = LoadPanel (0, jsq.uir, PANEL) 0)return -1;DisplayPanel (panelHandle);RunUserInterface ();DiscardPanel (panelHandle);return 0;void setvalue (void)SetCtrlVal (panelHandle, PANEL_STRING, );SetCtrlVal (panelHandle, PANEL_STRING, str1);/结束运行int CVICALLBACK off (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)switch (event)case EVENT_COMMIT:QuitUserInterface (0);break;return 0;/清字符串int CVICALLBACK clear (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)switch (event)case EVENT_COMMIT:str10=0; str20=0; strvalue1=0;strvalue2=0;strvalue3=0;flag=0;SetCtrlVal (panelHandle, PANEL_STRING, );break;return 0;int CVICALLBACK cmd_back (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)switch (event)case EVENT_COMMIT:GetCtrlVal (panelHandle, PANEL_STRING, str1); if(str10!=/0 ) str1strlen(str1)-1=0; SetCtrlVal (panelHandle, PANEL_STRING, str1); else SetCtrlVal (panelHandle, PANEL_STRING, 0); break;return 0;/按键输入1int CVICALLBACK cmd_1 (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)char labeltext2;switch (event)case EVENT_COMMIT:/ 读取控件的标题显示值GetCtrlAttribute (panelHandle, PANEL_CMD_1, ATTR_LABEL_TEXT, labeltext);/ 字符串连接,将此数值控件的标题显示值加到参数1的后面strcat (str1, labeltext);/显示文本框显示实时的参数1setvalue ();break;return 0;/按键输入2int CVICALLBACK cmd_2 (int panel, int control, int event,void *callbackData, int eventData1, int eventData2)char labeltext2;switch (event)case EVENT_COMMIT:GetCtrlAttribute (panelHandle, PANEL_CMD_2, ATTR_LABEL_TEXT, labeltext);strcat (str1, labeltext);setvalue ();break;return 0;/按键输入3int CVICALLBACK cmd_3 (int panel, int control, int event,void *callbackData, int eventData1, int eventData2)char labeltext2;switch (event)case EVENT_COMMIT:GetCtrlAttribute (panelHandle, PANEL_CMD_3, ATTR_LABEL_TEXT, labeltext);strcat (str1, labeltext);setvalue ();break;return 0;/按键输入4int CVICALLBACK cmd_4 (int panel, int control, int event,void *callbackData, int eventData1, int eventData2)char labeltext2;switch (event)case EVENT_COMMIT:GetCtrlAttribute (panelHandle, PANEL_CMD_4, ATTR_LABEL_TEXT, labeltext);strcat (str1, labeltext);setvalue ();break;return 0;/按键输入5int CVICALLBACK cmd_5 (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)char labeltext2;switch (event)case EVENT_COMMIT:GetCtrlAttribute (panelHandle, PANEL_CMD_5, ATTR_LABEL_TEXT, labeltext);strcat (str1, labeltext);setvalue ();break;return 0;/按键输入6int CVICALLBACK cmd_6 (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)char labeltext2;switch (event)case EVENT_COMMIT:GetCtrlAttribute (panelHandle, PANEL_CMD_6, ATTR_LABEL_TEXT, labeltext);strcat (str1, labeltext);setvalue ();break;return 0;/按键输入7int CVICALLBACK cmd_7 (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)char labeltext2;switch (event)case EVENT_COMMIT:GetCtrlAttribute (panelHandle, PANEL_CMD_7, ATTR_LABEL_TEXT, labeltext);strcat (str1, labeltext);setvalue ();break;return 0;/按键输入8int CVICALLBACK cmd_8 (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)char labeltext2;switch (event)case EVENT_COMMIT:GetCtrlAttribute (panelHandle, PANEL_CMD_8, ATTR_LABEL_TEXT, labeltext);strcat (str1, labeltext);setvalue ();break;return 0;/按键输入9int CVICALLBACK cmd_9 (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)char labeltext2;switch (event)case EVENT_COMMIT:GetCtrlAttribute (panelHandle, PANEL_CMD_9, ATTR_LABEL_TEXT, labeltext);strcat (str1, labeltext);setvalue ();break;return 0;/按键输入0int CVICALLBACK cmd_0 (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)char labeltext2;switch (event)case EVENT_COMMIT:GetCtrlAttribute (panelHandle, PANEL_CMD_0, ATTR_LABEL_TEXT, labeltext);strcat (str1, labeltext);setvalue ();break;return 0;/按键输入小数点int CVICALLBACK cmd_dot (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) char labeltext2;switch (event)case EVENT_COMMIT:GetCtrlAttribute (panelHandle, PANEL_CMD_DOT, ATTR_LABEL_TEXT, labeltext);strcat (str1, labeltext);setvalue ();break;return 0;/等于int CVICALLBACK cmd_equal (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)switch (event)case EVENT_COMMIT:/按下等号后参数1已经存放于strvalue1中,下面将字符串1输入结果放入strvalue2中GetCtrlVal (panelHandle, PANEL_STRING, str1);Fmt (&strvalue2, %f%s, str1); str10=0;/将参数1由字符串转化为double型数据,赋给strvalue2SetCtrlVal (panelHandle, PANEL_STRING, );switch (flag)case 1:strvalue3=strvalue1+strvalue2;Fmt (str2, %s%f, strvalue3);SetCtrlVal (panelHandle, PANEL_STRING, str2);str20=0;break;case 2:strvalue3=strvalue1-strvalue2;Fmt (str2, %s%f, strvalue3);SetCtrlVal (panelHandle, PANEL_STRING, str2);str20=0;break;case 3:strvalue3=strvalue1*strvalue2;Fmt (str2, %s%f, strvalue3);SetCtrlVal (panelHandle, PANEL_STRING, str2);str20=0;break;case 4:strvalue3=strvalue1/strvalue2;Fmt (str2, %s%f, strvalue3);SetCtrlVal (panelHandle, PANEL_STRING, str2);str20=0;/case 5:/strvalue3=strvalue1*strvalue1;/Fmt (str2, %s%f, strvalue3);/SetCtrlVal (panelHandle, PANEL_STRING, str2);/str20=0;break;default:/没有运算,直接按等于Fmt (str2, %s%f, strvalue2); SetCtrlVal (panelHandle, PANEL_STRING, str2);break;break;return 0;/运算加int CVICALLBACK cmd_plus (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)switch (event)case EVENT_COMMIT:/从文本显示框获取参数1的值GetCtrlVal (panelHandle, PANEL_STRING, str1);/将参数1由字符串转化为double型数据,赋给strvalue1Fmt (&strvalue1, %f%s, str1);/字符串1清零 str10=0;SetCtrlVal (panelHandle, PANEL_STRING, +);flag=1;break;return 0;/运算减int CVICALLBACK cmd_minus (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)switch (event)case EVENT_COMMIT:GetCtrlVal (panelHandle, PANEL_STRING, str1);Fmt (&strvalue1, %f%s, str1); str10=0;SetCtrlVal (panelHandle, PANEL_STRING, -);flag=2;break;return 0;/运算乘int CVICALLBACK cmd_mul (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)switch (event)case EVENT_COMMIT:GetCtrlVal (panelHandle, PANEL_STRING, str1);Fmt (&strvalue1, %f%s, str1); str10=0;SetCtrlVal (panelHandle, PANEL_STRING, *);flag=3;break;return 0;/运算除int CVICALLBACK cmd_div (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)switch (event)case EVENT_COMMIT:GetCtrlVal (panelHandle, PANEL_STRING, str1);Fmt (&strvalue1, %f%s, str1); str10=0;SetCtrlVal (panelHandle, PANEL_STRING, /);flag=4;break;return 0;/平方int CVICALLBACK cnd_squ (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)switch (event)case EVENT_COMMIT:GetCtrlVal (panelHandle, PANEL_STRING, str1);Fmt (&strvalue1, %f%s, str1); str10=0;SetCtrlVal (panelHandle, PANEL_STRING, x2);strvalue2=strvalue1*strvalue1;Fmt (str2, %s%f, strvalue2);SetCtrlVal (panelHandle, PANEL_STRING, str2);str20=0; /flag=5; break;return 0; /开方int CVICALLBACK cmd_sqr (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)switch (event)case EVENT_COMMIT:GetCtrlVal (panelHandle, PANEL_STRING, str1);Fmt (&strvalue1, %f%s, str1); str10=0;SetCtrlVal (panelHandle, PANEL_STRING, );strvalue2=sqrt(strvalue1);Fmt (str2, %s%f, strvalue2);SetCtrlVal (panelHandle, PANEL_STRING, str2);str20=0; break;return 0;/取倒数int CVICALLBACK cmd_dao (int panel, int control,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论