课程设计—模拟计算器设计教材_第1页
课程设计—模拟计算器设计教材_第2页
课程设计—模拟计算器设计教材_第3页
课程设计—模拟计算器设计教材_第4页
课程设计—模拟计算器设计教材_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、幽X州卑厚配IVMYtaiJiTgr rtC-FM.SV嵌 入 式 课 程 设 计课题:基于uCOS/uCGUI的模拟计算器实现报告:张昌世自动化091109031027小组成员:刘锋自动化091109031023陈奇英自动化091109031001彭桂贤自动化091109031002指导老师:陈才i幽X列卑星院摘要:计算器这一小小的程序机器实际上是从计算机中割裂出来的衍生品,但因其方便快捷 的操作模式,已经被广泛应用于工程、学习、商业等日常生活中,极大的方便了人们对于数字 的整合运算。 现今的计算器已经不仅仅停留在传统的硬件上,而是越来越软件化,它可以在 手机里,在电脑上,在许许多的的电子产

2、品上。所以有必要在自己平时学习的开发板上做个带 界面显示的计算器来证明下自己的能力。引言:简单的计算器包括 09的数字输入键,小数点输入键,+、-*、人=运算键等,还可以加入其他运算:如三角运算(sin, cos,ta n,cot等),一些当木运算(平方,开方,阶乘等)。由 于条件和能力有限,所以就做个能实现四则运算的简易计算器。计算器的程序设计实际上富有一定的难度,虽然乍一想很简单,只要实现下加减乘除 运算,然后显示出来就可以了,但实际上运算结果跟图像界面的数据交换,还有浮点数的处理 等都很折腾人。通过本次设计,体会到了学习的不易,还有自己能力上的不足!一、课题描述:在STM32开发板上实现

3、简易的计算器。计算器界面显示在TFT彩屏上,采用触摸屏上模拟按钮来实现数据及运算符的输入。最后把运算的结果显示在彩屏。最基本要求:有加减 乘除运算,有带小数点的运算。二、课题分析a)、硬件要求:处理器选择:STM32F103ZE,这款处理器具有 512K的flash,64K的RAM,足够大的空 间,可以让程序员的可以有更大的发挥空间,而不用为节省空间而上脑筋。TFT彩屏:带触摸的TFT彩屏,3.2寸,分辨为240*320的真彩彩屏。JLink仿真器:使用JLink v8仿真器,仿真器能够下载程序、在线仿真,便于程序编写 与错误检查。b)、软件要求:操作系统:使用uC/OS嵌入式实时操作系统。由

4、于触屏要实时响应,所以需要使用操 作系统,并给触屏专门建立一个任务。CPU其他的操作组成一个任务。程序在两个任务中相互切换。图形软件:使用 uCGUI嵌入式图形界面软件。uCGUI是个小型的图形软件,包括有基本的图形显示,还有许多图形控件,如:按钮,编辑框,窗口,滚动条等等,而我们的计算器 的制作就要用到其中的按钮、编辑框和窗口3个控件。固件库:STM32编程,可以使用固件库,ST公司提供STM32处理器的固件库,以方便程序员编程,缩短了项目的编程周期。C)、设计方案:界面布局:1个编辑框:位于彩屏左上角,占整屏的 1/5左右,用于数据输入显示,运算 符的输入显示。编辑框内最大输入和显示的长度

5、为10,这就限制了数据的范围。11个数子按钮:位于左下角开始向上向右的按钮队列,分别为: 34, 5, 67, 890,.。可以输 入操作者任意想要的数据,进行运算。6个运算符按钮:位于屏幕偏右的数来第一列和第二列的位子上。实现加减乘 除倒数平方6个运算,对应的按钮分别为:+ , - ,* ,/,1/X *2 2个操作按钮:位于屏幕右侧数来第一列的位子上。功能分别为等号和清楚。 对应着=和clear两个按钮。等号得到计算得到的结果,清除键清楚编 辑框上的数字和取消当前运算操作的功能1个说明按钮:位于屏幕的右上角。对应About 按钮,点击该按钮,就会跳出一个对话框,上面显示本课程设计的小组成员

6、们名字。1个对话框:当点击About 按钮时,就会跳出来,对话框上显示四个课程设 计小组成员的姓名,还有一个“0K “按钮,点击“ 0K ”按钮就会结束当前的对话框,关闭对话框。功能说明:1、数字键被按下去时,在编辑框内显示输入的数,这里需要注意的是,编辑框内的内容时字符串的形式,例如按下12时,并不是表示数字 12,而是字符串“12”,先是按下1键,再按下2 键,按下第二个键的时候不能将编 辑框的第一个数覆盖掉,而是要接到第一个数后面。2、当运算符按钮被按下时,把按下去之前的编辑框的字符串转化成负浮点数形式保存在var中,然后将编辑框显示 ,如果运算符被按下了两次,表示之 前已经有两个变量要

7、进行了计算,直接显示结算结果。3、当按下1/X,和XA2时,并不增加变量的个数,只是将原先变量运算后 的结果覆盖原先变量,参加后续的计算。4、按下About键是,会跳出一个对话框,该对话框支持移动,故可以将其拖 到屏幕任意位子,点下对话框上的 0K键,就会关闭对话框。之后再点下 About键后对话框优惠弹出来。三、相关介绍说明3a)、STM32F103ZT6E 介绍:ARM 32 位 Cortex-M3 微处理器,72MHz 频率,512kB Flash, 64kB SRAM,灵活的静态 存储器控制器存储器:SRAM, PSRAM, NOR 和NAND Flash,PLL,内置的RC正当频率为

8、8MHz和32kHz,实时时钟,嵌套中断控制器,节电模式,JTAG和SWD两种模 式,4个同步16位计时器与输入捕获,输出比较和PWM波,2个16位的高级定时器,2 个16位的基本定时器,2个16位的看门狗定时器,系统时钟定时器,3个SPI/I2S模块,2 个 I2C 模块,5 个 USART 模块,一个 USB 2.0 全速接口,一个 CAN 2.0B Active, 3 个 112 位16通道A/D控制器,2个12位的D/A控制器,1个SDIO接口,快速的I/O 口。b)、uCOS 介绍:Q/OS-II是一种可移植的,可植入 ROM的,可裁剪的,抢占式的,实时多任 务操作系统内核。它被广泛

9、应用于微处理器、微控制器和数字信号处理器。pC/OS-II的前身是 Q/OS,最早出自于 1992年美国嵌入式系统专家 Jean J.Labrosse 在嵌入式系统编程杂志的 5月和6月刊上刊登的文章连载,并把 PC/OS的源码发布在该杂志的 B B S上。PC/OS和pC/OS-II是专门为计算机的嵌入式应用设计的,绝大部分代码是用 C语言编写的。CPU硬件相关部分是用汇编语言编写的、总量约200行的汇编语言|部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU上。用户只要有标准的ANSI的C交叉编译器,有汇编器、连接器等软件工具,就可以将pC/OS-II嵌入到开发的产品中。PC/OS

10、-II具有执行效率高、占用空间小、实时性能优良和可扩展性强等特 点, 最小内核可编译至2KB。PC/OS-II已经移植到了几乎所有知名的CPU上。严格地说uC/OS-ll只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理, 时间管理,内存管理和任务间的通信和同步等基本功能。没有提供输入输出管理,文 件系统,网络等额外的服务。但由于uC/OS-ll良好的 可扩展性和源码开放,这些非必须的功能完全可以由用户自己根据需要分别实现。uC/OS-II目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核 之上提 供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。uC/OS-

11、II以源代码的形式发布,但并不意味着它是开源软件。你可以将其用于 教学和 私下研究(peaceful research );但是如果你将其用于商业用途,那么你必须 通过Micrium获得商用许可。c)、uCGUI 简介UCGUI是一种嵌入式应用中的图形支持系统。它设计用于为任何使用LCD图形显示的应用提供高效的独立于处理器及LCD控制器的图形用户接口,它适用单任务或是多任务系统环境,并适用于任意LCD控制器和CPU下任何尺寸的真实显示或 虚拟显 示。它的设计架构是模块化的,由不同的模块中的不同层组成,由一个LCD驱动层来包含所有对 LCD的具体图形操作。UCGUI可以在任何的 CPU上运行,因

12、为它是 100%的标准C代码编写的。 UCGUI能够适应大多数的使用黑白或彩色LCD的应 用,它提供非常好的允许处理灰度的颜色管理。还提供一个可扩展的2D图形库及占用极少RAM的窗口管理体系。 CGUI的设计目标是为使用 LCD作为图形显示装置的应用提供高效的/与 LCD控制器独立及处理器独立的图形用户接口。它适合于单任务环境及多任务环境, 如私用的操作系统或是商业的RTOS(实时操做系统。UCGUI以C源码形式提供,并 适用于任意LCD控制器和CPU下任何尺寸的真实显示或虚拟显示。它包含以下特性:1 适用任何8/16/32位CPU,只要有相对应的标准 C编译器.2 任何的控制器的LCD显示器

13、(单色,灰度,颜色),只要有适合的LCD驱动可 用.3 在小模式显示时无须 LCD控制器.4 所有接口支持使用宏进行配制5 显示尺寸可定制6 字符和位图可在LCD显示器上的任意起点显示,并不仅局限于偶数对齐 的地址起点7 程序在大小和速度上都进行了优化 8 编译时允许进行不同的优化 .、9 对于缓慢一些的LCD控制器丄CD显存可以映射到内存当中,从而减 少访问次数到最小并达到更高的显示速度10 清晰的设计架构11 支持虚拟显示,虚拟显示可以比实际尺寸大(即放大)四、代码分析a)、uCOS部分代码建立两个任务/*OS两个任务堆栈区*/OS_STK Main Task1StkMAXSTKSIZE;

14、OS_STK Task1StkMAXSTKSIZE;/*两个任务函数*/void Mai nTask1(void *pdata);void Task1(void *pdata);/*主函数,建立两个任务 */int mai n()OSInit();/OS 初始化建OSTaskCreate(Mai nTask1,(void *)0,&Mai nTask1StkMAXSTKSIZE-1,1); 立任务OSTaskCreate(Task1,(void *)0, &Task1StkMAXSTKSIZE-1,2);OSStart();/*任务一:初始化板子,初始化液晶,建立计算器图像界面*/#幽x州卑星

15、配I JEHtllAMi. wmaw鼻 3CMWE K T tGHMSIGCYvoid Main Task1(void *pdata) pdata=pdata;BSP_I nit();GUIni t();GUI_SetBkColor(GUI_BLACK);GUI_Clear();GUI_TOUCH_Calibrate(0,0,320,296,3854);GUI_TOUCH_Calibrate(1,0,240,249,3906);/ GUI_CURSOR_Show();WidgetCreate();GUI_Exec();for(;)KeyCallback(edit);硬件初始化/GUI初始化设置

16、彩屏背景颜色为黑色屏幕校准/显示光标建立控件显示控件响应控件/*任务二:专门为触屏和控件的更新而建立的任务*/void Task1(void *pdata)pdata=pdata;for(;)WM_Exec();/ 更新窗口GUI_TOUCH_Exec();更新触屏OSTimeDly(1O);b) 、计算器图形界面的相关代码/*GUI相关变量*/EDIT_Ha ndle edit;BUTTON_Ha ndle numO,nu m1, num2,nu m3, num4,num5,nu m6, nu m7, nu m8, nu m9; 数字09,BUTTON_Ha ndle numPoi nt,n

17、 umPlus ,n umSub, numMul, nu mDiv;/小数点,加号,减号,除号,乘号 -BUTTON_Handle clear,inverse,square,equal,about; / 清除,倒数,平方,等于/*图形界面函数*/void WidgetCreate(void)/*画计算器边框*/15GUI_SetPe nSize(3);GUI_SetColor(GUI_RED);GUI_DrawLi ne(7,0,7,239);GUI_DrawLi ne(311,0,311,239);GUI_DrawLi ne(7,238,311,238);GUI_DrawLi ne(7,1,

18、311,1);/设置之前宽度为3个像素/设置边框颜色为红色画边框edit=EDIT_Create(15,5,225,50,e,10,WM_CF_SHOW); 创建编辑框EDIT_SetFo nt(edit,&GUI_Fo nt32B_ASCII);设置编辑框内容字体大小num7=BUTTON_Create(15,60,50,35,7,WM_CF_SHOW); 创建数字 7 的按钮设置字体24号按钮上显示7/设置字体颜色 设置按钮背景颜色BUTTON_SetF on t( nu m7,&GUI_ Fon t24_ASCII); BUTTON_SetText (nu m7,7);BUTTON_Se

19、tTextColor( nu m7,0,GUI_WHITE); BUTTON_SetBkColor( nu m7,0,GUI_DARKBLUE);num4=BUTTON_Create(15,105,50,35,4,WM_CF_SHOW); 创建数字 4 的按钮 BUTTON_SetFo nt(n um4,&GUI_Fo nt24_ASCI);BUTTON_SetText (num 4,4);BUTTON_SetTextColor( num 4,0,GUI_WHITE);BUTTON_SetBkColor( num 4,0,GUI_DARKBLUE);num 仁BUTTON_Create(15,

20、15O,5O,35,1,WM_CF_SHOW); / 创建数字 1 的按钮 BUTTON_SetFo nt(n um1,&GUI_Fo nt24_ASCII);BUTTON_SetText (nu m1,1);BUTTON_SetTextColor( nu m1,0,GUI_WHITE);BUTTON_SetBkColor( nu m1,0,GUI_DARKBLUE);numO=BUTTON_Create(15,195,11O,35,O,WM_CF_SHOW); 创建数字 0 的按钮 BUTTON_SetF on t( num0,&GUI_ Fon t24_ASCII);BUTTON_SetT

21、ext( nu m0,0);BUTTON_SetTextColor( num 0,0,GUI_WHITE);BUTTON_SetBkColor( num 0,0,GUI_DARKBLUE);num8=BUTTON_Create(74,60,50,35,8,WM_CF_SHOW);/创建数字 8 的按钮BUTTON_SetF on t( nu m8,&GUI_ Fon t24_AsCll);BUTTON_SetText( nu m8,8);BUTTON_SetTextColor( nu m8,0,GUI_WHITE);BUTTON_SetBkColor( nu m8,0,GUI_DARKBLUE

22、);num5=BUTTON_Create(74,105,50,35,5,WM_CF_SHOW); / 创建数字 5 的按钮 BUTTON_SetF on t( nu m5,&GUI_ Fon t24_ASCII);BUTTON_SetText( nu m5,5);BUTTON_SetTextColor( nu m5,0,GUI_WHITE);BUTTON_SetBkColor( nu m5,0,GUI_DARKBLUE);num2=BUTTON_Create(74,150,50,35,2,WM_CF_SHOW); / 创建数字 2 的按钮 BUTTON_SetF on t( nu m2,&GU

23、I_ Fon t24_ASCII);BUTTON_SetText (nu m2,2);BUTTON_SetTextColor( nu m2,0,GUI_WHITE);BUTTON_SetBkColor( nu m2,0,GUI_DARKBLUE);num9=BUTTON_Create(133,60,50,35,9,WM_CF_SHOW); /BUTTON_SetF on t( nu m9,&GUI_ Fon t24_ASCII); BUTTON_SetText( nu m9,9);BUTTON_SetTextColor( nu m9,0,GUI_WHITE);BUTTON_SetBkColor

24、( nu m9,0,GUI_DARKBLUE);创建数字9的按钮按钮num6=BUTTON_Create(133,1O5,5O,35,6,WM_CF_SHOW);BUTTON_SetF on t( nu m6,&GUI_ Fon t24_ASCII);BUTTON_SetText (nu m6,6);BUTTON_SetTextColor( nu m6,0,GUI_WHITE);BUTTON_SetBkColor( nu m6,0,GUI_DARKBLUE);num3=BUTTON_Create(133,150,50,35,3,WM_CF_SHOW); /BUTTON_SetF on t( n

25、u m3,&GUI_ Fon t24_ASCII);BUTTON_SetText( nu m3,3);BUTTON_SetTextColor( nu m3,0,GUI_WHITE);BUTTON_SetBkColor( nu m3,0,GUI_DARKBLUE);创建数字6的按钮创建数字3的按钮numPoint=BUTTON_Create(133,195,5O,35,.,WM_CF_SHOW); 创建小数点的按BUTTON_SetFo nt(nu mPoi nt,&GUI_Fo nt24_ASCII); BUTTON_SetText (nu mPo in t,.);BUTTON_SetText

26、Color( nu mPoi nt,O,GUI_WHITE); BUTTON_SetBkColor( nu mPoi nt,O,GUI_DARKBLUE);numDiv=BUTTON_Create(192,6O,5O,35,/,WM_CF_SHOW);BUTTON_SetFo nt(nu mDiv,&GUI_Fo nt24_ASCII); BUTTON_SetText (nu mDiv,/);numMul=BUTTON_Create(192,1O5,5O,35,*,WM_CF_SHOW); BUTTON_SetFo nt(num Mui,&GUI_Fo nt24_ASCII); BUTTON_

27、SetText( num Mui,*);numSub=BUTTON_Create(192,15O,5O,35,-,WM_CF_SHOW);BUTTON_SetFo nt(n umSub, &GUI_Fo nt24_ASCIl)BUTTON_SetText (nu mSub,-);创建除号/的按钮创建乘号*的按钮创建减号-的按钮numPlus=BUTTON_Create(192,195,50,35,+,WM_CF_SHOW); /BUTTON_SetFo nt(n umPlus,&GUI_Fo nt24_ASCII); BUTTON_SetText( nu mPlus,+);创建加好+的按cle

28、ar=BUTTON_Create(251,60,50,35,c,WM_CF_SHOW); / 创建清除键 clear 的BUTTON_SetFo nt(clear, &GUI_Fo nt24_ASCII);BUTTON_SetText(clear,clear);BUTTON_SetBkColor(clear,0,GUI_YELLOW);钮in verse=BUTT0N_Create(251,105,50,35,i,WM_CF_SH0W); /创建倒数1/X的按BUTTON_SetFo nt(i nverse, &GUI_Fo nt24_ASCII);BUTTON_SetText(i nvers

29、e,1/X);钮square=BUTT0N_Create(251,150,50,35,s,WM_CF_SH0W);创建平方XA2的按BUTTON_SetFo nt(square,&GUI_Fo nt24_ASCII);BUTTON_SetText(square,XA2);equal=BUTTON_Create(251,195,50,35,=,WM_CF_SHOW);/BUTTON_SetFo nt(equal,&GUI_Fo nt24_ASCII);BUTTON_SetText(equal,=);BUTTON_SetBkColor(equal,0,GUI_YELLOW);创建等号=:的按钮的按

30、钮about=BUTTON_Create(249,20,57,30,a,WM_CF_SHOW); /创建说明信息aboutBUTTON_SetFo nt(about,&GUI_Fo nt24_ASCII);BUTTON_SetText(about,About);BUTTON_SetBkColor(about,0,GUI_LIGHTGRAY);c)、按键响应代码 /*按钮响应函数*/void KeyCallback(EDIT_Ha ndle obj) -/*重画边框,因为控件在最上层,会把下层的图案覆盖掉GUI_SetPe nSize(3);GUI_SetColor(GUI_RED);GUI_D

31、rawLi ne(7,0,7,239);GUI_DrawLi ne(311,0,311,239);GUI_DrawLi ne(7,238,311,238);GUI_DrawLi ne(7,1,311,1);switch (GUI_WaitKey()case O:if(operaFlag=1)符号后的数,先把编辑框清掉EDIT_SetText(obj,NULL); operaFlag=0;EDIT_GetText(obj,editBuf,10);if(*editBuf!=0)样的情况*/如果是刚操作完运算/保证不会出现001这EDIT_AddKey(obj,0);break;case 1:if(

32、operaFlag=1)EDIT_SetText(obj,NULL); operaFlag=0;EDIT_GetText(obj,editBuf,10);的情况if(*editBuf=O)&(*(editBuf+1)!=.)保证不会出现.123 这样EDIT_SetText(obj,NULL);EDIT_AddKey(obj,1);break;case 2:if(operaFlag=1)EDIT_SetText(obj,NULL); operaFlag=0;EDIT_GetText(obj,editBuf,10);if(*editBuf=0)&(*(editBuf+1)!=.)EDIT_Set

33、Text(obj,NULL);EDIT_AddKey(obj,2);break;case 3:if(operaFlag=1)EDIT_SetText(obj,NULL); operaFlag=0;EDIT_GetText(obj,editBuf,10);if(*editBuf=0)&(*(editBuf+1)!=.)EDIT_SetText(obj,NULL);EDIT_AddKey(obj,3);break;case 4:if(operaFlag=1)EDIT_SetText(obj,NULL); operaFlag=0;EDIT_GetText(obj,editBuf,10);if(*ed

34、itBuf=0)&(*(editBuf+1)!=.)EDIT_SetText(obj,NULL);EDIT_AddKey(obj,4);19case 5:case 6:case 7:case 8:break;if(operaFlag=1)EDIT_SetText(obj,NULL); operaFlag=0;EDIT_GetText(obj,editBuf,10); if(*editBuf=0)&(*(editBuf+1)!=.) EDIT_SetText(obj,NULL);EDIT_AddKey(obj,5); break;if(operaFlag=1)EDIT_SetText(obj,N

35、ULL); operaFlag=0;EDIT_GetText(obj,editBuf,10); if(*editBuf=0)&(*(editBuf+1)!=.) EDIT_SetText(obj,NULL);EDIT_AddKey(obj,6); break;if(operaFlag=1)EDIT_SetText(obj,NULL); operaFlag=0;EDIT_GetText(obj,editBuf,10); if(*editBuf=0)&(*(editBuf+1)!=.) EDIT_SetText(obj,NULL);EDIT_AddKey(obj,7); break;if(oper

36、aFlag=1)EDIT_SetText(obj,NULL); operaFlag=0;EDIT_GetText(obj,editBuf,10);if(*editBuf=O)&(*(editBuf+1)!=.) EDIT_SetText(obj,NULL);EDIT_AddKey(obj,8); break;case 9:if(operaFlag=1) EDIT_SetText(obj,NULL); operaFlag=0;EDIT_GetText(obj,editBuf,10); if(*editBuf=0)&(*(editBuf+1)!=.) EDIT_SetText(obj,NULL);

37、EDIT_AddKey(obj,9); break;case .:if(operaFlag=1)EDIT_SetText(obj,NULL); operaFlag=0;EDIT_GetText(obj,editBuf,10);/保证不会出现.123if(*editBuf!=NULL)情况浮点数,保存在var中EDIT_SetText(obj,+); operaFlag=1; if(varC nt=2)编辑框显示运算符/varCnt=2,表示 var已经被填满,可以做运算操作了EDIT_AddKey(obj,.);break;case i: / 倒数operaFlag=1;varvarC nt=

38、StoF();varvarC nt=1/varvarC nt;result=varvarC nt;FtoS();EDIT_SetText(obj,editBuf); break;case s: /平方operaFlag=1;varvarC nt=StoF();varvarC nt=varvarC nt*varvarC nt; result=varvarC nt;FtoS();EDIT_SetText(obj,editBuf); break;case +: 加法typeFlag=+;varvarC nt+=StoF();把输入到编辑框内的内容,转化成result=var0+var1;I JEHy

39、iAMG6* n?CE.rtCWM.GCVFtoS();EDIT_SetText(obj,editBuf);if(nu mDir=O)/判断结果正负最前面加-号EDIT_SetCursorAtChar(obj,0); 如果是符号 EDIT_AddKey(obj,-);/在编辑框数值varC nt=O;break;case -: / 减法typeFlag=_:operaFlag=1;varvarC nt+=StoF();EDIT_SetText(obj,-);if(varC nt=2)result=var0-var1;FtoS();EDIT_SetText(edit,editBuf);if(nu

40、 mDir=0)EDIT_SetCursorAtChar(obj,0);EDIT_AddKey(obj,-);varC nt=O;break;case *: / 乘法typeFlag=*;operaFlag=1;varvarC nt+=StoF();EDIT_SetText(obj,*);if(varC nt=2)result=var0*var1;FtoS();EDIT_SetText(edit,editBuf);if(nu mDir=0)EDIT_SetCursorAtChar(obj,0); EDIT_AddKey(obj,-);varC nt=O;break;case /: / 除法ty

41、peFlag=/;operaFlag=1;varvarC nt+=StoF();EDIT_SetText(obj,/);幽x州卑星配I JEHtllAMi. wmaw鼻 3CMWE K T tGHMSIGCYif(varC nt=2) result=var0/var1; FtoS();EDIT_SetText(edit,editBuf); if(nu mDir=0)EDIT_SetCursorAtChar(obj,0); EDIT_AddKey(obj,-); varC nt=O; break;case =: / 等于operaFlag=1;varvarC nt+=StoF();switch(

42、typeFlag)case +:case -:result=var0+var1; break;result=var0-var1; break;case /:result=var0*var1; break;result=var0/var1;break; default:break;typeFlag=0;FtoS();EDIT_SetText(edit,editBuf);if(nu mDir=0)EDIT_SetCursorAtChar(obj,0); EDIT_AddKey(obj,-);varCn t=0;break;case c: /清除operaFlag=1;EDIT_SetText(ob

43、j,NULL);break;case a: /关于ExecDialog();/执行对话框default:break;d) 、函数从编辑框读取字符串或把字符串写入到编辑框的,浮点数到字符串,和字符 串到浮点数的相关代码:/*字符串转浮点数*/float StoF(void)float tran f=0.0,a=0.0;int i,p=0;for(i=0;i10;i+) editBufi=O;i=0; EDIT_GetText(edit,editBuf,11);tran f=editBufi-O: if(strstr(editBuf,.)!=NULL) while(editBuf+i!=. )&i

44、10)tran f*=10;tran f=tra nf+(editBufi-O);elsewhile(editBuf+i!=O)&i 10)tran f*=10;tran f=tra nf+(editBufi-O); for(i=0;i0) for(i=9;ip;i-)if(editBufi!=0)a+=(editBufi-0);a/=10;tran f=tra nf+a;return tranf;/*浮点数转字符串*/int FtoS(void)int s1=0,sum=0,p=0,i=1;float s2;for(i=0;i10;i+)editBufi=O;i=1;if(result10)EDIT_SetText(edit,Overflow);return 0;s1=(i nt)result;if(s

温馨提示

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

评论

0/150

提交评论