文档库 最新最全的文档下载
当前位置:文档库 › 简单计算器的汇编实现

简单计算器的汇编实现

简单计算器的汇编实现
简单计算器的汇编实现

微机原理实验报告

一、设计名称数字计算器的汇编语言实现

二、设计任务

利用8086微处理器,可编程并行通信接口芯片8255A等相关器件在proteus 中设计仿真一个简单数字计算器,利用8086汇编语言编写完成加、减、乘、除、幂运算、阶乘运算、求余运算等功能,能实现键盘十进制运算表达式的输入和显示,按“=”后输出十进制表示的运算结果。

三、需求分析

(一)根据数据的输入要求对键盘(本实验中用4X5按钮阵来代替键盘)的数据读取及运算符号读取进行定义,根据8255A的相关性质对其进行编程实现,使每一个按钮对应一个十以内的整数或者某一个运算符号。

(二)根据8255A的输出性质,选择输出端口,对其进行编程,8255A为8086微处理器与外部设备之间提供并行输入/输出的通道。不用附加外部电路,并行接口是在多根数据线上,以数据字节/字与I/O设备交换信息。

(三)数据的显示有LED数码管显示,LED数码管有7个字符段和一个小数点段组成,每段对应一个二极管,当二极管点亮时,相应的的字符段点亮,可以进行数据的显示。

四、总体方案

首先利用程序不断扫描所设的按钮键盘是不是有输入,如果没有就一直扫描,如果有就调用子程序进行判断,是数值则进行存储并同时进行显示,是运算符号等就调用相应的子程序进行操作,操作后则继续利用程序不断扫描键盘是不是有输入,从而实现部分十进制数的加、减、乘、除、幂运算、阶乘运算、求最大公约数的运算。运算完成后根据程序将运算的结果储存到锁存器中并显示到

LED显示器上。

五、硬件设计

本次实验需要的元器件有:8086微处理器、可编程并行通信接口芯片8255A、输入输出锁存器74LS373、LED数码显示管、若干按钮组成的4X5矩阵按键、若干电阻、总线等。

1、8086微处理器

当引脚接高电平时,CPU工作于最小模式。此时,引脚信号24~31的含义及其功能如下:

(1)IO/M:存储器、I/O端口选择控制信号。信号指明当前CPU是选择访问存储器还是访问I/O端口。为高电平时访问存储器,表示当前要进行CPU与存储器之间的数据传送。为低电平时,访问I/O端口,表示当前要进行CPU与I/O端口之间的数据传送。

(2)WR:写信号,输出,低电平有效。信号有效时,表明CPU正在执行写总线周期,同时由信号决定是对存储器还是对I/O端口执行写操作。

(3)INTA:可屏蔽中断响应信号,输出,低电平有效。 CPU通过信号对外设提出的可屏蔽中断请求做出响应。为低电平时,表示CPU已经响应外设的中断请求,即将执行中断服务程序。

(4)ALE:地址锁存允许信号,输出,高电平有效。 CPU利用ALE信号可以把AD15 ~AD0地址/数据、A19/S6~A16/S3地址/状态线上的地址信息锁存在地址锁存器中。

(5)DT:数据发送/接收信号,输出,三态。DT/信号用来控制数据传送的方向。DT/为高电平时,CPU发送数据到存储器或I/O端口;DT/为低电平时,CPU接收来自存储器或I/O端口的数据。

(6)DEN:数据允许控制信号,输出,三态,低电平有效。信号用作总线收发器的选通控制信号。当为低电平时,表明CPU进行数据的读/写操作。

(7)HOLD:总线保持请求信号,输入,高电平有效。在DMA数据传送方式中,由总线控制器8237A发出一个高电平有效的总线请求信号,通过HOLD引脚输入到CPU,请求CPU让出总线控制权。

(8)HLDA:总线保持响应信号,输出,高电平有效。HLDA是与HOLD配合使用的联络信号。在HLDA有效期间,HLDA引脚输出一个高电平有效的响应信号,同时总线将处于浮空状态,CPU让出对总线的控制权,将其交付给申请使用总线的8237A 控制器使用,总线使用完后,会使HOLD信号变为低电平,CPU又重新获得对总线的控制权。

2、可编程并行通信接口芯片8255A

8255A可为8086微处理器与外部设备之间

提供并行输入/输出的通道。通过编程可以设置

芯片的工作方式,因此,用8255A连接外部设备

时,通常不用再附加外部电路。并行接口是在多

根数据线上,以数据字节/字与I/O设备交换信

息。

在输入过程中,输入设备把数据送给接口,

并且使状态线“输入准备好”有效。接口把数据

存放在“输入缓冲寄存器”中,同时使“输入回

答”线有效,作为对外设的响应。外设在收到这

个回答信号后,就撤消数据和“输入准备好”信

号。数据到达接口中后,接口会在“状态寄存器”

中设置输入准备好标志,或者向CPU发一个中断

请求。CPU可用查询方式或中断方式从接口中读

取数据。接口中的数据被读取后,接口会自动清

除状态寄存器中的标志,且撤消对CPU的中断请求。

在输出过程中,每当输出寄存器可以接收数据,接口就会将状态寄存器中“输出准备好”状态置1或向CPU发一个中断请求,CPU可用查询或中断方式向接口输出数据。当CPU输出的数据到达接口后,接口会清除“输出准备好”状态,把数据送往外设,并向外设发一个“数据输出准备好”信号。外设受到驱动后,便接收数据,并向接口电路发一个“输出回答”信号,接口收到该回答信号后,又将状态寄存器中“输出准备好”置位,以便CPU输出下一个数据。

定义工作方式控制字:

3、LED数码显示管

LED由7个字符段和一个小数点段组成,每段对应一个发光二极管,当发光二极管点亮时,相应的字符段点亮。LED有共阴极和共阳极两种供应状态。共阴极显示时,将LED显示的COM接地,将八个字符段端a、b、c、d、e、f、g、dp依次与一个8位I/O口的最低到最高位连接,当I/O给LED的哪个字符段送入一个高电平时,该段就被点亮,从而可从这7个字符段中被点亮的构成相应的字符显示出来。同理,COM阳极即将COM端接Vcc,其显示原理与COM阴极的基本相同,但I/O口送入低电平是相应的段才被点亮。

4、4×5矩阵按键

因为4×5矩阵键盘有9个管脚,于是将键盘的行接口接到8255A的PC口,列接口接到8255A的列接口。行键盘扫描一般要求有一部分的I/O口的工作方式是输入,另一部分I/O是输出,具体到4×5键盘则要求4个I/O口输入,另外4个输出,所以PC口接行。而PA、PB口要么全部输入或输出,所以PA 口接列接口,而

所对应的键值=行数*5+列数,我们定义当键值在0~9之间时输入数据,当键值在10~16之间是分别实现加、减、乘、除、幂运算、阶乘、求余的运算,当键值为18时为等号,键值为19时为清零号。

六、软件设计

(1)键盘输入的程序流程图

(2)计算器运算流程图

(3)源代码

DATA SEGMENT

X DB ?,?,?,? ;存放数据的每一位

X1 DW ? ;存放第一个数据值

X2 DW ? ;存放第二个数据值

Y DW ? ;存放运算结果

S DB ? ;存放运算符号值

E DB ? ;按下等号键标记

CC DB ? ;存放运算数据位数

H DB 0 ;存放按键行号

L DB 0 ;存放按键列号

DISCODE DB

3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5

EH,79H,71H ;段码表

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV AL,90H ;设置为A口输入,B口输出,C口输出 OUT 46H,AL

MOV DI,OFFSET X+3 ;DI指向X的高位 KKK: CALL KEY ;扫描按键

JMP KKK

;以下为按键扫描子程序,程序返回后,在变量H和L中存放当前按键的行列号

KEY PROC

CHECK: CALL DISP ;等待按键按下的同时进行显示 MOV AL,0F0H ;所有行输出低电平

OUT 44H,AL

IN AL,40H

CMP AL,0FFH ;读列值

JZ CHECK ;若都为高电平则无键按下,等待 MOV CX,50

LOOP $ ;延时消抖

IN AL,DX ;重读列值

CMP AL,0FFH

JZ CHECK ;无键按下一直等待

MOV H,0 ;有键按下,先把行列号变量清0 MOV L,0

MOV BL,01H

MOV BH,0FEH ;扫描法读键值:从第一行开始测试,即PC0输出低电平

NEXT: MOV AL,BH

OUT 44H,AL

NEXTH: IN AL,40H ;读列值,判断是第几列有键按下 TEST AL,BL ;从第一列开始判断

JZ WAIT0

ROL BL,1

CMP BL,20H ;当前行状态下没有任何列有键按下,则转为对下一行的测试

JZ NEXTL

INC H ;每判断一列,列号加1

JMP NEXTH ;再对下一列进行判断

NEXTL: MOV H,0

MOV BL,01H

ROL BH,1;对下一行测试,让下一个PC口输出低电平

CMP BH,0EFH

JZ EXIT

INC L

JMP NEXT

WAIT0: IN AL,40H ;若有键按下,则等该按键松开后再计算键值

CMP AL,0FFH

JNZ WAIT0

MOV CX,50

LOOP $ ;延时消抖

IN AL,40H

CMP AL,0FFH

JNZ WAIT0

CALL KEYVALUE ;调计算键值子程序

EXIT: RET

KEY ENDP

;以下为计算键值子程序,通过行列号计算键值(键值=行号*5+列号)

;键值存放在DL寄存器中

KEYVALUE PROC

MOV DL,L

MOV DH,H

XOR AX,AX

MOV AL,5

MUL DL

MOV DL,AL ;行号乘5

ADD DL,DH

CMP DL,9 ;按下的是数字键

JNG NUM_CALL

CMP DL,18

JL CONT_CALL ;按下的是运算键

CMP DL,18

JZ OUTP_CALL ;按下的是等于键

CMP DL,19

JZ CLR_CALL ;按下的是清除键

NUM_CALL: CALL NUMBER ;调数字键处理子程序

JMP EXIT1

CONT_CALL: MOV S,DL ;存放运算键的键值

MOV E,0

CALL COUNT ;调运算键处理子程序,计算第一个加数

JMP EXIT1

OUTP_CALL: CALL OUTP ;调等号键处理子程序

JMP EXIT1

CLR_CALL: CALL CLEAR ;调清除键处理子程序

EXIT1: RET

KEYVALUE ENDP

;以下为清除键处理子程序,按下清除键后,X变量全部清0

CLEAR PROC

MOV X[3],0

MOV X[2],0

MOV X[1],0

MOV X[0],0

CALL BITP

RET

CLEAR ENDP

;以下为等号键处理子程序,该子程序负责将第二个运算数据的数值计算出来存入X2变量

;并根据运算符号,调用相应的运算子程序

OUTP PROC

PUSH AX

PUSH DX

PUSH BX

INC E

CALL COUNT ;调运算键处理子程序,计算第二个运算数据

CMP S,10

JZ ADD_CALL ;运算符为加号,则调用加法子程序

CMP S,11

JZ SUB_CALL ;运算符为减号,则调用减法子程序

CMP S,12

JZ MUL_CALL ;运算符为乘号,则调用乘法子程序

CMP S,13

JZ DIVP_CALL ;运算符为除号,则调用除法子程序

CMP S,14

JZ PF_CALL ;运算符为求幂,则调用求幂子程序

CMP S,15

JZ JC_CALL ;运算符为阶乘,则调用阶乘子程序 CMP S,16

CALL QYP ;运算符为求余,则调用求余子程序 ADD_CALL: CALL ADDP

JMP STORE1

SUB_CALL: CALL SUBP

JMP STORE1

MUL_CALL: CALL MULP

JMP STORE1

DIVP_CALL: CALL DIVP

JMP STORE1

PF_CALL: CALL PF

JMP STORE1

JC_CALL: CALL JCP

STORE1: MOV AX,Y

;以下程序将各运算子程序返回的运算结果,按位分解,送入X变量 CMP AX,0

JL CCC

MOV DX,0

MOV BX,1000

DIV BX

MOV X[0], AL

MOV AX,DX

JMP DDD

CCC: MOV X[0],73H

MOV AX,Y

NEG AX

DDD: MOV BL,100

DIV BL

MOV CX,Y

CMP CX,0

JNL EEE

CMP AL,0

JZ FFF

EEE: MOV X[1],AL

JMP GGG

FFF: MOV X[1],85H

GGG: MOV AL,AH

MOV AH,0

MOV BL,10

DIV BL

MOV CX,Y

CMP CX,0

JNL HHH

CMP AL,0

JZ III

HHH: MOV X[2],AL

JMP JJJ

III: MOV X[2],85H

JJJ: MOV X[3],AH

POP BX

POP DX

POP AX

RET

OUTP ENDP

;以下为运算键处理子程序,该程序将第一个运算数据的数值计算出来并存入X1变量

;或者将第二个运算数据的数值计算出来并存入X2变量

;将运算符的值存入S变量

COUNT PROC

PUSH AX

PUSH BX

PUSH DX

MOV DX,0

CALL BITP ;测试X中的数据是多少位

CMP CC,4 ;输入的数据是4位数?

JZ C4

CMP CC,3 ;输入的数据是3位数?

JZ C3

CMP CC,2 ;输入的数据是2位数?

JZ C2

JMP C1 ;输入的数据是1位数?

C4: MOV AX,0

MOV AL,X[0]

MOV BX,1000

MUL BX

MOV DX,AX

C3: MOV AL,X[1]

MOV BL,100

MUL BL

ADD DX,AX

C2: MOV AL,X[2]

MOV BL,10

MUL BL

ADD DX,AX

C1: MOV AL,X[3]

MOV AH,0

ADD DX,AX

CMP E,1

JNZ X1_S

MOV X2,DX ;按下的是等号,则将第二个运算数据的值存入X2变量

JMP EXIT3

X1_S: MOV X1,DX ;按下的是运算符号,则将第一个运算数据的值存X1变量

MOV X[3],0 ;清空X变量

MOV X[2],0

MOV X[1],0

MOV X[0],0

EXIT3: POP DX

POP BX

POP AX

RET

COUNT ENDP

;以下为数字键处理子程序

;该程序,将输入的数据按位存放在X变量中,并由CC记录数据的位数

NUMBER PROC

CMP E,1

JNZ CONTINUE

MOV E,0

CALL CLEAR

CONTINUE: CMP CC,0 ;目前数据为0位,即没有数据,则转到SSS

JZ SSS

;若已有数据,以下程序将X左移8位。

;例如:先输入“1”,当再输入2时,

;先要将“1”从个位移到十位,然后再将“2”存放到个位

PUSH AX

PUSH DX

MOV AL,X[3]

MOV AH,X[2]

MOV DL,X[1]

MOV DH,X[0]

MOV CX,8

LL: SHL AX, 1

RCL DX,1

LOOP LL

MOV X[3],AL

MOV X[2],AH

MOV X[1],DL

MOV X[0],DH

POP DX

POP AX

SSS: MOV [DI],DL ;将当前键入的数据存放到X的最低位

INC CC ;数据位数加1

CMP CC,4 ;判断数据位数

JNG EXIT2

MOV CC,0 ;如果数据超过4位,重新从最低位开始存放

MOV X[2],0

MOV X[1],0

MOV X[0],0

EXIT2: CALL DISP ;调显示子程序,显示输入的数据 RET

NUMBER ENDP

;加法子程序

ADDP PROC

PUSH AX

MOV AX,X1

ADD AX,X2

MOV Y,AX

POP AX

RET

ADDP ENDP

;减法子程序

SUBP PROC

PUSH AX

MOV AX,X1

SUB AX,X2

MOV Y,AX

POP AX

RET

SUBP ENDP

;乘法子程序

MULP PROC

PUSH AX

PUSH DX

MOV AX,X1

MOV DX,X2

MUL DX

MOV Y,AX

POP DX

POP AX

RET

MULP ENDP

;除法子程序

DIVP PROC

PUSH AX

PUSH BX

PUSH DX

MOV DX,0 MOV AX,X1 MOV BX,X2 DIV BX

MOV Y,AX POP DX

POP BX

POP AX

RET

DIVP ENDP

;求幂子程序

PF PROC

PUSH AX

PUSH DX

PUSH CX

MOV CX,X2

MOV DX,X1

MOV AX,X1

DEC CX

LOP: MUL DX

MOV DX,X1

LOOP LOP

MOV Y,AX

POP CX

POP DX

POP AX

RET

PF ENDP

;阶乘子程序

JCP PROC

PUSH AX

PUSH BX

PUSH CX

MOV CX,X1

MOV AX,X1

MOV BX,AX

DEC BX

DEC CX

BEGIN: MUL BX

DEC BX

LOOP BEGIN

MOV Y,AX

POP CX

POP BX

POP AX

RET

JCP ENDP

;求余子程序

QYP PROC

PUSH AX

PUSH BX

PUSH DX

MOV DX,0

MOV AX,X1

MOV BX,X2

DIV BX

MOV Y,DX

POP DX

POP BX

POP AX

RET

QYP ENDP

;显示子程序,将X中的数值按位显示出来

DISP PROC

PUSH BX

PUSH AX

MOV BH,0

LEA SI,DISCODE

CALL BITP ;测试X位数

CMP CC,4

JZ QIAN

CMP CC,3

JZ BAI

CMP CC,2

JZ SHI

CMP CC,1

JMP G

JMP NONE

QIAN: MOV AH,11100000B ;从第4位开始显示 MOV AL,AH

MOV BL,X[0]

MOV AL,[SI+BX]

OUT 42H,AL

CALL DELY

MOV AL,0

OUT 42H,AL

BAI: MOV AH,11010000B ;从第3位开始显示 MOV AL,AH

OUT 44H,AL

MOV BL,X[1]

MOV AL,[SI+BX]

OUT 42H,AL

CALL DELY

MOV AL,0

OUT 42H,AL

SHI: MOV AH,10110000B ;从第2位开始显示

MOV AL,AH

OUT 44H,AL

MOV BL,X[2]

MOV AL,[SI+BX]

OUT 42H,AL

CALL DELY

MOV AL,0

OUT 42H,AL

G: MOV AH,01110000B ;从第1位开始显示

MOV AL,AH

OUT 44H,AL

MOV BL,X[3]

MOV AL,[SI+BX]

OUT 42H,AL

CALL DELY

JMP EXIT4

NONE: MOV AL,0 ;X中没有数据,不显示

OUT 42H,AL

EXIT4: POP AX

POP BX

RET

DISP ENDP

;分析数据位数子程序

BITP PROC

CMP X[0],0 ;如果X[0]不为0,则数据为4位数 JNZ FOURBIT

CMP X[1],0 ;如果X[1]不为0,则数据为3位数

CMP X[2],0 ;如果X[2]不为0,则数据为2位数

JNZ TOWBIT

CMP X[3],0 ;如果X[3]不为0,则数据为1位数 JNZ ONEBIT

JMP ZER0BIT ;否则,没有数据

FOURBIT: MOV CC,4

JMP EXIT5

THREEBIT: MOV CC,3

JMP EXIT5

TOWBIT: MOV CC,2

JMP EXIT5

ONEBIT: MOV CC,1

JMP EXIT5

ZER0BIT: MOV CC,0

EXIT5: RET

BITP ENDP

;延时子程序

DELY PROC

PUSH CX

MOV CX,100

LOOP $

POP CX

RET

DELY ENDP

CODE ENDS

END START

七、调试与测试

(1)任意四位十进制的加法。

输入X1=321;X2=567

(2)任意四位十进制的减法。输入X1=321;X2=567

(3)任意四位十进制的乘法。输入X1=21;X2=4

(4)任意四位十进制的除法。输入X1=39;X2=3

(5)任意有效位十进制的求幂。输入X1=3;X2=4

简易计算器的实现(JSP)

用JSP编写的一个简易计算器实现代码如下: <%@ page contentType="text/html;charset=gb2312"%>

简易计算器


<% //接收第一个数 String num1=request.getParameter("numb1"); //接收第二个数 String num2=request.getParameter("numb2");

//接收运算符号 String oper=request.getParameter("op"); Double dnum1=0.0; Double dnum2=0.0; Double result=0.0; //java中String -> int if(num1!=null&&num2!=null&&oper!=null) { dnum1=Double.parseDouble(num1); dnum2=Double.parseDouble(num2); //计算 if(oper.equals("+")) { //加 result=dnum1+dnum2; } else if(oper.equals("-")) { //减 result=dnum1-dnum2; } else if(oper.equals("×")) { //乘 result=dnum1*dnum2; } else { //除 result=dnum1/dnum2; } } %>

请输入第一个数: 请输入第二个数: 请选择运算符:

简易计算器的设计与实现

沈阳航空航天大学 课程设计报告 课程设计名称:单片机系统综合课程设计课程设计题目:简易计算器的设计与实现 院(系): 专业: 班级: 学号: 姓名: 指导教师: 完成日期:

沈阳航空航天大学课程设计报告 目录 第1章总体设计方案 (1) 1.1设计内容 (1) 1.2设计原理 (1) 1.3设计思路 (2) 1.4实验环境 (2) 第2章详细设计方案 (3) 2.1硬件电路设计 (3) 2.2主程序设计 (7) 2.2功能模块的设计与实现 (8) 第3章结果测试及分析 (11) 3.1结果测试 (11) 3.2结果分析 (11) 参考文献 (12) 附录1 元件清单 (13) 附录2 总电路图 (14) 附录3 程序代码 (15)

第1章总体设计方案 1.1 设计内容 本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除1位无符号数字的简单四则运算,并在6位8段数码管上显示相应的结果。 设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的8751单片机,输入采用4×4矩阵键盘。显示采用6位8段共阳极数码管动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,最终选用汇编语言进行编程,并用protel99se涉及硬件电路。 1.2 设计原理 在该课程设计中,主要用到一个8751芯片和串接的共阳数码管,和一组阵列式键盘。作为该设计的主要部分,下面将对它们的原理及功能做详细介绍和说明。 1)提出方案 以8751为核心,和数码管以及键盘用实验箱上已有的器件实现计算器的功能。 2) 总体方案实现 (1)要解决键值得读入。先向键盘的全部列线送低电平,在检测键盘的行线,如果有一行为低电平,说明可能有按键按下,则程序转入抖动检测---就是延时10ms再读键盘的行线,如读得的数据与第一次的相同,说明真的有按键按下,程序转入确认哪一键按下的程序,该程序是依次向键盘的列线送低电平,然后读键盘的行线,如果读的值与第一次相同就停止读,此时就会的到键盘的行码与列码

简单计算器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 简单计算器总流程图

简单计算器设计报告

简单计算器设计报告 045 一、基本功能描述 通过文本编辑框实现基本整数的加减乘除运算 二、设计思路 如下图是整个程序进行的流程图,基本方法是在ItemText文本编辑框输入字符,程序对字符进行判断,若输入不是数字则提示错误。输入正常时,通过下拉框ComboBox_InsertString 选择相应运算符。点击等号IDC_OK,即可得出运算结果。操作简便,算法简单。 三、软件设计 1、设计步骤 打开Microsoft Visual C++ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名zhoutong及其所在位置,点击确定 1

将弹出MFC AppWizard-step 1对话框,选择基本对话框,点击完成 MFC AppWizard就建立了一个基于对话窗口的程序框架

四、主要程序分析 1、字符判定函数 BOOL IsInt(TCHAR*str) { int i=atoi(str); TCHAR strtemp[256]; wsprintf(strtemp,"%i",i); if(strcmp(str,strtemp)!=0) { return FALSE; } Else { return TRUE; } } 该函数通过atoi把文本编辑框读取的字符转换为数字,再通过wsprintf把转换数字转换为字符,通过strcmp比较原字符和转换得来的字符。如相同返回true,不通则返回false. 3、运算符选择程序 BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) { HWND hwndComboOP=GetDlgItem(hwnd,IDC_COMBOOP); ComboBox_InsertString(hwndComboOP,-1,TEXT("+")); ComboBox_InsertString(hwndComboOP,-1,TEXT("-")); ComboBox_InsertString(hwndComboOP,-1,TEXT("*")); ComboBox_InsertString(hwndComboOP,-1,TEXT("/")); return TRUE; } 3

HTML5+css+JavaScript进行四则运算简易计算器(用按钮实现)

HTML5+JavaScript: js简易计算器

/* 动画所用图片元素,可自行更换*/

第02讲 简易计算器的设计

第02讲计算器 2.1 计算器简介 大家都知道,计算器是日常生活中不可缺少的一个工具,在Microsoft的Windows操作系统中,附带了一个计算器程序,有标准型和科学型两种模式。Windows XP下的标准型和科学型计算器程序分别如图2-1和图2-2所示。 图2-1 Windows XP下的标准型计算器 图2-2 Windows XP下的科学型计算器 Windows操作系统下附带的计算器程序功能相当的强大,本课我们将模仿Windows的计算器,使用Visual C# 2005开发平台开发一个功能相对简单的计算器应用程序,它能完成加、减、乘、除运算。 接下来详细的介绍简易计算器的设计方法和步骤。

2.2 界面设计及属性设置 用户界面设计是软件开发中非常重要的一个部分,用户界面的好坏直接影响软件的质量,本节将介绍如何设计简易计算器的用户界面以及界面上各控件的属性设置。 2.2.1 界面设计 打开Visual Studio 2005开发工具,新建一个Windows应用程序,然后在窗体上依次放置1个TextBox和17个Button控件,如图2-1所示(设置好属性后)。 图2-1 计算器用户界面 2.2.2 属性设置 窗体和各控件的属性设置如表2-1所示。 表2-1 窗体和各控件的属性

2.3 编写代码 本程序需要用到一些公共变量,例如用来接收操作数、运算结果,判断输入的是否为小数等,因此首先在代码的通用段声明以下变量: //****************************************************************** double num1, num2, result; // 操作数及运算结果 bool decimalFlag = false; // 判断输入的是否为小数 string myOperator; // 操作类型 //******************************************************************

使用js,css,html做的web版的计算器

jsq.html