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

简单计算器的汇编实现

微机原理实验报告

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

二、设计任务

利用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时为清零号。

(3)源代码

DATA SEGMENT X DB ?,?,?,?;存放数据的每一位X1DW ?;存放第一个数据值X2DW ?;存放第二个数据值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,5EH,79H,71H ;段码表DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA

显示主界面,用户进行

输入

接受输入第一个十进

制数

接受输入运算符

接受输入第二个十进

制数

判断运算符号

调用运算功能模块

按下’=’键显示结果结束

MOV DS,AX

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

OUT46H,AL

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

JMP KKK

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

KEY PROC

CHECK:CALL DISP;等待按键按下的同时进行显示

MOV AL,0F0H;所有行输出低电平

OUT44H,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

OUT44H,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

;加法子程序(文档由爱奇艺播放器https://www.wendangku.net/doc/a115411225.html,/分享)

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

OUT44H,AL

MOV BL,X[0]

MOV AL,[SI+BX]

OUT42H,AL

CALL DELY

MOV AL,0

OUT42H,AL

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

MOV AL,AH

OUT44H,AL

MOV BL,X[1]

MOV AL,[SI+BX]

OUT42H,AL

CALL DELY

MOV AL,0

OUT42H,AL

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

MOV AL,AH

OUT44H,AL

MOV BL,X[2]

MOV AL,[SI+BX]

OUT42H,AL

CALL DELY

MOV AL,0

OUT42H,AL

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

MOV AL,AH

OUT44H,AL

MOV BL,X[3]

MOV AL,[SI+BX]

OUT42H,AL

CALL DELY

JMP EXIT4

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

OUT42H,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位数

JNZ THREEBIT

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

(6)任意有效位十进制的阶乘。

输入X1=4;

(7)任意有效位十进制的求余。

输入X1=9;X2=4

八、关键技术

(1)、通过按键扫描程序,来确定输入的字符类型(数字、运算符、等号、清除),并通过判断语句将输入存入相应的位置;

(2)、一般减法无法将小数减大数的结果正确显示,本设计通过部分关键子程序可以实现负数的显示;

(3)、在完成各项功能时应确保各个子程序模块的协调调用,互不影响。

九、实际完成的功能

(1)加法功能

当输入X1、X2和加法运算符时,进行加法子程序调用,完成加法功能。

(2)减法功能

1、当输入X1>=X2时,输入乘法运算符,实现X1-X2的运算,完成减法功能,将结果输出。

2、当输入X1

(3)乘法功能

当输入X1、X2和乘法运算符时,调用乘法子程序,完成乘法功能,并对结果进行输出。

(4)除法功能

当输入X1、X2且满足X1大于X2,X1为X2(X2!=0)的整数倍时,输入除法运算符,调用除法子程序,完成除法功能,并对结果进行输出。(注意:若不能整除,则结果只显示商的整数部分。

(5)幂运算功能

当输入X1、X2、幂运算符时,调用幂运算子程序,完成X1的X2次幂的运算,并对结果进行输出。

(6)阶乘运算功能

当输入X1和阶乘运算符时,调用阶乘运算子程序,完成X1的阶乘运算,并对结果进行输出。

(7)求余运算功能

当输入X1、求余运算符和X2时,调用求余运算子程序,完成求余功能,并对结果进行输出。

(8)清除功能

当按下清除键时,将数据清零。

十、总结

1、任务分工

高康:主要负责部分代码的编写和实验报告的完成

姜达:主要负责部分代码的编写和总体的调试与测试

李晓辉:主要负责部分代码的编写和相关资料的收集

2、遇到的问题及解决方法

(1)、问题:按键的扩展。最初考虑扩展时,增加一行按键,但由于C 口为输出,且PC4、PC5、PC6、PC7控制数码管的输出位数,因此

不能正常进行按键扫描。

解决方法:增加一列按键,通过A口控制,实现了4X5的按键功能

扩展。

(2)、问题:在实现负数的输出时,若为一位负数,百位和十位的0会显示(如为-1,则输出为-001)。

解决方法:对输出部分子程序进行修改,加入判断语句,需要注意

的是,在修改过程中必须有清晰的思路,否则会比较混乱。

3、未解决的问题

简易计算器的实现(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; } } %>

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

单片机-- 简易计算器汇编程序

NAME T11 单片机--简易计算器汇编程序 ;将键盘的KA10~KA12接8259的KA0~KA2;RL10~RL17接8255A的RL0~RL7 ; T11 8279键盘显示接口实验二 CSEG AT 0000H LJMP START CSEG AT 4100H START: MOV DPTR,#00CFE9H ;8279命令字 MOV A,#0D1H ;清显示 MOVX @DPTR,A LOOP1: MOVX A,@DPTR ANL A,#0FH JZ LOOP1 ;有键按下?没有则循环等待 MOV A,#0A0H ;显示\消隐命令 MOVX @DPTR,A MOV A,#40H ;读FIFO命令 MOVX @DPTR,A MOV DPTR,#0CFE8H ;读键值 MOVX A,@DPTR MOV R1,A ;保存键值加个F MOV DPTR,#0CFE9H ;写显示RAM命令 MOV A,#80H ;选中LED1 MOVX @DPTR,A MOV A,R1 ANL A,#0FH ;取后半字节 MOV DPTR,#TAB MOVC A,@A+DPTR ;取段显码 MOV DPTR,#0CFE8H ;写显示RAM MOVX @DPTR,A MOV DPTR,#0CFE9H ;写显示RAM命令 LOOP2: MOVX A,@DPTR ;输入显示符号 ANL A,#0FH JZ LOOP2 ;有键按下?没有则循环等待 MOV A,#0A0H ;显示\消隐命令 MOVX @DPTR,A MOV A,#40H ;读FIFO命令 MOVX @DPTR,A MOV DPTR,#0CFE8H ;读键值 MOVX A,@DPTR MOV R2,A ;保存键值 MOV DPTR,#0CFE9H ;写显示RAM命令 MOV A,#81H ;选中LED2 MOVX @DPTR,A MOV A,R2 ANL A,#0FH ;取后半字节

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 代码设 计 .....................................................................

简易计算器的设计与实现

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

沈阳航空航天大学课程设计报告 目录 第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再读键盘的行线,如读得的数据与第一次的相同,说明真的有按键按下,程序转入确认哪一键按下的程序,该程序是依次向键盘的列线送低电平,然后读键盘的行线,如果读的值与第一次相同就停止读,此时就会的到键盘的行码与列码

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

HTML5+JavaScript: js简易计算器

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

汇编语言程序设计————计算器.doc

课程设计说明书题目 :表达式计算器 学号: 班级 : 计算机创新实验班 姓名:廖福轩

目录 一.设计内容 2 二.设计方案错误!未定义书签。 1.主程序模块 .错误!未定义书签。 2.赋权值模块 .错误!未定义书签。 3.加减乘除运算子程序模块.错误!未定义书签。 4.调用赋权宏子程序模块.错误!未定义书签。 5.回车换行宏模块 .错误!未定义书签。 号功能显示字符串宏模块. 2 三.设计框图 3 四.程序代码 4 五.运行结果错误!未定义书签。 六.设计总结错误!未定义书签。

计算器汇编语言程序设计 一.设计内容 从键盘输入一个十进制两位数的四则运算表达式,如23*56 -( 8*19 ) /6 + 67 - 8=,编程计算表达式的值,输出十进制结果(有可能是三位或四位十进制),+-*/ 位置任意。并要求程序能 反复执行直道对“还要继续吗(y/n )”之类的提示回答“n”或“ N”为止。 四则运算主要包括以下几个模块: 主程序模块 . 赋权宏模块 . 加减乘除运算子程序模块. 调用赋权宏子程序模块. 回车换行宏模块. 9 号功能显示字符串宏模块. 二.设计方案 1.主程序模块 . 主程序初始化数据段,调用显示宏show 显示界面,输入字符或数字并判断,调用子程序dyfq 调用赋权宏 fq 为符号赋权,从而判断优先级,调用加减乘除运算子程序ys 对判断出的相应运算符进行运算,输出运算结果,判断是否继续,继续则返回输入,不继续则退出程序. 2.赋权宏模块 . 通过定义宏 fq, 定义了变元 a,b 进行参数传递,并使用替换运算符&使变元 a 与标号 s 对应 .接着给对应的符号赋予权值,将其权值存入ch 中 . 3.加减乘除运算子程序模块 . 运算模块实现了将ax 入栈保存,然后将ax, bx 赋值为 0,判断 cl 中的符号是否为乘号* ,若为乘号 * 则将 number 中的数字与其下一位的数字相乘,并把结果存入该位置,类似的若不为乘号* 则接着判断是否为除号/, 若为除号 / 则进行除法运算,然后判断是否为加法,为加法则进行加法运算,接着判断是否为减法,为减法则进行减法运算并将结果存入当前的计算的第二个数的位置. 4.调用赋权宏子程序模块 . 该模块实现了调用赋权宏fq 为 (,),*,/,+,-,= 等符号分别赋权值为5,1,4,4,3,3,0. 从而可以通过设定的权值来判断优先级. 5.回车换行宏模块 . 通过 2 号功能的输出功能,将 0dh 赋予 dl 输出,再调用 2 号功能,将 0ah 赋予 dl 输出,从而实现回车换 行功能 . 号功能显示字符串宏模块. 通过定义宏show ,用 9 号显示功能,通过变元str 将字符串显示出来。 三.设计框图

java图形化界面实现简单计算器

学号 天津城建大学 Java 语言程序设计C 实验报告 实验5:计算器 学生姓名路江飞 班级11卓越7班 一、实验目的 1.掌握Java图形组件与布局管理器的使用; 2.掌握使用Java事件处理机制的使用; 3.掌握图形界面的各种控件的使用,如:标签、文本框、按钮、复选框、列表框、窗框等。 二、实验要求 1.采用布局管理器进行界面的布局; 2.学会对不同的事件用相应的事件处理器; 3.写出实验报告。要求记录编译与执行Java程序当中的系统错误信息提材示,并给出解决办法。 三、实验内容 1.在随堂练习的简单计算器基础上设计一个多功能计算器。包括复杂的功能:比如记忆功能,三角函数,成方,对数等等。 五、实验结果 文件1: package computer; import java、awt、BorderLayout; public class Compuer extends JFrame { private JPanel contentPane; private JTextField textField; private JTextField textField_1;

private JTextField textField_2; private JTextField textField_3; /** * Launch the application、 */ public static void main(String[] args) { EventQueue、invokeLater(new Runnable() { public void run() { //运行程序时,点击按钮输入公式,当点击等于号时显示出计算结果 try { Compuer frame = new Compuer(); frame、setVisible(true); Time time=new Time(); time、setTime(frame、textField_3); Thread thread=new Thread(time); thread、start(); } catch (Exception e) { e、printStackTrace(); } } }); } /** * Create the frame、 */ public Compuer() { setTitle("\u8BA1\u7B97\u5668"); setName(""); final StringBuffer s=new StringBuffer(); setDefaultCloseOperation(JFrame、EXIT_ON_CLOSE); setBounds(100, 100, 412, 448); contentPane = new JPanel(); contentPane、setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane、setLayout(null); textField = new JTextField(); textField、setEnabled(false); textField、setLocale(Locale、UK); textField、setForeground(Color、PINK); textField、setText(" \u6B22\u8FCE\u4F7F\u7528\u8BA1\u7B97\u5668"); textField、setBounds(10, 20, 368, 30); contentPane、add(textField);

C语言简易计算器的实现

目录 一.课程设计目的 (1) 二.设计环境 (1) 三.设计内容 (1) 四.设计说明 (2) 五.设计程序流程图 (2) 六.调试 (4) (1)错误原因分析一 (4) (2)语法错误 (5) (3)逻辑错误 (5) 七. 调试结果图 (6) 八. 结论与心得体会 (7) 九.附录 (8) 具体代码实现 (8) 十.参考文献 (18)

一.课程设计目的 1.通过一个学期的学习,我认为要学号C语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践来巩固我 们的知识,特别是学计算机专业的,我们更应该注重这一环节, 只有这样我们才能成为一个合格的计算机人才。通过这一个课程 设计,进一步来巩固所学的语句,如:循环,和分支结构的运用。还要熟悉四则运算和函数的算法。 2.通过这次课程设计扩展自己的知识面,课本上的东西是远 远不够的,可以通过上网或去图书馆查资料等方式得到一些新的 知识, 3.通过课程设计,加深对课程化设计思想的理解,能进行一 个系统功能分析,并设计一个合理的模块化结构,提高程序开发 能力。 二.设计环境 1.硬件:一台完整的电脑,包括键盘、鼠标,最小硬盘空间1GHz 2.软件:安装有Microsoft visual c++6.0 三.设计内容 以简易计算器为例,通过对简单应用软件计算器的设计,编制、调试,实现

简单的加,减,乘,除等运算,以学习应用MFC库类编写对话框的原理,加深对C++类的学习及应用。 (1)定义一个结构体类型数组,输入0~9及+、--、*等符号的信息,将其信息存入文件中; (2)输入简单的加减乘除算术计算式,并在屏幕上显示计算结果; (3)画出部分模块的流程图; (4)编写代码; (5)程序分析与调试。 四.设计说明 1)包含的功能有:加、减、乘、除运算,开方、平方等功能。 (2)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。 (3)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。 (4)计算功能基本上是用系统内部函数。 (5)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。 (6)“CE”按钮可以清除所有已输入的数据从头计算 五.设计程序流程图

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

jsq.html