微机原理课件设计简易计算器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

$

二○一一~二○一二学年第一学期

信息科学与工程学院

自动化系

:

课程设计计划书

课程名称:微机原理及应用课程设计

班级:自动化 0901

姓名:王立

学号: 4032 ]

指导教师:孟志华

二○一一年十二月六日

一、课题名称

简易计算器设计

二、课题目的

利用8088和8255设计一个简易计算器,并将其结果显示在LED数码管上。熟悉系统设计的基本步骤,掌握8088与8255的接口设计,掌握通过8255设计键盘扫描技术,掌握通过8255显示七段共阴极数码管设计。加强对8088数据总线,地址总线及接口寻址的理解,加深对8255的端口控制的理解。

三、需求分析

(1)能够实现99以内的加减乘法运算,并显示在2位LED上。

(2)对于减法运算产生的负数,可在LED上显示“-”号,若负量超过9,则显示“E0”。

四、方案选择

方案一:

该方案将LED显示电路直接接在8088的DB上,而键盘则采用8255进行扫描。

(

方案二:

该方案则是将LED 显示电路和键盘扫描电路分别接在两

个不同的8255上,扫描和显示时,选中不同的8255

。 方案三:

该方案则只用一片8255驱动LED 显示和键盘扫描电路。

方案评估:

方案一:LED 显示驱动电路实现起来较简单,但是很浪费系统总线资源,舍弃!

方案二:释放了系统数据总线,但是方案缺乏经济性,因为采用了两片8255,与建设资源节约型社会初衷冲突!舍弃!

方案三:此种方案较为经济,方便,具有模块化的特点(因为将计算和显示电路全部集成在了8255上,应用时,直接挂接8255

即可实现要求!)

&

综上所述:采用方案三!

五、程序流程图

程序总流程图:

判断输入流程图:

六、系统原理图

键盘映射图:

-

注:1、复位电路单独画在旁边,其参数设置符合6MHZ。

2、74HC04反相器由于位置不够,本人自己画了一个小型的

74HC04。

3、IOW,IOR信号线由于采用了最大系统组态,故由8288的

IORC和AIOWC代替。

4、8088的CLK由8284A提供,其电路连接方式参照Datasheet

5、最大系统组态连接方式参照课本。

6、LED与键盘扫描电路的上拉电阻阻值统一采用,保证数码

管有足够亮度。

7、所有芯片的电源和GND均未标出。

8、7段数码管为共阴极连接方式。

9、74LS373和74LS245作为提高总线驱动能力的作用而存在。

10、8259A的INT信号和8088的INTR信号相连,由于纸张大

小问题,用网络标号“INT8259A”表明他们是相连的。

11、CAD图纸见附件。

七、元件清单

八、程序源代码

PAGE 60,132

TITLE C alculator A program to calculate with 8088 and 8255

;--------------------------------------------------------

DISPLAY MACRO ;送至LED显示函数

MOV DX,383H ;控制字寄存器的端口地址(8255)

>

MOV AL,80H ;方式选择字 B

OUT DX,AL

MOV DX,381H ;B端口的地址送DX

MOV AL,HIGH_NUM ;段码送至B端口显示

OUT DX,AL

MOV DX,383H

MOV AL,80H ;方式选择字 B

OUT DX,AL

>

MOV DX,382H ;C端口地址送DX

MOV AL,LOW_NUM ;段码送至C端口显示

OUT DX,AL

JMP Allscan_Key ;显示完成,跳至键盘扫描

ENDM

;--------------------------------------------------------

CALC MACRO ;计算结果并存至HIGH_NUM,LOW_NUM中

DIV TEN ;除10取余和商分别显示

-

MOV DX,AX ;保存计算结果

CBW ;将商AL符号扩展至AX

MOV BX,AX

MOV CL,LED[BX]

MOV HIGH_NUM,CL ;高位段码送至HIGH_NUM(乘结果)

MOV AX,DX

XCHG AH,AL ;交换AH和AL,将余数放在AL准备符号扩展 CBW ;将余数AL符号扩展至AX

MOV BX,AX

MOV CH,LED[BX]

MOV LOW_NUM,CH ;低位段码送至LOW_NUM(乘结果)

ENDM

;--------------------------------------------------------

.MODEL SMALL ;程序大小为SMALL数据段和代码段均小于64KB .STACK 100 ;堆栈大小100个字

.DATA ;数据段

~

KEYTAB DB 0E7H,0D7H,0DBH,0DDH,0B7H,0BBH,0DBH

;键盘编码0~9 * + - =

DB 77H,7BH,7DH,7EH,0BEH,0DEH,0EEH

LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;LED显示字模(共阴极)

OPERAND DB 0 ;用于存放运算符号

TEN DB 10

NUM1 DB 0 ;用于存放第一个计算数

~

NUM2 DB 0 ;用于存放第二个计算数

HIGH_NUM DB 0 ;用于存放结果的高位段码

LOW_NUM DB 0 ;用于存放结果的低位段码

;--------------------------------------------------------

.CODE ;代码段

MAIN PROC FAR ;主程序开始

MOV AX,@data ;将DS指向DATA

MOV DS,AX

{

Allscan_Key:

MOV DX,383H ;控制字寄存器地址的端口地址(8255)

MOV AL,80H ;方式控制字 B

OUT DX,AL

MOV DX,380H ;端口A的地址送DX

XOR AL,AL

OUT DX,AL ;送0,全键盘扫描

MOV DX,383H

#

MOV AL,90H ;方式控制字 B A输入

OUT DX,AL

MOV DX,380H ;端口A

IN AL,DX

相关文档
最新文档