微机原理课件设计简易计算器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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