搜档网
当前位置:搜档网 › 课程设计—模拟计算器设计..

课程设计—模拟计算器设计..

课程设计—模拟计算器设计..
课程设计—模拟计算器设计..

课题:基于uCOS/uCGUI的模拟计算器实现报告:张昌世自动化091 109031027

小组成员:刘锋自动化091 109031023

陈奇英自动化091 109031001

彭桂贤自动化091 109031002

指导老师:陈才

摘要:

计算器这一小小的程序机器实际上是从计算机中割裂出来的衍生品,但因其方便快捷的操作模式,已经被广泛应用于工程、学习、商业等日常生活中,极大的方便了人们对于数字的整合运算。现今的计算器已经不仅仅停留在传统的硬件上,而是越来越软件化,它可以在手机里,在电脑上,在许许多的的电子产品上。所以有必要在自己平时学习的开发板上做个带界面显示的计算器来证明下自己的能力。

引言:

简单的计算器包括0~9的数字输入键,小数点输入键,+、-*、/、=运算键等,还可以加入其他运算:如三角运算(sin,cos,tan,cot等),一些当木运算(平方,开方,阶乘等)。由于条件和能力有限,所以就做个能实现四则运算的简易计算器。

计算器的程序设计实际上富有一定的难度,虽然乍一想很简单,只要实现下加减乘除运算,然后显示出来就可以了,但实际上运算结果跟图像界面的数据交换,还有浮点数的处理等都很折腾人。通过本次设计,体会到了学习的不易,还有自己能力上的不足!

一、课题描述:

在STM32开发板上实现简易的计算器。计算器界面显示在TFT彩屏上,采用触摸屏上模拟按钮来实现数据及运算符的输入。最后把运算的结果显示在彩屏。最基本要求:有加减乘除运算,有带小数点的运算。

二、课题分析

a)、硬件要求:

处理器选择:STM32F103ZE,这款处理器具有512K的flash,64K的RAM,足够大的空间,可以让程序员的可以有更大的发挥空间,而不用为节省空间而上脑筋。

TFT彩屏:带触摸的TFT彩屏,3.2寸,分辨为240*320的真彩彩屏。

JLink仿真器:使用JLink v8仿真器,仿真器能够下载程序、在线仿真,便于程序编写与错误检查。

b)、软件要求:

操作系统:使用uC/OS嵌入式实时操作系统。由于触屏要实时响应,所以需要使用操作系统,并给触屏专门建立一个任务。CPU其他的操作组成一个任务。程序在两个任务中相互切换。

图形软件:使用uCGUI嵌入式图形界面软件。uCGUI是个小型的图形软件,包括有基本的图形显示,还有许多图形控件,如:按钮,编辑框,窗口,滚动条等等,而我们的计算器的制作就要用到其中的按钮、编辑框和窗口3个控件。

固件库:STM32编程,可以使用固件库,ST公司提供STM32处理器的固件库,以方便程序员编程,缩短了项目的编程周期。

c)、设计方案:

界面布局:

1个编辑框:位于彩屏左上角,占整屏的1/5左右,用于数据输入显示,运算

符的输入显示。编辑框内最大输入和显示的长度为10,这就限制了数据的范

围。

11个数子按钮:位于左下角开始向上向右的按钮队列,分别为:’1’,’2’,

‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,‘0’,‘.’。可以输

入操作者任意想要的数据,进行运算。

6个运算符按钮:位于屏幕偏右的数来第一列和第二列的位子上。实现加减乘

除倒数平方6个运算,对应的按钮分别为:‘+’,‘-’,‘*’,‘/’,

‘1/X’,’X^2’。

2个操作按钮:位于屏幕右侧数来第一列的位子上。功能分别为等号和清楚。

对应着‘=’和‘clear’两个按钮。等号得到计算得到的结果,清除键清楚编

辑框上的数字和取消当前运算操作的功能

1个说明按钮:位于屏幕的右上角。对应’About’按钮,点击该按钮,就会跳出

一个对话框,上面显示本课程设计的小组成员们名字。

1个对话框:当点击‘About’按钮时,就会跳出来,对话框上显示四个课程设

计小组成员的姓名,还有一个“OK“按钮,点击“OK”按钮就会结束当前的

对话框,关闭对话框。

功能说明:

1、数字键被按下去时,在编辑框内显示输入的数,这里需要注意的是,编辑

框内的内容时字符串的形式,例如按下12时,并不是表示数字12,而是字符

串“12”,先是按下‘1’键,再按下‘2’键,按下第二个键的时候不能将编

辑框的第一个数覆盖掉,而是要接到第一个数后面。

2、当运算符按钮被按下时,把按下去之前的编辑框的字符串转化成负浮点数

形式保存在var[]中,然后将编辑框显示’+’,如果运算符被按下了两次,表示之

前已经有两个变量要进行了计算,直接显示结算结果。

3、当按下"1/X",和"X^2"时,并不增加变量的个数,只是将原先变量运算后

的结果覆盖原先变量,参加后续的计算。

4、按下"About"键是,会跳出一个对话框,该对话框支持移动,故可以将其拖

到屏幕任意位子,点下对话框上的"OK"键,就会关闭对话框。之后再点下

"About"键后对话框优惠弹出来。

三、相关介绍说明

a)、STM32F103ZT6E介绍:

ARM 32位Cortex-M3 微处理器,72MHz频率, 512kB Flash, 64kB SRAM,灵活的静态存储器控制器存储器:SRAM, PSRAM, NOR 和NAND Flash,PLL, 内置的RC正当频率为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介绍:

μC/OS-II是一种可移植的,可植入ROM的,可裁剪的,抢占式的,实时多任务操作系统内核。它被广泛应用于微处理器、微控制器和数字信号处理器。

μC/OS-II的前身是μC/OS,最早出自于1992 年美国嵌入式系统专家Jean https://www.sodocs.net/doc/252810336.html,brosse 在《嵌入式系统编程》杂志的5 月和6 月刊上刊登的文章连载,并把

μC/OS的源码发布在该杂志的B B S 上。

μC/OS 和μC/OS-II 是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU上。用户只要有标准的ANSI 的C交叉编译器,有汇编器、连接器等软件工具,就可以将μC/OS-II嵌入到开发的产品中。

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

uC/OS-II目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。

uC/OS-II以源代码的形式发布,但并不意味着它是开源软件。你可以将其用于教学和私下研究(peaceful research);但是如果你将其用于商业用途,那么你必须通过Micrium获得商用许可。

c)、uCGUI简介

UCGUI是一种嵌入式应用中的图形支持系统。它设计用于为任何使用LCD图形显示的应用提供高效的独立于处理器及LCD控制器的图形用户接口,它适用单任务或是多任务系统环境, 并适用于任意LCD控制器和CPU下任何尺寸的真实显示或虚拟显示。它的设计架构是模块化的,由不同的模块中的不同层组成,由一个LCD 驱动层来包含所有对LCD的具体图形操作。

UCGUI可以在任何的CPU上运行,因为它是100%的标准C代码编写的。UCGUI能够适应大多数的使用黑白或彩色LCD的应用,它提供非常好的允许处理灰度的颜色管理。还提供一个可扩展的2D图形库及占用极少RAM的窗口管理体系。

UCGUI的设计目标是为使用LCD作为图形显示装置的应用提供高效的/与LCD控制器独立及处理器独立的图形用户接口。它适合于单任务环境及多任务环境,如私用的操作系统或是商业的RTOS(实时操做系统。UCGUI以C源码形式提供,并

适用于任意LCD控制器和CPU下任何尺寸的真实显示或虚拟显示。它包含以下特

性:

[1] 适用任何8/16/32位CPU, 只要有相对应的标准C编译器.

[2] 任何的控制器的LCD显示器(单色,灰度,颜色), 只要有适合的LCD驱动可

用.

[3] 在小模式显示时无须LCD控制器.

[4] 所有接口支持使用宏进行配制.

[5] 显示尺寸可定制.

[6] 字符和位图可在LCD显示器上的任意起点显示,并不仅局限于偶数对齐

的地址起点.

[7] 程序在大小和速度上都进行了优化.

[8] 编译时允许进行不同的优化.、、

[9] 对于缓慢一些的LCD控制器, LCD显存可以映射到内存当中, 从而减

少访问次数到最小并达到更高的显示速度.

[10]清晰的设计架构.

[11]支持虚拟显示, 虚拟显示可以比实际尺寸大(即放大).

四、代码分析

a)、uCOS部分代码

建立两个任务

/*OS两个任务堆栈区*/

OS_STK MainTask1Stk[MAXSTKSIZE];

OS_STK Task1Stk[MAXSTKSIZE];

/*两个任务函数*/

void MainTask1(void *pdata);

void Task1(void *pdata);

/*主函数,建立两个任务*/

int main()

{

OSInit(); //OS初始化

OSTaskCreate(MainTask1,(void *)0,&MainTask1Stk[MAXSTKSIZE-1],1); //建立任务

OSTaskCreate(Task1,(void *)0,&Task1Stk[MAXSTKSIZE-1],2);

OSStart();

}

/*任务一:初始化板子,初始化液晶,建立计算器图像界面*/

void MainTask1(void *pdata)

{

pdata=pdata;

BSP_Init(); //硬件初始化

GUI_Init(); //GUI初始化

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); //响应控件

}

}

/*任务二:专门为触屏和控件的更新而建立的任务*/

void Task1(void *pdata)

{

pdata=pdata;

for(;;)

{

WM_Exec(); //更新窗口

GUI_TOUCH_Exec(); //更新触屏

OSTimeDly(10);

}

}

b)、计算器图形界面的相关代码

/*GUI相关变量*/

EDIT_Handle edit;

BUTTON_Handle num0,num1,num2,num3,num4,num5,num6,num7,num8,num9;//数字

0~9,

BUTTON_Handle numPoint,numPlus,numSub,numMul,numDiv;//小数点,加号,减号,除号,乘号

BUTTON_Handle clear,inverse,square,equal,about; //清除,倒数,平方,等于

/*图形界面函数*/

void WidgetCreate(void)

{

/*画计算器边框*/

GUI_SetPenSize(3); //设置之前宽度为3个像素

GUI_SetColor(GUI_RED); //设置边框颜色为红色

GUI_DrawLine(7,0,7,239); //画边框

GUI_DrawLine(311,0,311,239);

GUI_DrawLine(7,238,311,238);

GUI_DrawLine(7,1,311,1);

edit=EDIT_Create(15,5,225,50,'e',10,WM_CF_SHOW);//创建编辑框

EDIT_SetFont(edit,&GUI_Font32B_ASCII); //设置编辑框内容字体大小num7=BUTTON_Create(15,60,50,35,'7',WM_CF_SHOW);//创建数字7的按钮BUTTON_SetFont(num7,&GUI_Font24_ASCII); //设置字体24号BUTTON_SetText(num7,"7"); //按钮上显示7 BUTTON_SetTextColor(num7,0,GUI_WHITE); //设置字体颜色BUTTON_SetBkColor(num7,0,GUI_DARKBLUE); //设置按钮背景颜色

num4=BUTTON_Create(15,105,50,35,'4',WM_CF_SHOW);//创建数字4的按钮BUTTON_SetFont(num4,&GUI_Font24_ASCII);

BUTTON_SetText(num4,"4");

BUTTON_SetTextColor(num4,0,GUI_WHITE);

BUTTON_SetBkColor(num4,0,GUI_DARKBLUE);

num1=BUTTON_Create(15,150,50,35,'1',WM_CF_SHOW); //创建数字1的按钮BUTTON_SetFont(num1,&GUI_Font24_ASCII);

BUTTON_SetText(num1,"1");

BUTTON_SetTextColor(num1,0,GUI_WHITE);

BUTTON_SetBkColor(num1,0,GUI_DARKBLUE);

num0=BUTTON_Create(15,195,110,35,'0',WM_CF_SHOW);//创建数字0的按钮BUTTON_SetFont(num0,&GUI_Font24_ASCII);

BUTTON_SetText(num0,"0");

BUTTON_SetTextColor(num0,0,GUI_WHITE);

BUTTON_SetBkColor(num0,0,GUI_DARKBLUE);

num8=BUTTON_Create(74,60,50,35,'8',WM_CF_SHOW); //创建数字8的按钮BUTTON_SetFont(num8,&GUI_Font24_ASCII);

BUTTON_SetText(num8,"8");

BUTTON_SetTextColor(num8,0,GUI_WHITE);

BUTTON_SetBkColor(num8,0,GUI_DARKBLUE);

num5=BUTTON_Create(74,105,50,35,'5',WM_CF_SHOW); //创建数字5的按钮BUTTON_SetFont(num5,&GUI_Font24_ASCII);

BUTTON_SetText(num5,"5");

BUTTON_SetTextColor(num5,0,GUI_WHITE);

BUTTON_SetBkColor(num5,0,GUI_DARKBLUE);

num2=BUTTON_Create(74,150,50,35,'2',WM_CF_SHOW); //创建数字2的按钮BUTTON_SetFont(num2,&GUI_Font24_ASCII);

BUTTON_SetText(num2,"2");

BUTTON_SetTextColor(num2,0,GUI_WHITE);

BUTTON_SetBkColor(num2,0,GUI_DARKBLUE);

num9=BUTTON_Create(133,60,50,35,'9',WM_CF_SHOW); //创建数字9的按钮

BUTTON_SetFont(num9,&GUI_Font24_ASCII);

BUTTON_SetText(num9,"9");

BUTTON_SetTextColor(num9,0,GUI_WHITE);

BUTTON_SetBkColor(num9,0,GUI_DARKBLUE);

num6=BUTTON_Create(133,105,50,35,'6',WM_CF_SHOW);//创建数字6的按钮

BUTTON_SetFont(num6,&GUI_Font24_ASCII);

BUTTON_SetText(num6,"6");

BUTTON_SetTextColor(num6,0,GUI_WHITE);

BUTTON_SetBkColor(num6,0,GUI_DARKBLUE);

num3=BUTTON_Create(133,150,50,35,'3',WM_CF_SHOW); //创建数字3的按钮

BUTTON_SetFont(num3,&GUI_Font24_ASCII);

BUTTON_SetText(num3,"3");

BUTTON_SetTextColor(num3,0,GUI_WHITE);

BUTTON_SetBkColor(num3,0,GUI_DARKBLUE);

numPoint=BUTTON_Create(133,195,50,35,'.',WM_CF_SHOW);//创建小数点.的按钮

BUTTON_SetFont(numPoint,&GUI_Font24_ASCII);

BUTTON_SetText(numPoint,".");

BUTTON_SetTextColor(numPoint,0,GUI_WHITE);

BUTTON_SetBkColor(numPoint,0,GUI_DARKBLUE);

numDiv=BUTTON_Create(192,60,50,35,'/',WM_CF_SHOW);//创建除号/的按钮

BUTTON_SetFont(numDiv,&GUI_Font24_ASCII);

BUTTON_SetText(numDiv,"/");

numMul=BUTTON_Create(192,105,50,35,'*',WM_CF_SHOW);//创建乘号*的按钮

BUTTON_SetFont(numMul,&GUI_Font24_ASCII);

BUTTON_SetText(numMul,"*");

numSub=BUTTON_Create(192,150,50,35,'-',WM_CF_SHOW);//创建减号-的按钮

BUTTON_SetFont(numSub,&GUI_Font24_ASCII);

BUTTON_SetText(numSub,"-");

numPlus=BUTTON_Create(192,195,50,35,'+',WM_CF_SHOW); //创建加好+的按钮

BUTTON_SetFont(numPlus,&GUI_Font24_ASCII);

BUTTON_SetText(numPlus,"+");

clear=BUTTON_Create(251,60,50,35,'c',WM_CF_SHOW); //创建清除键clear的按钮

BUTTON_SetFont(clear,&GUI_Font24_ASCII);

BUTTON_SetText(clear,"clear");

BUTTON_SetBkColor(clear,0,GUI_YELLOW);

inverse=BUTTON_Create(251,105,50,35,'i',WM_CF_SHOW); //创建倒数1/X的按钮

BUTTON_SetFont(inverse,&GUI_Font24_ASCII);

BUTTON_SetText(inverse,"1/X");

square=BUTTON_Create(251,150,50,35,'s',WM_CF_SHOW);//创建平方X^2的按钮

BUTTON_SetFont(square,&GUI_Font24_ASCII);

BUTTON_SetText(square,"X^2");

equal=BUTTON_Create(251,195,50,35,'=',WM_CF_SHOW);//创建等号=的按钮

BUTTON_SetFont(equal,&GUI_Font24_ASCII);

BUTTON_SetText(equal,"=");

BUTTON_SetBkColor(equal,0,GUI_YELLOW);

about=BUTTON_Create(249,20,57,30,'a',WM_CF_SHOW); //创建说明信息about 的按钮

BUTTON_SetFont(about,&GUI_Font24_ASCII);

BUTTON_SetText(about,"About");

BUTTON_SetBkColor(about,0,GUI_LIGHTGRAY);

}

c)、按键响应代码

/*按钮响应函数*/

void KeyCallback(EDIT_Handle obj)

{

/*重画边框,因为控件在最上层,会把下层的图案覆盖掉*/

GUI_SetPenSize(3);

GUI_SetColor(GUI_RED);

GUI_DrawLine(7,0,7,239);

GUI_DrawLine(311,0,311,239);

GUI_DrawLine(7,238,311,238);

GUI_DrawLine(7,1,311,1);

switch (GUI_WaitKey())

{

case '0':

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(operaFlag==1)

{

EDIT_SetText(obj,NULL);

operaFlag=0;

}

EDIT_GetText(obj,editBuf,10);

if((*editBuf=='0')&&(*(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_SetText(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((*editBuf=='0')&&(*(editBuf+1)!='.'))

{

EDIT_SetText(obj,NULL);

}

EDIT_AddKey(obj,'4');

break;

case '5':

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;

case '6':

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,'6');

break;

case '7':

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;

case '8':

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,'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);

}

EDIT_AddKey(obj,'9');

break;

case '.':

if(operaFlag==1)

{

EDIT_SetText(obj,NULL);

operaFlag=0;

}

EDIT_GetText(obj,editBuf,10);

if(*editBuf!=NULL) //保证不会出现.123情况

{

EDIT_AddKey(obj,'.');

}

break;

case 'i': //倒数

operaFlag=1;

var[varCnt]=StoF();

var[varCnt]=1/var[varCnt];

result=var[varCnt];

FtoS();

EDIT_SetText(obj,editBuf);

break;

case 's': //平方

operaFlag=1;

var[varCnt]=StoF();

var[varCnt]=var[varCnt]*var[varCnt];

result=var[varCnt];

FtoS();

EDIT_SetText(obj,editBuf);

break;

case '+': //加法

typeFlag='+';

var[varCnt++]=StoF(); //把输入到编辑框内的内容,转化成浮点数,保存在var[]中

EDIT_SetText(obj,"+"); //编辑框显示运算符

operaFlag=1;

if(varCnt==2) //varCnt=2,表示var[]已经被填满,可以做运算操作了

{

result=var[0]+var[1];

FtoS();

EDIT_SetText(obj,editBuf);

if(numDir==0) //判断结果正负

{

EDIT_SetCursorAtChar(obj,0);//如果是符号

EDIT_AddKey(obj,'-'); //在编辑框数值最前面加'-'号

}

varCnt=0;

}

break;

case '-': //减法

typeFlag='-';

operaFlag=1;

var[varCnt++]=StoF();

EDIT_SetText(obj,"-");

if(varCnt==2)

{

result=var[0]-var[1];

FtoS();

EDIT_SetText(edit,editBuf);

if(numDir==0)

{

EDIT_SetCursorAtChar(obj,0);

EDIT_AddKey(obj,'-');

}

varCnt=0;

}

break;

case '*': //乘法

typeFlag='*';

operaFlag=1;

var[varCnt++]=StoF();

EDIT_SetText(obj,"*");

if(varCnt==2)

{

result=var[0]*var[1];

FtoS();

EDIT_SetText(edit,editBuf);

if(numDir==0)

{

EDIT_SetCursorAtChar(obj,0);

EDIT_AddKey(obj,'-');

}

varCnt=0;

}

break;

case '/': //除法

typeFlag='/';

operaFlag=1;

var[varCnt++]=StoF();

EDIT_SetText(obj,"/");

if(varCnt==2)

{

result=var[0]/var[1];

FtoS();

EDIT_SetText(edit,editBuf);

if(numDir==0)

{

EDIT_SetCursorAtChar(obj,0);

EDIT_AddKey(obj,'-');

}

varCnt=0;

}

break;

case '=': //等于

operaFlag=1;

var[varCnt++]=StoF();

switch(typeFlag)

{

case '+':

result=var[0]+var[1];

break;

case '-':

result=var[0]-var[1];

break;

case '*':

result=var[0]*var[1];

break;

case '/':

result=var[0]/var[1];

break;

default:break;

}

typeFlag=0;

FtoS();

EDIT_SetText(edit,editBuf);

if(numDir==0)

{

EDIT_SetCursorAtChar(obj,0);

EDIT_AddKey(obj,'-');

}

varCnt=0;

break;

case 'c': //清除

operaFlag=1;

EDIT_SetText(obj,NULL);

break;

case 'a': //关于

ExecDialog();//执行对话框

default:break;

}

}

d)、函数从编辑框读取字符串或把字符串写入到编辑框的,浮点数到字符串,和字符串到浮点数的相关代码:

/*字符串转浮点数*/

float StoF(void)

{

float tranf=0.0,a=0.0;

int i,p=0;

for(i=0;i<10;i++)

{

editBuf[i]=0;

}

i=0;

EDIT_GetText(edit,editBuf,11);

tranf=editBuf[i]-'0';

if(strstr(editBuf,".")!=NULL)

{

while((editBuf[++i]!='.')&&i<10)

{

tranf*=10;

tranf=tranf+(editBuf[i]-'0');

}

}

else

{

while((editBuf[++i]!='\0')&&i<10)

{

tranf*=10;

tranf=tranf+(editBuf[i]-'0');

}

}

for(i=0;i<10;i++)

{

if(editBuf[i]=='.')

{

p=i;

break;

}

}

if(p>0)

{

for(i=9;i>p;i--)

{

if(editBuf[i]!=0)

a+=(editBuf[i]-'0');

a/=10;

}

}

tranf=tranf+a;

return tranf;

}

/*浮点数转字符串*/

int FtoS(void)

{

int s1=0,sum=0,p=0,i=1;

float s2;

for(i=0;i<10;i++)

{

editBuf[i]=0;

}

i=1;

if(result<0)

{

result=-result;

numDir=0;

}

else

{

numDir=1;

}

s1=(int)result;

s2=(float)((int)(result*10000-s1*10000))/10000;

while(s1)

{

s1/=10;

sum++;

}

if(s1>10)

{

EDIT_SetText(edit,"Overflow");

return 0;

}

s1=(int)result;

if(s2!=0) //说明有小数

{

if(sum==0)

{

editBuf[sum]='0';

sum+=1;

}

editBuf[sum]='.';

while(s2!=0) //小数部分

{

if(sum+i<10)

{

s2*=10;

p=(int)s2; //取整

editBuf[sum+i]=p+'0';

s2=(s2*10000-p*10000)/10000; //取小数部分

i++;

}

else

{

break;

}

}

}

else //没有小数

{

editBuf[sum+1]=0;

editBuf[sum+2]=0;

editBuf[sum+3]=0;

}

while(sum--!=0) //整数部分

{

editBuf[sum]=s1%10+'0';

s1=s1/10;

}

return 1;

}

e)、关于dialog对话框的显示代码

/*建立一个对话框dialog,存放组员信息*/

static const GUI_WIDGET_CREATE_INFO DialogList[]=

{

{FRAMEWIN_CreateIndirect,"Group

Member:",'f',60,60,190,120,FRAMEWIN_CF_MOVEABLE,0},

{BUTTON_CreateIndirect,"OK",GUI_ID_OK, 68,60,60,20,0,0},

{TEXT_CreateIndirect,"张昌世", '1',40,10,75,25,TEXT_CF_LEFT,0},

{TEXT_CreateIndirect,"刘锋", '2',100,10,75,25,TEXT_CF_LEFT,0},

{TEXT_CreateIndirect,"陈奇英", '3',40,40,75,25,TEXT_CF_LEFT,0},

{TEXT_CreateIndirect,"彭桂贤", '4',100,40,75,25,TEXT_CF_LEFT,0}, };

/*执行对话框*/

void ExecDialog(void)

{

WM_SetDesktopColor(GUI_BLACK);//设置背景颜色

GUI_ExecDialogBox(DialogList,GUI_COUNTOF(DialogList),&Callback,0,0,0);/* GUI_COUNTOF(DialogList):计算DialogList大小,后面3个0表示:第一个0表示没有父窗口,故后面为(0,0)*/

}

/*对话框的响应函数*/

void Callback(WM_MESSAGE *pMsg)

{

int NCode,Id;

WM_HWIN text1,text2,text3,text4;

WM_HWIN hWin=pMsg->hWin;

if(pMsg->MsgId==WM_INIT_DIALOG)

{

text1=WM_GetDialogItem(hWin,'1'); //获得对话框内控件的句柄

text2=WM_GetDialogItem(hWin,'2');

text3=WM_GetDialogItem(hWin,'3');

text4=WM_GetDialogItem(hWin,'4');

TEXT_SetFont(text1,&GUI_FontHZ_SimSun_14);//设置TEXT字体

TEXT_SetFont(text2,&GUI_FontHZ_SimSun_14);

TEXT_SetFont(text3,&GUI_FontHZ_SimSun_14);

TEXT_SetFont(text4,&GUI_FontHZ_SimSun_14);

}

if(pMsg->MsgId==WM_NOTIFY_PARENT)

{

Id=WM_GetId(pMsg->hWinSrc);

NCode=pMsg->Data.v;

if(NCode==WM_NOTIFICATION_RELEASED)

{

if(Id==GUI_ID_OK) //响应按钮

{

GUI_EndDialog(hWin,0); //结束对话框

}

}

FRAMEWIN_SetFont(hWin, &GUI_Font24B_ASCII);//设置窗体的题目大小

}

}

五、程序不足与分析

程序一路写下来,遇到许许多多的瓶颈,让我曾一度放弃编写计算器

第一个问题:从编辑框获取文本存储失败。这个问题产生的原因,是在我从编辑框内读取数据之前,有个if()语句,如满足条件,清除编辑框的内容,从而当我再次读取编辑框的内容就为空了,当然什么数据也存储不了了。

第二个问题:字符串转化成浮点数和浮点数转化成字符串的问题。这两个功能都有相对的库函数中的相干函数可以实现,但是奇怪的是,我调用这些函数,单独直接用的时候都OK的,但是如果多几个传递参数,就完全失效了。找了N久的转化函数,统统没有用,到最后,只能自己写算法来实现,花了很多时间来写、验证、完善。

第三个问题:碰到浮点数减整数,得到的小数点与原先的小数点不相等。当然如:4.2-4=0.2,但是我们定义float a=4,2,则小数为a-(int)a,得到的小数部位0.2,而是为0.1999998之列的,这里就涉及到个类型之间的转化存在丢失部分数据的问题。这是我超级郁闷的地方。想了很多种办法多没有解决。最后只能选择效果最好的一种:就是小数点=(a*100000-(int)a*100000)/100000,这种方法虽然没有本质上解决问题,但是效果好多了。

六、参考文献

[1]罗朝盛,C语言程序设计[M]科学出版社2004

[2]任哲,嵌入式实时操作系统uC/OS-II原理与应用(第二版)[M]北京航空航天大学出版社2009

[3]刘波文孙岩,嵌入式实时操作系统uC/OS-II经典实例——基于STM32处理器,[M]北京航空航天大学出版社2012

[4]Jean https://www.sodocs.net/doc/252810336.html,brosse 邵贝贝译,嵌入式实时操作系统uC/OS-II(第二版),[M]北京航空航天大学出版社2004

[5]Joseph Yiu 宋岩译,ARM Cortex-M3权威指南,[M]北京航空航天大学出版社2009 附:实物图

Picture1:

Picture2:

Picture3:

计算器课程设计报告

课设报告 福建工程学院软件学院 题目:汇编计算器 班级: 1301 姓名 学号: 指导老师: 日期:

目录 1、设计目的 (3) 2、概要设计 (3) 2.1 系统总体分析 (3) 2.2 主模块框图及说明 (3) 3、详细设计 (4) 3.1 主模块及子模块概述 (4) 3.2各模块详运算 (4) 4、程序调试 (7) 4.1 运行界面分析 (7) 算法分析 (7) 4.2 调试过程与分析 (9) 5、心得体会 (11) 5.1 设计体会 (11) 5.2 系统改进 (11) 附录: (11)

1、设计目的 本课程设计是一次程序设计方法及技能的基本训练,通过实际程序的开发及调试,巩固课堂上学到的关于程序设计的基本知识和基本方法,进一步熟悉汇编语言的结构特点和使用,达到能独立阅读、设计编写和调试具有一定规模的汇编程序的水平。 2、概要设计 用8086汇编语言编写一个能实现四则混合运算、带括号功能的整数计算器程序。程序能实现键盘十进制运算表达式的输入和显示(例如输入:“1+2*(3-4)”),按“=”后输出十进制表示的运算结果。 2.1 系统总体分析 在8086的操作环境下,该计算器分成输入,数据存储,运算功能,输出几个大模块,实现了使用者使用该计算器时输入一个算式,能让系统进行计算。此计算器的实现功能是基本的数学的四则运算,结果范围在0~65535。 2.2 主模块框图及说明 此流程图简要的表现出了所要实现的功能以及一些功能的大概算法,同时也是我编写的一个总体的框架。 程序流程图说明:通过流程图,可以看出程序运行时,首先输出提示语气,当用户输入后,程序根据所输入内容进行判断,通过判断的结果来决定调用哪个功能模块,首要先要要判断的是否为0-9,“+”“-”“*”“/”这些字符,若不是就会报错,实则根据运算符号调用其功能模块完成运算。最后将运算的结果显示在主频幕上,返回主程序,使用户可以重新输入。

C++课程设计报告--小型特殊计算器

课程设计报告 课程:面向对象程序设计学号: 姓名: 班级: 教师:

课程设计名称:小型特殊计算器 1.设计内容: 实现一个特殊的计算器,可以实现复数、有理数、矩阵和集合的特殊计算。程序可以实现复数、有理数的加、减、乘、除,可以实现矩阵的加法、减法和乘法运算,也可以实现集合的求交集、并集、子集的运算。 2.设计目的与要求: 2.1设计目的 达到熟练掌握C++语言的基本知识和技能; 基本掌握面向对象程序设计的基本思路和方法; 能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。 2.2设计要求 要求利用面向对象的方法以及C++的编程思想来完成系统的设计; 要求在设计的过程中,建立清晰的类层次; 在系统的设计中,至少要用到面向对象的一种机制。 3.系统分析与设计 3.1主要知识点 运算符重载增加了C++语言的可扩充性。运算符的重载实际上就是一种函数调用的形式,可以用成员函数重载运算符,就是将运算符重载定义为一个类的成员函数的形式;也可以用友元函数重载。用友元重载运算符的友元函数是独立于类以外的一般函数。 3.2关键技术 程序中每一种数据类型用一个类来实现,共设计了4个类。复数类complex,矩阵类matrix,有理数类rational以及集合类set。每一种类都定义了相应的运算符重载函数。具体定义如下所示: (1)类complex 类complex中,成员变量image表示虚部,real表示实部。成员函数print()用来显示数据。运算符重载函数都是用友元函数来实现的。分别重载+、-、*、/运算符。 (2)类matrix 类matrix中,成员变量elems用来存放矩阵的所有元素,rows表示矩阵的行,cols表示矩阵的列。成员函数SetElems()用来给矩阵中的每一个元素赋值,Disp()用来显示矩阵中的所有元素。其它友元函数分别重载+、-、*、/运算符。 (3)类rational 类rational中,有两个成员变量:denominator用来表示有理数的分母,numerator表示有理数的分子。有理数成员函数print()用来显示有理数,optimization()用来优化有理数函数。友元函数real()用来将有理数转换为实数,其它友元函数分别重载+、-、*、/运算符。 (4)类set

JAVA实现计算器课程设计

JAVA实现计算器课程设计 计算机科学系 计应0701班 指导老师:刘其昌 设计人员:陈秀桃 设计日期:2009年11月10日——2009年12月20日 计算器的设计 目录 第一章绪 论 ..................................................................... .. (2)

1.1 开发环 境 ..................................................................... . (2) 1.2 基本功能介 绍 ..................................................................... ......... 2 第二章系统设 计 ..................................................................... (3) 2.1 系统流程 图 ..................................................................... . (3) 2.2 系统功能框 图 ..................................................................... (3) 2.3 需求分 析 ..................................................................... ................ 4 第三章软件设 计 ..................................................................... (5) 3.1 界面设 计 ..................................................................... . (5) 3.2 代码设 计 .....................................................................

简单计算器c++课程设计

简单计算器 1 基本功能描述 简单计算器包括双目运算符和单目运算符。双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦、阶乘、对数、开方、倒数等运算。可对输入任意操作数包含小数和整数及正数和负数进行以上的所有运算并能连续运算。出现错误会给出提示,同时包含清除、退格、退出功能以及有与所有按钮相对应的菜单项。 2 设计思路 如图1,是输入数据子函数的流程图。打开计算器程序,输入数据,判断此次输入之前是否有数字输入,如果有,则在之前输入的数字字符后加上现有的数字字符;如果没有,则直接使编辑框显示所输入的数字字符。判断是否继续键入数字,如果是,则继续进行前面的判断,如果否,则用UpdateData(FALSE)刷新显示。 如图2,是整个计算器的流程图。对于输入的算式,判断运算符是双目运算符还是单目运算符。如果是双目运算符,则把操作数存入数组a[z+2]中,把运算符存入b[z+1]中;如果是单目运算符,则把字符串转化为可计算的数字,再进行计算。下面判断运算符是否合法,如果合法,则将结果存入a[0],不合法,则弹出对话框,提示错误。结束程序。

输入一个数字 在之前输入的数字字符后面加上现在的数字字符。 Eg :m_str+=”9”。 直接使编辑框显示所输入的数字字符。 Eg :m_str=”9”。 pass3=1表示已有数字输入 开始 之前是否有数字输入? pass3==1? 继续键入数字? 用UpdateData(FALSE)刷新显示 图1 输入数据子函数流程图 Y N Y N

输入开始 双目运算符 是否每一个操作数都存入a[]数组? 把操作数存入a[z+2],把运算符存入b[z+1]。 单目运算符 将字符串转换 为可计算的数进行运算 运算是否合法? 将结果存入a[0] 弹出对话框提示错误 结束Y Y N N 图2 简单计算器总流程图

计算机科学与专业技术学院课程设计成绩单

计算机科学与技术学院课程设计成绩单

————————————————————————————————作者:————————————————————————————————日期:

计算机科学与技术学院课程设计成绩单 课程名称:数据库系统原理指导教师: 姓名性别学号班级 综合成绩成绩等级 程序运行情况 (占总成绩20%) □能正确运行□基本能正确运行□能运行但结果不完善 (20分)(15分)(10分) 程序功能的完善 程度 (占总成绩10%)□完善□基本完善□不完善(10分)(8分)(5分) 程序结构的合理 性 (占总成绩10%)□合理□基本合理□不太合理(10分)(8分)(5分) 对问题的答辩情况 (占总成绩40%)□概念正确有创新□能正确回答所有问题□基本能正确回答(40分)(35分)(30分) □部分问题回答概念不清晰 (20分) 学生的工作态度与独立工作能力(占总成绩10%)□工作态度认真能独立完成任务□工作态度认真但独立性较差(10分)(8分) □工作态度基本认真但缺乏独立性 (5分) 设计报告的规范 性 (占总成绩10%)□符合规范□基本符合规范□规范性较差(10分)(8分)(5分) 优秀:90分~100分良好:80分~89分中等:70~79分及格:60~69分不及格0分~59分 武汉科技大学计算机科学与技术学院制表

计算机科学与技术学院 课程设计报告 课程名称:数据库系统原理专业: 班级:级班学号: 姓名: 指导老师:

网上选课系统 一、实验目的 利用一种DBMS作为设计工具,理解并应用课程中关于数据库设计的相关理论,能按照设计流程完成完整的数据库设计,包括需求分析、概念设计、逻辑设计、物理设计和实施。同时能够应用各个阶段的典型工具 二、设备与环境 (1) 硬件设备:PC机一台 (2) 软件环境:安装Windows操作系统,安装数据库管理系统SQL Server2000等。 三、实验内容 完整实践应用数据库设计的工程过程:需求分析\概念设计\逻辑设计\物理设计和实施: (1)需求分析:选定一个应用,对所设计的数据库系统有一定的调研分析,其结果应该以 简单的需求分析说明书\数据字典和数据流图(2级数据流即可)表示; (2)概念分析:使用E-R图作为描述工具.描述出局部和全局的E-R图; (3)逻辑设计:将E-R图转化为相应的关系模式,并根据范式理论进行优化分析,关系模 式不少于3个; (4)物理设计:根据需要设计必要的索引等结构; (5)实施:以某种DBMS为工具创建出完整的数据库.在数据库中要表现出的知识点包括 ①登录控制 (标准登录或混合登录) ②数据完整性(参照完整性、实体完整性、自定义完整性(包括触发器) ③设置用户,并相应设计用户的权限和角色(用户设计至少3个,有不同的权限) ④以游标或存储过程完成相关操作至少2个,以文件方式保存 (6)以上内容,请详细描述,并有必要抓图. 四、实验结果及分析 1.需求分析 随着信息时代科技不断提高,学校规模不断扩大,教学质量不断提高,大学期间有许多公共选修课,以往的选修课方法是课堂报名或者纸上填写方式报名,这种方法虽然直接,但是造成选课的盲目性,而且学生选过课程后不好在更改查看,一方面浪费大量的人力,物力资源,另一方面浪费时间以及在认为统计过程中不可避免的出现差错的情况。这给广大的老师和学生带来诸多的不便,管理起来也相当困难。使用网上选课系统可以提前进行网上选课,并且选课以后学生还可以在查看和更改,随意选择各个老师的课程,老师管理起来也比较方便。鉴于

C语言课程设计计算器图形界面

C语言课程设计计算器图形界面

扬州大学 C语言课程设计报告 题目一个简易计算器的设计与实现 班级 学号 姓名 指导教师 成绩 老师评语: 扬州大学信息工程学院 年 6 月 25 目录

一、程序设计目的: (1) 二、程序设计内容: (1) 三、课程设计所补充的内容:补充的函数或算法…………3,4 四、系统总体设计 (4) 五、系统详细设计………………………………………5,6,7,8 六、运行结果………………………………………………8,9,10 七、系统调试…………………………………………8,9,10,11 八、课程设计体会总结………………………………8,9,10,11 1 课程设计目的 (1).课程设计是一项综合性实践环节,是对平时实验的一个补充,课程设计内容包括课程的主要理论知识,但由于C语言对初学者较难掌握,因而对一个完整的C语言程序不适合平时实验。

经过课程设计能够达到综合设计C语言程序的目的。 (2)经过本课程设计,能够培养独立思考,综合运用所学有关相应知识的能力,能更好地使用C语言的知识,更好地了解C语言的好处和其可用性!掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础! (3)经过本程序训练程序设计的基本技能,掌握字符串的表示方法和字符串函数的功能、自学掌握四则运算的算法及WIN-TC的图形操作的基本知识、键盘上特殊键的获取及图形方式下光标的显示。 2 课程设计内容 目的:本课程的课程设计要求学生模拟实现一个简单计算器,要求(1)能够实现四则运算,并能支持优先级运算。(2)三角与反三角运算:如sinx,cosx等。(3)指数对数运算:如log (x),lnx,e的x次方等。(4)其它运算:如X!,x的累加等。(4)不允许调用库函数,使用自行开发的程序实现常见函数运算。(5)进一步考虑计算器外观设计,用可视化界面给出计算器外观、功能按键及输入界面。 使用说明:执行加法运算,'—'表示执行减法运算,表示执行乘法运算,'/'表示除法运算.‘Q’表示退出计算器‘C’表示清零,’=’表示得出结果'^'表示执行x的y次方,'e'表示执行e的x次方操

单片机计算器的课程设计报告

目录 一、设计任务和性能指标 (1) 1.1设计任务 (2) 1.2性能指标 (2) 二、设计方案 (2) 3 3 4 5 5 6 6 7 7 20 20 20 20 21 参考文献 (21) 附录1、系统硬件电路图 (22) 附录2、硬件实物图 (23) 附录3、器件清单 (24)

一、设计任务和性能指标 1.1设计任务 自制一个单片机最小系统,包括复位电路,采用外部小键盘输入数据,能够实现加法、乘法及一个科学计算,计算结果显示在四位一体的数码管上。 要求用Protel 画出系统的电路原理图(要求以最少组件,实现系统设计所要 显 位 监测模块采用二极管和扬声器(实验室用二极管代替)组成电路。 键盘电路采用4*4矩阵键盘电路。 显示模块采用4枚共阳极数码管和74ls273锁存芯片构成等器件构成。 整个单片机的接口电路: P0用于显示输出; P1用于键扫描输入; P2用于数码管位选控制; P3用于键盘扩展(部分运算符输入);

三.系统硬件设计 3.1单片机最小系统 单片机最小系统就是支持主芯片正常工作的最小电路部分,包括主控芯片、复位电路和晶振电路。 主控芯片选取STC89C52RC芯片,因其具有良好的性能及稳定性,价格便宜应用方便。 扩展键:“log”,“ln”,“x^2”“小数点”,“开方” 共计25个按键,采用4*4矩阵键盘,键盘的行和列之间都有公共端相连,四行和四列的8个公共端分别接P1.0~P1.7,这样扫描P1口就可以完成对矩阵键盘的扫描,通过对16个按键进行编码,从而得到键盘的口地址,对比P1口德扫描结果和各按键的地址,我们就可以得到是哪个键按下,从而完成键盘的功能。 以下为键盘接口电路的硬件电路图

C++ 科学计算器-课程设计报告

DONGFANG COLLEGE,FUJIAN AGRICULTURE AND FORESTRY UNIVERSITY 课程名称:堆栈计算器 系别:计算机 年级专业:11级计算机科学与技术 学号:1150303040 姓名:蔡新云 任课教师:林励成绩: 2013 年 6 月13 日

引言 堆栈计算器 简介: 计算带括号的数学算式,可以判断优先级,错误判断等功能。友好的操作界面,美观的视觉效果。 截图 界面: 计算演示: 结果:

错误判断: 数据结构:应用了栈,做数值缓存,应用了递归处理括号内算式。其他知识:mfc界面设计;c++类的封装(.h与.cpp分离)。 编译环境:使用了vs2012,通过修改vs2010也可以打开。

程序简单流程图: (注:eval 的代码在下面。。。) 功能实现原理与代码: //栈的实现 //初始化 stack::stack(int len) { lengh=len; date=new double[len]; date[0]=0; top=0; } stack::stack() { date=new double[100]; MFC 文本框 按钮事件 = 事件 Cal.eval() 调用函数eval(),返回结果到文本框 当 =事件 发生 从文本框取出表达式到eval ()函数

date[0]=0; top=0; } //判断为空 bool stack::is_empty() { if(top==0) { return true; } return false; } //进栈 void stack::push(double number) { date[top++]=number; } //出栈 double stack::pop() { if(!is_empty()) return date[--top]; } //calculator类(核心代码) 初始化 calculator::calculator() { error="null"; } 是否为数字 bool calculator::is_num(char num) { if(num<='9' && num>='0'||num=='.') { return true; }

课程设计—模拟计算器设计

报告: 张昌世 自动化091 109031027 小组成员:刘锋 自动化091 109031023 陈奇英 自动化091 109031001 彭桂贤 自动化091 109031002 指导老师:陈才 摘要: 课题: 嵌 入式课程设计 基于 uCOS/uCGUI 的模拟计算器实现

计算器这一小小的程序机器实际上是从计算机中割裂出来的衍生品,但因其方便快捷的操作模式,已经被广泛应用于工程、学习、商业等日常生活中,极大的方便了人们对于数字的整合运算。现今的计算器已经不仅仅停留在传统的硬件上,而是越来越软件化,它可以在手机里,在电脑上,在许许多的的电子产品上。所以有必要在自己平时学习的开发板上做个带界面显示的计算器来证明下自己的能力。 引言: 简单的计算器包括0~9的数字输入键,小数点输入键,+、-*、人=运算键等,还可以 加入其他运算:如三角运算(sin, cos,ta n,cot等),一些当木运算(平方,开方,阶乘等)。由于条件和能力有限,所以就做个能实现四则运算的简易计算器。 计算器的程序设计实际上富有一定的难度,虽然乍一想很简单,只要实现下加减乘除运算,然后显示出来就可以了,但实际上运算结果跟图像界面的数据交换,还有浮点数的处理等都很折腾人。通过本次设计,体会到了学习的不易,还有自己能力上的不足! 一、课题描述: 在STM32开发板上实现简易的计算器。计算器界面显示在TFT彩屏上,采用触摸屏 上模拟按钮来实现数据及运算符的输入。最后把运算的结果显示在彩屏。最基本要求:有加减乘除运算,有带小数点的运算。 二、课题分析 a)、硬件要求: 处理器选择:STM32F103ZE,这款处理器具有512K的flash,64K的RAM,足够大的空间,可以让程序员的可以有更大的发挥空间,而不用为节省空间而上脑筋。 TFT彩屏:带触摸的TFT彩屏,3.2寸,分辨为240*320的真彩彩屏。 JLink仿真器:使用JLink v8仿真器,仿真器能够下载程序、在线仿真,便于程序编写与错误检查。 b)、软件要求: 操作系统:使用uC/OS嵌入式实时操作系统。由于触屏要实时响应,所以需要使用操作系统,并给触屏专门建立一个任务。CPU其他的操作组成一个任务。程序在两个任务中相互切换。 图形软件:使用uCGUI嵌入式图形界面软件。uCGUI是个小型的图形软件,包括有基 本的图形显示,还有许多图形控件,如:按钮,编辑框,窗口,滚动条等等,而我们的计算器的制作就要用到其中的按钮、编辑框和窗口3个控件。 固件库:STM32编程,可以使用固件库,ST公司提供STM32处理器的固件库,以方 便程序员编程,缩短了项目的编程周期。 C)、设计方案: 界面布局: 1 个编辑框:位于彩屏左上角,占整屏的1/5 左右,用于数据输入显示,运算符的输

android简单计算器课程设计.

摘要 Android是当今最重要的手机开发平台之一,它是建立在Java基础之上的,能够迅速建立手机软件的解决方案。Android的功能十分强大,成为当今软件行业的一股新兴力量。Android基于Linux平台,由操作系统、中间件、用户界面和应用软件组成,具有以下5个特点:开放性、应用程序无界限、应用程序是在平等条件下创建的,应用程序可以轻松的嵌入网络、应用程序可以并行运行。而简单计算器又是手机上必备的小程序,所以此次创新实践很有意义。并且具有很强的使用性。 关键字:Android Java基础计算器

目录 第1章开发工具与环境 (1) 1.1 Android平台 (1) 1.2 Java开发环境 (1) 1.3 Eclipse (1) 1.4 Android程序基础—Android应用程序的构成 (2) 第2章系统分析与设计 (4) 2.1系统的可行性分析 (4) 2.2 系统的需求分析 (4) 2.3 系统的优势 (4) 2.4 系统的流程图 (5) 第3章系统详细设计 (6) 3.1 动作Activity (6) 3.2 布局文件XML (6) 3.3 Activity的详细设计 (7) 3.2 布局文件XML的详细设计 (21) 3.2 系统的运行结果 (24) 结论 (25) 参考文献 (26)

第1章开发工具与环境 1.1 Android平台 1.谷歌与开放手机联盟合作开发了Android, 这个联盟由包括中国移动、摩托罗拉、高通、宏达和T-Mobile在内的30多家技术和无线应用的领军企业组成。 2.Android是一个真正意义上的开放性移动设备综合平台。通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,来建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统,这样应用之间的通用性和互联性将在最大程度上得到保持。 3.所有的Android应用之间是完全平等的。 4.所有的应用都运行在一个核心的引擎上面,这个核心引擎其实就是一个虚拟机,它提供了一系列用于应用和硬件资源间进行通讯的API。撇开这个核心引擎,Android的所有其他的东西都是“应用”。 5.Android打破了应用之间的界限,比如开发人员可以把Web上的数据与本地的联系人,日历,位置信息结合起来,为用户创造全新的用户体验。 1.2 Java开发环境 Java技术包含了一个编程语言及一个平台。Java编程语言具有很多特性,如面向对象、跨平台、分布式、多线程、解释性等等。Java编程语言起源于Sun公司的一个叫“Green”的项目,目的是开发嵌入式家用电器的分布式系统,使电气更加智能化。1996年1月发布了JDK1.1版本,一门新语言自此走向世界。之后,1998年12月发布了1.2版本,2002年2月发布1.4版本,2004年10月发布1.5版本(5.0),2006年12月发布1.6(6.0)版本,这是目前的最新版本。Java1.2版本是一个重要的版本,基于该版本,Sun将Java技术分为J2SE、J2ME、J2EE,其中J2SE为创建和运行Java程序提供了最基本的环境,J2ME与J2EE 建立在J2SE的基础上,J2ME为嵌入式应用(如运行在手机里的Java程序)提供开发与运行环境,J2EE为分布式的企业应用提供开发与运行环境。 1.3 Eclipse

科学计算器课程设计报告C课程设计修订稿

科学计算器课程设计报告C课程设计 集团标准化工作小组 [Q8QX9QT-X8QQB8Q8-NQ8QJ8-M8QMN]

计算机科学与技术学部 C++课程设计 题目科学计算器 学部计算机科学与技术 班级计科1103 指导教师李军 姓名刘明 学号 2012年6月27日

摘要 计算器的产生和发展是建立在电子计算机基础之上的。硬件方面,自1946年第一台电子计算机诞生以来,计算机技术的发展可谓日新月异,从庞大的只能在实验室里供研究使用的计算机到如今能适应不同环境满足不同需求的各种各样的计算机;运算速度从每秒几千次到每秒几百亿次;处理器从焊有上百万个电子管的大的惊人的电子板到只有指甲大小的集成电路;现在计算机在硬件方面的发展已达到了每三个月更新换代一次的惊人速度。软件方面,也已从机器语言、汇编语言、高级语言发展到现如今的第四代语言——非结构化、面向对象、可视化的语言。 在这个计算器里面,我们实现了简单的四则运算以及更高功能的科学计算,它的外观简洁美观,使人们能快捷简单的操作。能准确的得到计算结果,大大减少了数字计算所需要的时间,为人们的生活带来便利。此系统在Windows 7环境下,使用VC++ 进行编写。 简单计算器包括双目运算和单目运算功能,双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,对数,开方,阶乘,倒数,进制转换等运算。可对其输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算。并且包含清除,退格功能等。我们所做的计算器其功能较Windows 7下的计算器还是很不够多,没有其菜单的实现功能项,没有其小巧的标准计算器。 关键词:计算器;运算;VC++等

课程设计—模拟计算器设计..

嵌 入 式 课 程 设 计 课题:基于uCOS/uCGUI的模拟计算器实现报告:张昌世自动化091 109031027 小组成员:刘锋自动化091 109031023 陈奇英自动化091 109031001 彭桂贤自动化091 109031002 指导老师:陈才

摘要: 计算器这一小小的程序机器实际上是从计算机中割裂出来的衍生品,但因其方便快捷的操作模式,已经被广泛应用于工程、学习、商业等日常生活中,极大的方便了人们对于数字的整合运算。现今的计算器已经不仅仅停留在传统的硬件上,而是越来越软件化,它可以在手机里,在电脑上,在许许多的的电子产品上。所以有必要在自己平时学习的开发板上做个带界面显示的计算器来证明下自己的能力。 引言: 简单的计算器包括0~9的数字输入键,小数点输入键,+、-*、/、=运算键等,还可以加入其他运算:如三角运算(sin,cos,tan,cot等),一些当木运算(平方,开方,阶乘等)。由于条件和能力有限,所以就做个能实现四则运算的简易计算器。 计算器的程序设计实际上富有一定的难度,虽然乍一想很简单,只要实现下加减乘除运算,然后显示出来就可以了,但实际上运算结果跟图像界面的数据交换,还有浮点数的处理等都很折腾人。通过本次设计,体会到了学习的不易,还有自己能力上的不足! 一、课题描述: 在STM32开发板上实现简易的计算器。计算器界面显示在TFT彩屏上,采用触摸屏上模拟按钮来实现数据及运算符的输入。最后把运算的结果显示在彩屏。最基本要求:有加减乘除运算,有带小数点的运算。 二、课题分析 a)、硬件要求: 处理器选择:STM32F103ZE,这款处理器具有512K的flash,64K的RAM,足够大的空间,可以让程序员的可以有更大的发挥空间,而不用为节省空间而上脑筋。 TFT彩屏:带触摸的TFT彩屏,3.2寸,分辨为240*320的真彩彩屏。 JLink仿真器:使用JLink v8仿真器,仿真器能够下载程序、在线仿真,便于程序编写与错误检查。 b)、软件要求: 操作系统:使用uC/OS嵌入式实时操作系统。由于触屏要实时响应,所以需要使用操作系统,并给触屏专门建立一个任务。CPU其他的操作组成一个任务。程序在两个任务中相互切换。 图形软件:使用uCGUI嵌入式图形界面软件。uCGUI是个小型的图形软件,包括有基本的图形显示,还有许多图形控件,如:按钮,编辑框,窗口,滚动条等等,而我们的计算器的制作就要用到其中的按钮、编辑框和窗口3个控件。 固件库:STM32编程,可以使用固件库,ST公司提供STM32处理器的固件库,以方便程序员编程,缩短了项目的编程周期。 c)、设计方案:

简易计算器课程设计

评阅教师评语:课程设计成绩 考勤成绩 实做成绩 报告成绩 总评成绩指导教师签名: 课程设计报告 论文题目基于ARM的简易计算器设计 学院(系):电子信息与自动化学院 班级:测控技术与仪器 学生姓名:同组同学: 学号:学号: 指导教师:杨泽林王先全杨继森鲁进时间:从2013年 6 月10 日到2013年 6 月28 日 1

目录 1、封面—————————————————————P1 2、目录—————————————————————P2 3、前言—————————————————————P3 4、关键字————————————————————P3 5、原理与总体方案————————————————P3 6、硬件设计———————————————————P6 7、调试—————————————————————P10 8、测试与分析——————————————————P11 9、总结—————————————————————P13

10、附件—————————————————————P14 前言 近几年,随着大规模集成电路的发展,各种便携式嵌入式设备,具有十分广阔的市场前景。嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑。在嵌入式系统中,数据和命令通过网络接口或串行口经过ARM程序处理后,或显示在LCD上,或传输到远端PC上。 本文通过周立功的LPC2106芯片完成的简易计算器,正是对嵌入式应用的学习和探索。 一、摘要: 计算器一般是指“电子计算器”,是能进行数学运算的手持机器,拥有集成电路芯片。对于嵌入式系统,以其占用资源少、专用性强,在汽车电子、航空和工控领域得到了广泛地应用。本设计就是先通过C语言进行相应程序的编写然后在ADS中进行运行最后导入PROTUES进行仿真。最后利用ARM中的LPC2106芯片来控制液晶显示器和4X4矩阵式键盘,从而实现简单的加、减、乘、除等四则运算功能。 关键字:中断,扫描,仿真,计算 二、原理与总体方案: 主程序在初始化后调用键盘程序,再判断返回的值。若为数字0—9,则根据按键的次数进行保存和显示处理。若为功能键,则先判断上次的功能键,根据代号执行不同功能,并将按键次数清零。程序中键盘部分使用行列式扫描原理,若无键按下则调用动态显示程序,并继续检测键盘;若有键按下则得其键值,并通过查表转换为数字0—9和功能键与清零键的代号。最后将计算结果拆分成个、十、百位,再返回主程序继续检测键盘并显示;若为清零键,则返回主程序的最开始。 电路设计与原理:通过LPC2106芯片进行相应的设置来控制LCD显示器。 而通过对键盘上的值进行扫描,把相应的键值通过MM74C922芯片进行运算从而

计算器课程设计报告

高级语言程序(JAVA)课程设计报告 系部名称:商学系专业班级:营销*** 学生姓名:墨璇 墨兰学号: ********** ********** 指导教师:王芬教师职称:讲师 2014年06月26日

目录 一、课程设计目的及意义 .................................... 错误!未定义书签。 二、课程设计任务 .......................................... 错误!未定义书签。 2.1程序设计要求....................................... 错误!未定义书签。 三、课程设计时间 .......................................... 错误!未定义书签。 四、课程设计地点 .......................................... 错误!未定义书签。 五、课程设计内容 .......................................... 错误!未定义书签。 5.1开发工具与平台..................................... 错误!未定义书签。 (1).开发工具 ...................................... 错误!未定义书签。 (2).开发平台 ...................................... 错误!未定义书签。 5.2设计思路........................................... 错误!未定义书签。 5.3 程序测试 .......................................... 错误!未定义书签。 5.4实验总结........................................... 错误!未定义书签。 六、课程设计感想 .......................................... 错误!未定义书签。 七、附录(程序代码) ...................................... 错误!未定义书签。

VB科学计算器课程设计

湖南医药学院 VB计算器课程设计题目: VB科学计算器 院(系)别临床医学院 专业临床医学 班级本临一班 学号 2015101010121 姓名夏铭锴 指导教师李跃强 二○一六年四月

目录 一、设计内容及要求 二、设计原始资料 三、设计完成后提交的文件和图表设计 四、进程安排 五、主要参考资料 [摘要] 用VB制作这个程序的简单计算器,它包括一个标准的计算器和一个科学计算器。它可以实现简单的加减乘除四则运算,数字的平方、平方根,正弦、余弦、正切,倒数、指数函数、对数函数,角度、弧度、梯度的转换,以及各进制的相互转换。而且它的功能还有退格,清除当前数据,清除所有数据,复制数据,粘贴数据。 在这个计算器的程序中,我用到了单行选择语句If…Then…Else…, 块语句if…then…end if,If语句的嵌套,多条件选择语句Select Case,而且还用到了按钮、文本框、框架、单选按钮控件,菜单的设计。 在此报告中我重点叙述了计算机的各个功能及用法。特别是进制间的转换和数字与运算符之间的联系。。虽然描述的不太完整,但我会尽力使用系统结构图,划分多个模块,让大家明白我设计的运算器的功能的。 [关键词] Visual Basic;计算器;对象;代码 1

2

3

四、进程安排 (1)创建应用程序的界面。 (2)设置属性。 (3)编写代码。 4

附页: 设计原始资料 Private Sub Command1_Click() '删除数字的最后一位If Label3.Caption <> "" Then Label3.Caption = Left(Label3.Caption, Len(Label3.Caption) - 1) Else c = MsgBox("内容已为空!不可删除一位!", 49, "注意!") End If End Sub Private Sub Command10_Click() '输入数字6 Label3.Caption = Label3.Caption + Command10.Caption End Sub Private Sub Command11_Click() If Label3.Caption <> "" Then '输入符号* Label1.Caption = Label3.Caption Label2.Caption = Command11.Caption Label3.Caption = "" Else c = MsgBox("请输入数据后输入符号!", 49, "注意!") End If End Sub 5

VC 计算器课程设计报告..

V C++计算器课程设计报告 1.作品名称:计算器 2.本次课程设计的目的 在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用。 3.主要功能 实现计算器的功能。用户根据程序提示,输入数字或字符,选择要进行的运算,可以进行正弦、余弦、正切、开方、对数、加、减、乘、除、华氏温度与摄氏度之间的换算以及平方根的运算。 4.代码 #include #include #define MAX 100 #include #include #include #include double number1,number2,answer,number3,num[10000];

int n,k=1; char input,val; class oopcalc { private: double x,y; double fartocel(double number1); double celtofar(double number1); double sqroot(double number1); void calcsqr(); void calccos(); void calctan(); void calcsin(); void calclog(); public: double getX(){return x;} double getY(){return y;} double set(){x=number1;y=number2;} double calcadd(double number1,double number2); double calcsub(double number1,double number2); double calcdiv(double number1,double number2); double calcmult(double number1,double number2); void calcfartocel(); void calcceltofar(); void calcsroot();

最新单片机简易计算器课程设计

单片机简易计算器课 程设计

引言 说起计算器,值得我们骄傲的是,最早的计算工具诞生在中国。中国古代最早采用的一种计算工具叫筹策,又被叫做算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的。约二百七十枚一束,放在布袋里可随身携带。直到今天仍在使用的珠算盘,是中国古代计算工具领域中的另一项发明,明代时的珠算盘已经与现代的珠算盘几乎相同。17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的"纳皮尔算筹",英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加减乘除、乘方、开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。 近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。 本任务是个简易的两位数的四则运算,程序都是根据教材内和网络中的程序参考编写而成,在功能上还并不完善,限制也较多。本任务重在设计构思与团队合作,使得我们用专业知识、专业技能分析和解决问题全面系统的锻炼。 随着半导体集成工艺的不断发展,单片机的集成度将更高、体积将更小、功能将更强。在单片机家族中,80C51系列是其中的佼佼者,加之Intel公司将其MCS –51系列中的80C51内核使用权以专利互换或出售形式转让给全世界许多著名IC制造厂商,如Philips、 NEC、Atmel、AMD、华邦等,这些公司都在保持与80C51单片机兼容的基础上改善了80C51的许多特性。这样,80C51就变成有众多制造厂商支持的、发展出上百品种的大家族,现统称为80C51系列。80C51单片机已成为单片机发展的主流。专家认为,虽然世界上的MCU品种繁多,功能各异,开发装置也互不兼容,但是客观发展表明,80C51可能最终形成事实上的标准MCU芯片。 事实上单片机是世界上数量最多的计算机。现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。而个人电脑中也会有为数不少的单片机在工作。汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台

计算机技术综合课程设计报告

计算机技术综合课程设计 设计题目锅炉液位控制系统学生姓名史婷艳 专业班级自动化1302班学号20134460203 指导老师洪镇南 2017年1 月3日

目录 前言 (2) 1 锅炉汽包水位控制对象与控制指标 (4) 1.1锅炉汽包水位的特征 (4) 1.2汽包水位动态特性 (4) 1.2.1汽包水位在给水流量W作用下的动态特性 (4) 1.2.2汽包水位在蒸汽流量D扰动下的动态特性 (5) 1.2.3燃料量B扰动下汽包水位的动态特性 (6) 2. 汽包水位控制方案 (7) 2.1单冲量控制方式 (7) 2.2 双冲量控制方式 (8) 2.3 三冲量控制方式 (9) 3. 三冲量串级PID控制 (11) 3.1 串级PID控制 (11) 3.2 智能整定PID控制 (12) 4 汽包水位模糊控制器设计及仿真 (12) 4.1 输入输出变量 (12) 4.2 隶属度函数 (15) 4.3基于MATLAB/Simulink 环境建立的系统仿真分析 (16) 4.3.1 基于MATLAB/Simulink 的系统模型 (16)

4.3.2 仿真结果分析 (18) 总结与体会 (18) 参考文献 (20) 前言 锅炉是典型的复杂热工系统,目前,中国各种类型的锅炉有几十万台,由于设备分散、管理不善或技术原因,使大多数锅炉难以处于良好工况,增加了锅炉的燃料消耗,降低了效率。同时,锅炉工作过程中各项指标的调节难以建立数学模型,具有非线性、不稳定性、时滞等特点,所以如何改善对锅炉的控制,保证其正常工作,提高效率一直是人们关注的焦点。而汽包液位是锅炉安全、稳定运行的重要指标,保证液位在给定范围内,对于高蒸汽品质、减少设备损耗和运行损耗、确保整个网络安全运行具有要意义。 现代锅炉的特点之一就是蒸发量显著提高,汽包容积相对变小,水位变化速度很快,稍不注意就容易造成汽包满水或者烧成干锅,这都对汽包液位控制系统提出了更高的要求。汽包液位过高,会影响汽包内汽液分离效果,使汽包出口的饱和蒸汽带水增多,蒸汽带水会使汽轮机产生水冲击,引起轴封破损、叶片断裂等事故。同时会使饱和蒸汽中含盐量增高,降低过热蒸汽品质,增加在过热器管壁和汽轮机叶片上的结垢。水位过低,则可能破坏自然循环锅炉汽水循环系统中某些薄弱环节,以致局部水冷管壁被烧坏,严重时会造成爆炸事故。 目前,对汽包液位位控制大多采用常规PID控制方式,从控制方式来看,它们要么系统结构简单成本低,不能有效的控制锅炉汽包“虚假水位”现象,要么能够在一定程度上控制“虚假现象”,系统却过于复杂,成本投入过大。常用的蒸汽锅炉液位调节系统有三种基本结构:单冲量调节系统结构、双冲量调节系统结构、串级三冲量调节系统结

相关主题