简易计算器的设计.docx
《简易计算器的设计.docx》由会员分享,可在线阅读,更多相关《简易计算器的设计.docx(29页珍藏版)》请在冰豆网上搜索。
简易计算器的设计
学号:
课程设计
题目
简易计算器的设计
学院
自动化
专业
电气工程及其自动化
班级
姓名
指导教师
2014
年
1
月
9
日
课程设计任务书
学生姓名:
专业班级:
指导教师:
工作单位:
自动化学院
题目:
简易计算器的设计
初始条件:
用8086CPU、8255A并行通信接口、七段LED数码管接口、小键盘控制电路接口、外围电路芯片及元器件实现一个简易计算器,完成相应的程序编写。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
(1)可进行2位十进制的加减乘除法运算。
(2)键盘输入数据,同时LED数码管显示,模拟计算器的工作。
(3)键盘上要求有0~9数字键,+、-、×、÷、=功能键,清除键C。
(4)撰写课程设计说明书。
内容包括:
摘要、目录、正文、参考文献、附录(程序清单)。
正文部分包括:
设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。
时间安排:
12月26日-----12月28日查阅资料及方案设计
12月29日-----1月2日编程
1月3日-----1月7日调试程序
1月8日-----1月9日撰写课程设计报告
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
本科生课程设计成绩评定表
摘要
这次微机原理的课程设计的题目是简易计算器的设计,设计一个可以实现2位十进制加减乘除运算功能的电路,并用LED显示出来。
硬件部分采用芯片8086CPU,74LS138译码器,并行接口芯片8255A,四位七段LED数码管,和小键盘组成。
4×4小键盘作为输入,该小键盘上有0~9、+、-、*、/和清零C共16个按键构成的;四位七段LED数码管作为输出显示,数码管采用的是共阳极的数码管;8086CPU作为运算处理核心来完成计算器的主要功能,包括计算数据、数据保存、发出控制信号等;用8255A并行通行接口来完成本次计算器系统的接口电路,而74LS138译码器、或门电路以及导线是用来产生并行接口芯片8255的片选信号,产生接口电路的端口地址,其中8255的A0、A1分别接CPU的A1、A2而使它的端口地址为偶地址。
本次设计的软件部分是采用8086汇编语言来完成的,主要通过读写端口来实现键值的输入和显示数字的输出,依靠乘法运算指令来实现计算器的计算。
硬件电路完成后,用protues进行方真,得到结果。
关键词:
计算器小键盘数码显示键盘扫描protues仿真
简易计算器的设计
1设计的任务及要求
初始条件:
用8086CPU、8255A并行通信接口、七段LED数码管接口、小键盘控制电路接口、外围电路芯片及元器件实现一个简易计算器,完成相应的程序编写。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
(1)可进行2位十进制的加减乘除法运算。
(2)键盘输入数据,同时LED数码管显示,模拟计算器的工作。
(3)键盘上要求有0~9数字键,+、-、×、÷、=功能键,清除键C。
(4)撰写课程设计说明书。
内容包括:
摘要、目录、正文、参考文献、附录(程序清单)。
正文部分包括:
设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。
2方案的设计
2.1方案设计论证
如下是两种方案的原理方框图:
方案一:
8086CPU
译码电路
8255并行通信接口
8255并行通信接口
四位七段数码管
4*4
小键盘
图2.1计算器的组成方框图方案一
方案二:
图2.2计算器的组成方框图方案二
方案评估:
方案一:
释放了系统数据总线,但是方案缺乏经济性,因为采用了两片8255,浪费资源,舍弃!
方案二:
此种方案较为经济,方便,具有模块化的特点,因为将计算和显示电路全部集成在了8255上,应用时,直接挂接8255即可实现要求!
2.2方案概述与原理硬件电路图
对上面框图2.2的方案二的概述:
本次设计的简易计算器系统是由8086CPU、8255A并行通信接口芯片、四位七段LED数码管、小键盘、74LS138译码器芯片及部分门电路芯片组成,系统组成方框图如图2.2所示。
整个计算器系统通过4×4小键盘控制接口输入需要计算的原始数据和运算符号,这些数据经过8255A并行通信接口输入给8086CPU并保存起来,CPU接收数据后根据不同的运算符来处理数据,然后CPU把运算处理后的数据经过8255A并行通信接口输出给给四位七段LED数码管,最后后数码管把接收到的数据显示在数码管屏幕上,而74LS138译码器和相应的或门是给8255提供译码片选信号而设计的,只有CPU输出8255选通的地址才能使8255处于正常工作模式,系统才能有效工作。
整个计算器系统的详细电路图如下图2.3
图2.3简易计算器硬件电路图
3系统模块与功能
3.18086CPU芯片
8086CPU芯片是本次简易计算器系统的核心部件,其主要功能包括完成数据的加减乘
除运算,把需要显示的十六进制数转换成与之对应在数码管上显示的十六进制代码,配合
小键盘形成不同键值对应的特定十六进制代码。
在该次计算器系统中,8086CPU工作在最
小模式,通过AD0~AD7八位地址/数据总线接口与8255A并向通信接口交换计算器系统中所有数据,而数据的交换方向是通过RD和WR输出的低电平有效控制信号来控制的,同时CPU执行系统所有软件程序,控制着系统中其他部件的工作。
由于只是简单操作,这次设计我们让8086工作在最小模式下,即MN/MX为高电平。
8086cpu引脚图如图3.1所示:
图3.18086cpu引脚图
3.28255A并行通信接口芯片
8255A并行通信接口芯片,如图3.2所示,是8255芯片的引脚图,其具有数据缓冲和锁存作用,可以让多个外设同时工作而又互不干扰,同时也解决了高速CPU与低速外设的工作不同步问题。
图3.28255芯片引脚图
8255A内部包括三个8位的输入输出端口,分别是端口A、端口B、端口C,相应信号线是PA7~PA0、PB7~PB0、PC7~PC0。
端口都是8位,都可以作为输入或输出。
有三种工作方式:
方式0,方式1,和方式2。
其中方式0,工作在无条件传输方式下,A,B,C端口都适用,方式1,工作在异步或条件查询方式下,只有A,B端口适用,方式2,是双向传输方式,仅A端口适用。
有两个控制端口,A组和B组,其中A组由A口与C高4位组成;B组由B端口和C口低4位组成。
在本次计算器系统中,8255A工作在0方式下,PA口、PB口和PC口的低四位输出,PC口高四位输入,其控制口输入的控制字为88H,PA口接七段LED数码管的阴极,PB口的低四位接数码管的四个阳极,PC口接4×4小键盘的八个接口。
工作方式0:
8255A中各端口的基本输入/输出方式如图3.3:
图3.38255A工作方式控制
3.3译码电路
译码电路由一片74LS138译码器和一个或门电路组成,根据译码器及或门的接线知道8255被选通的条件是AD0、AD3、AD4、AD5、AD7低电平有效,AD6高电平有效,而AD1和AD2分别接8255的A0和A1,故经过译码后8255的控制口、PA口、PB口、PC口端口地址分别是40H、42H、44H、46H。
3.4小键盘电路
4×4小键盘是计算器系统的输入部件,其功能是输入计算器系统中的所有运算数据以及运算符号。
小键盘上有16个按键分为四行四列,相当于如下的电路图3.4,每一个按键就相当于是一个开关,每当按键被按下,该开关就闭合了,于是位于该行与该列的两接线在键盘部闭合。
本次计算器系统让小键盘的纵向接口从分别与PC口低四位PC2、PC1、PC0、PC3相连,横向接口从左向右分别与PC口高四位PC4、PC5、PC6、PC7相连,由于PC口的高四位为输入而低四位为输出,CPU可以向PC口置数使得PC口的高四位与低四位的状态不同,每当有按键按下,PC口的高四位的状态就会通过接通的按键开关被PC口的低四位改变,按下的键不同改变后的值就不同,从而就对应不同的键值,于是根据这种特定的对应关系就可以确定按下的键的值了。
其中的键值映射图如图3-1和3-2:
图3.44*4计算器的原理等效电路
表3-1键盘映射图表3-2键盘编码图
7
8
9
/
4
5
6
*
1
2
3
-
ON/C
0
=
+
0EBH
0DBH
0BBH
7BH
0EDH
0DDH
0BDH
7DH
0EEH
0DEH
0BEH
7EH
0E7H
0D7H
0B7H
7EH
3.5四位七段LED数码管显示电路
七段LED数码管是由8个发光二极管组成,分别是数字部分a~g和小数点部分dp,通过LED的不同亮灭组合就可以显示出不同的数。
七段LED数码管分为两种,分别为共阳极和共阴极,两者极性接法相反,在这里具体介绍共阳极七段LED数码管,共阳极七段LED数码管是把8个发光二极管的阳极连在一起由一个公共端口VCC引出,阴极互不干扰分别引出8个端口a~g和dp,由LED的导通发光原理可知只有阳极输入为高电平时数码管才能正常显示,而显示的具体数字由8个阴极输入不同电平组合决定。
本次计算器系统要求的是两位十进制数的运算,运算结果最多为四位,故在这里采用四位共阳极七段LED数码管来构成显示电路,显示电路让四位七段LED数码管的公共阴极a~g和dp依次连接8255的PA0~PA7,四个阳极VCC从低位到高位分别与PB0~PB3相连,故PB0~PB3的输出高电平有效,分别决定数码管低位到高位的显示;而PA0~PA6的输出决定显示的数字,PA7输出控制小数点,低电平有效,具体数字显示对应的输出信号如表3-3所示。
表3-3不带小数点数字显示对应输出表
显示的数
0
1
2
3
4
5
6
7
8
9
PA输出
0C0H
0F9H
0B4H
0B0H
99H
92H
82H
0F8H
80H
90H
4软件设计框图与程序
4.1计算器系统程序总体流程图
如图4.1所示。
开始
初化8255、清零
无键按下?
下?
键盘逐步扫描,获取值hb
键值是符号?
根据符号做运算
无运算结果?
运算结果存入sum
输入第二个数?
第一个数存入sum
第二个数存入sum
显示sum中的数
结束
N
Y
NN
N
Y
N
Y
N
Y
图4.1计算器系统总体程序流程图
4.2模块程序流程图与程序
4.2.1流程图
键值程序获取是通过键盘逐行扫描,扫描不同行时赋给C口的值不同,从上到下分别是0FEH、0FDH、0FBH、0F7H,按下不同的键在读C口时得到不同的数,然后根据这个数确定对应的键值,键值对应的C口读数关系如表3-1和3-2所示,该段程序流程图如图4.2所示。
N
扫描键盘开始
赋初值DH=0F0H循环次数CX=4,
DH送给C口,读入C口程序
AH=0F0H?
CX-1=0?
根据AL确定按下的值,将之存入BH,转入display程序。
ROLDH,1
N
Y
图4.2计算器键盘扫描流程图
4.2.2键盘扫描程序
MOVCX,4
MOVDH,0FEH
KEYSCAN:
ADDFLAGSHU,1
MOVAL,DH
OUT44H,AL
INAL,44H
MOVAH,AL
ANDAH,0F0H
CMPAH,0F0H
JNEGETKEY
ROLDH,1
LOOPKEYSCAN;键盘逐行扫描
4.3输入运算
4.3.1输入运算的流程图
数据运算模块程序是通过判断运算符标志缓存内容来决定进行哪种运算的,清零运算
是把运算符标志和数据缓存清零初始化,加减乘除运算是保存第一个输入运算数准备输入
第二个运算数,等号运算是根据加减乘除运算标志符来进行相应的加减乘除运算并保存结
果,该部分程序流程图如图4.3所示
根据符号判断做那种运算
开始运算
清零C?
是‘=’?
是’+、-、*、/’?
将结果存入sum,清零缓存。
转入displaysum
清零数据,缓存。
第一个数存入sum
转入keycheck
Y
N
N
Y
Y
N
图4.3计算器系统运算程序流程图
4.3.2输入运算程序
DISPLAYSHU:
CMPFLAGSHU,1
JGDISPLAYSHU
MOVSUM,BH
MOVSUM1,BH
JMPDISPLAYSUM
DISPLAYSHU1:
MOVAL,SUM1
MOVBL,0AH
MULBL
ADDAL,BH
MOVSUM1,AL
MOVSUM,AL
JMPDISPLAYSUM
DISPLAY:
CMPBH,0AH
JLDISPLAYSHU
MOVAL,0C0H
OUT40H,AL
MOVAL,0FH
OUT42H,AL
CALLDELAY
MOVFLAGSHU,0
CMPFLAGCLR,1
JECLRFA
CMPFLAGDENG,1
JEDENGFA
CMPFLAGMUL,1
JECHENGFA
4.4显示部分
4.4.1显示部分流程图
四位七段LED数码管的显示并非同时显示的,而是从高位到地位逐位显示的,但指令的执行周期是非常短的且人眼的观察存在视觉停留不能差别先后,而人眼所能观察到的最短时间是相对比较长的,因而程序中每次显示都设计有时间延迟程序。
同时先要设计程序把要显示的数分解成个、十、百、千分别保存起来,然后逐位显示,整个显示部分的模块程序流程图如图4.4所示
图4.4计算器键盘扫描流程图
4.4.2显示部分程序
DISPLAYSUM:
MOVAX,SUM
MOVDX,0
MOVBX,3E8H
DIVBX
MOVQIAN,AL
MOVAX,DX
MOVBL,64H
DIVBL
MOVBAI,AL
MOVAL,AH
MOVAH,0
MOVBL,0AH
DIVBL
MOVSHI,AL
MOVGE,AH
MOVAL,QIAN
MOVBL,OFFSETTAB
XLAT
OUT40H,AL
OUT42H,8H
CALLDELAY
MOVAL,BAI
XLAT
OUT40H,AL
OUT42H,4H
CALLDELAY
MOVAL,SHI
XLAT
OUT40H,AL
OUT42H,2H
CALLDELAY
MOVAL,GE
XLAT
OUT40H,AL
OUT42H,1H
CALLDELAY
JMPKEYCHECK
5系统仿真
本次实验是基于protues里面的仿真,我们将硬件电路图,在protues器件库里面找到相应的芯片,并按照电路图连接如图5.1,连接好电路图,将编好的程序转化成hex格式,导入到8086cpu里面,然后点击仿真,运行。
图5.1protues连线图
图5.1protues仿真图
小结与体会
通过本次微机原理与接口技术课程设计,我更深入的掌握了在《微机原理与接口技术》
理论课上学习到的各种基本控制理论,了解学习了很多课堂上没有涉及的知识,锻炼了我
多方面的能力,以下是我本次设计的具体体会。
(1)通过理论联系实际的真实设计,我更加深入的了解了汇编语言的编程思想,学会了用汇编语言编写一些不太复杂的应用程序。
通过本次设计,我深深的体会到汇编语言是一门接近硬件的语言,它与C语言等其他高级语言有很大不同,往往在高级语言很容易实现的功能通过汇编来实现很复杂,比如说C语言编写加减乘除运算只需要简单的一两条语句,而汇编语言编写需要很复杂的程序段来实现;但汇编语言有它的长处,汇编语言的运行速度比其他高级语言更快,对于实现硬件功能有着极大的优越性。
(2)本次课程设计由于所设计的知识涉及很广,许多设计中的硬件工作方式以及功能的实现方法都是我以往并不知道的,这迫使我去查阅许多相关资料文献,学习相关知识,这些不但使我学习了许多新的知识,而且锻炼了我独立学习新知识的能力。
(3)我还通过本次设计锻炼了我独立思考和动手解决控制系统实际问题的能力,由于我们的设计是以小组为单位,如果一个小组不能很好的配合工作学习是不能把设计做好的,这些都锻炼了我与其他同学互相配合、互相帮助的团队协作能力。
参考文献
[1]彭虎,周佩玲,傅忠谦编著.微机原理与接口技术(第2版).北京:
电子工业出版
社,2008
[2]沈美明,温东婵编著.IBM-PC汇编语言程序设计(第2版).北京:
清华大学出版社,2001
[3]潘新民,王燕芳编著.微型计算机控制技术.北京:
高等教育出版社,2001
[4]段承先编著.微型计算机原理及接口技术.北京:
兵器工业出版社,2000
[5]黄国建,虞平良,曾芬芳编著.微型机算机应用技术.上海:
上海交通大学出版
社,1995
附录
附录一
程序代码:
DATASEGMENT
TABDB0C0H,0F9H,0B4H,0B0H,99H,92H,82H,0F8H,80H,90H
FLAGSHUDB0
FLAGMULDB0
FLAGCLRDB0
FLAGDENGDB0
SUMDW0
SUM1DB0
SUM2DB0
QIANDB0
BAIDB0
SHIDB0
GEDB0
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,88H;8255初始化10001000
OUT46H,AL;46H,44H,42H,40H分别为8255控制口,PC,PB,PA
XORBH,BH
KEYCHECK:
MOVAL,0F0H
OUT44H,AL
INAL,44H
CMPAL,0F0H
JEDISPLAY
CALLDELAY;去抖动
CMPAL,0F0H
JEDISPLAY
MOVCX,4;循环4次
MOVDH,0FEH
KEYSCAN:
ADDFLAGSHU,1
MOVAL,DH
OUT44H,AL
INAL,44H
MOVAH,AL
ANDAH,0F0H
CMPAH,0F0H
JNEGETKEY
ROLDH,1
LOOPKEYSCAN;键盘逐行扫描
GETKEY:
;获取键盘值
CMPAL,0EEH;第一行
JEL1
CMPAL,0DEH
JEL2
CMPAL,0BEH
JEL3
CMPAL,7EH
JELJIA
CMPAL,0EDH;第二行
JEL4
CMPAL,0DDH
JEL5
CMPAL,0BDH
JEL6
CMPAL,7DH
JELJIAN
CMPAL,0EBH;第三行
JEL7
CMPAL,0DBH
JEL8
CMPAL,0BBH
JEL9
CMPAL,7BH
JELDENG
CMPAL,0E7H;第四行
JEL0
CMPAL,0D7H
JELCHENG
CMPAL,0B7H
JELCHU
JMPLCLR
L1:
;1按下
MOVBH,1
JMPDISPLAY
L2:
;2按下
MOVBH,2
JMPDISPLAY
L3:
;3按下
MOVBH,3
JMPDISPLAYLJIA:
;+按下
MOVBH,0AH
JMPDISPLAY
L4:
;4按下
MOVBH,4
JMPDISPLAY
L5:
;5按下
MOVBH,5
JMPDISPLAY
L6:
;6按下
MOVBH,6
JMPDISPLAY
LJIAN:
;-按下
MOVBH,0BH
JMPDISPLAY
L7:
;7按下
MOVBH,7
JMPDISPLAY
L8:
;8按下
MOVBH,8
JMPDISPLAY
L9:
;9按下
MOVBH,9
JMPDISPLAY
LDENG:
;=按下
MOVBH,0CH
MOVFLAGDENG,1
JMPDISPLAYL0:
;0按下
MOVBH,0
JMPDISPLAY
LCHENG:
;*按下
MOVBH,0DH
MOVFLAGMUL,1
JMPDISPLAY
LCHU:
;/按下
MOVBH,0EH
JMPDISPLAY
LCLR:
;清零C按下
MOVBH,0FH
MOVFLAGCLR,1
JMPDISPLAY
DISPLAY:
CMPBH,0AH
JLDISPLAYSHU
MOVAL,0C0H
OUT40H,AL
MOVAL,0FH
OUT42H,AL
CALLDELAY
MOVFLAGSHU,0
CMPFLAGCLR,1
JECLRFA
CMPFLAGDENG,1
JEDENGFA
CMPFLAGMUL,1
JECHENGFA
JMPKEYCHECK
CHENGFA:
;+按下
MOVAL,SUM1
MOVSUM2,AL
JMPKEYCHECK
CLRFA:
;清零
MOVSUM,0
MOVSUM1,0
MOVSUM2,0
MOVFLAGMUL,0
MOVFLAGDENG,0
MOVFLAGCLR,0
JMPKEYCHECK
DENGFA:
;=按下
MOVBL,SUM2
MOVAL,SUM1
MULBL
MOVSUM2,AX
MOVSUM,AX
MOVFLAGYMUL,0
JMPDISPLAYSUM
DISPLAYSHU:
;输入第一个数显示
CMPFLAGSHU,1
JGDISPLAYSHU
MOVS