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

上传人:牧羊曲112 文档编号:2764536 上传时间:2023-02-24 格式:DOC 页数:14 大小:542KB
返回 下载 相关 举报
微机原理课件设计简易计算器.doc_第1页
第1页 / 共14页
微机原理课件设计简易计算器.doc_第2页
第2页 / 共14页
微机原理课件设计简易计算器.doc_第3页
第3页 / 共14页
微机原理课件设计简易计算器.doc_第4页
第4页 / 共14页
微机原理课件设计简易计算器.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《微机原理课件设计简易计算器.doc》由会员分享,可在线阅读,更多相关《微机原理课件设计简易计算器.doc(14页珍藏版)》请在三一办公上搜索。

1、精选优质文档-倾情为你奉上二一一二一二学年第 一 学期信息科学与工程学院自动化系课程设计计划书课程名称: 微机原理及应用课程设计 班 级: 自动化 0901 姓 名: 王 立 学 号: 200904134032 指导教师: 孟志华 二一一 年 十二 月 六 日 一、 课题名称简易计算器设计二、 课题目的利用8088和8255设计一个简易计算器,并将其结果显示在LED数码管上。熟悉系统设计的基本步骤,掌握8088与8255的接口设计,掌握通过8255设计键盘扫描技术,掌握通过8255显示七段共阴极数码管设计。加强对8088数据总线,地址总线及接口寻址的理解,加深对8255的端口控制的理解。三、

2、需求分析(1) 能够实现99以内的加减乘法运算,并显示在2位LED上。(2) 对于减法运算产生的负数,可在LED上显示“-”号,若负量超过9,则显示“E0”。四、 方案选择方案一: 该方案将LED显示电路直接接在8088的DB上,而键盘则采用8255进行扫描。方案二: 该方案则是将LED显示电路和键盘扫描电路分别接在两个不同的8255上,扫描和显示时,选中不同的8255。方案三: 该方案则只用一片8255驱动LED显示和键盘扫描电路。 方案评估:方案一:LED显示驱动电路实现起来较简单,但是很浪费系统总线资源,舍弃!方案二:释放了系统数据总线,但是方案缺乏经济性,因为采用了两片8255,与建设

3、资源节约型社会初衷冲突!舍弃!方案三:此种方案较为经济,方便,具有模块化的特点(因为将计算和显示电路全部集成在了8255上,应用时,直接挂接8255即可实现要求!)综上所述:采用方案三!五、 程序流程图程序总流程图:判断输入流程图:六、 系统原理图键盘映射图:789*456+123-0= 键盘编码图:777B7D7EB7BBBDBED7DBDDDEE7EBEDEE 系统原理图:注: 1、复位电路单独画在旁边,其参数设置符合6MHZ。 2、74HC04反相器由于位置不够,本人自己画了一个小型的74HC04。3、IOW,IOR信号线由于采用了最大系统组态,故由8288的IORC和AIOWC代替。4

4、、8088的CLK由8284A提供,其电路连接方式参照Datasheet5、最大系统组态连接方式参照课本。6、LED与键盘扫描电路的上拉电阻阻值统一采用4.7K,保证数码管有足够亮度。7、所有芯片的电源和GND均未标出。8、7段数码管为共阴极连接方式。9、74LS373和74LS245作为提高总线驱动能力的作用而存在。10、8259A的INT信号和8088的INTR信号相连,由于纸张大小问题,用网络标号“INT8259A”表明他们是相连的。 11、CAD图纸见附件。七、 元件清单元件名称参数值数量8088U118255U218284U318288U418259AU5174LS245U6174L

5、S373U7 U8 U9374LS00U10174LS30U11174HC04U12 U13 U14 U154RES2R1R20 4.7K20RES2R21 2001RES2R22 1K1RES1R11DIODED11CAPC11CAPC2 22uF1SW-PBS0S15167-SEG-DPYDS1 DS22CRYSTALY11八、 程序源代码PAGE60,132TITLECalculator A program to calculate with 8088 and 8255;-DISPLAYMACRO;送至LED显示函数MOVDX,383H;控制字寄存器的端口地址(8255)MOVAL,80

6、H;方式选择字 10000000BOUTDX,ALMOVDX,381H;B端口的地址送DXMOVAL,HIGH_NUM;段码送至B端口显示OUTDX,ALMOVDX,383HMOVAL,80H;方式选择字 10000000BOUTDX,ALMOVDX,382H;C端口地址送DXMOVAL,LOW_NUM;段码送至C端口显示OUTDX,ALJMPAllscan_Key;显示完成,跳至键盘扫描ENDM;-CALCMACRO;计算结果并存至HIGH_NUM,LOW_NUM中DIVTEN;除10取余和商分别显示MOVDX,AX;保存计算结果CBW;将商AL符号扩展至AXMOVBX,AXMOVCL,LE

7、DBXMOVHIGH_NUM,CL;高位段码送至HIGH_NUM(乘结果)MOVAX,DXXCHGAH,AL ;交换AH和AL,将余数放在AL准备符号扩展CBW;将余数AL符号扩展至AXMOVBX,AXMOVCH,LEDBXMOVLOW_NUM,CH;低位段码送至LOW_NUM(乘结果)ENDM;-.MODELSMALL;程序大小为SMALL数据段和代码段均小于64KB.STACK100;堆栈大小100个字.DATA;数据段KEYTABDB0E7H,0D7H,0DBH,0DDH,0B7H,0BBH,0DBH;键盘编码09 * + - = DB77H,7BH,7DH,7EH,0BEH,0DEH,

8、0EEHLED DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;LED显示字模(共阴极)OPERANDDB0;用于存放运算符号TENDB10NUM1DB0;用于存放第一个计算数NUM2DB0;用于存放第二个计算数HIGH_NUMDB0;用于存放结果的高位段码LOW_NUMDB0;用于存放结果的低位段码;-.CODE ;代码段MAINPROCFAR;主程序开始MOVAX,data;将DS指向DATAMOVDS,AXAllscan_Key:MOVDX,383H;控制字寄存器地址的端口地址(8255)MOVAL,80H;方式控制字 10000000BOUTDX,A

9、LMOVDX,380H;端口A的地址送DXXORAL,ALOUTDX,AL;送0,全键盘扫描MOVDX,383HMOVAL,90H;方式控制字 10010000B A输入OUTDX,ALMOVDX,380H;端口AINAL,DXANDAL,0FH;屏蔽掉送回来的AL中的高四位CMPAL,0FHJZAllscan_Key;相等说明没有键按下,重新全键盘扫描MOVBX,0MOVAH,7FH;保存扫描设定初量Scan_key:MOVDX,383HMOVAL,80H;方式控制字,A输出OUTDX,ALMOVDX,380H;端口AMOVAL,AH;逐行扫描OUTDX,ALMOVDX,383HMOVAL,

10、90H;A输入OUTDX,ALMOVDX,380H;端口AINAL,DX;读按键状态ANDAL,0FH;取数据的低四位CMPAL,0FHJNEDecodeRORAH,1;向右循环移位,扫描下一行JMPAllscan_KeyDecode:ANDAH,0F0HORAL,AH;AL,AH或操作组合编码CMPAL,KEYTABBX;比较编码JENextINCBXJMPDecodeNext:CMPBX,13;13的偏移量表示编码值为EE,即=JECalc ;检测到=,计算结果CMPBX,10;10的偏移量表示编码值为7E,即*JNSStroe ;比10大,表示按下*或+或-MOVAL,OPERANDCM

11、PAL,0;OPERAND若为0,表示为按下运算符号JNENumber ;OPERAND非0,说明按下过运算符号MOVAL,NUM1MULTEN ;NUM1*10+BLADDAL,BLMOVNUM1,AL ;将第一个运算数保存在NUM1中JMP Allscan_KeyStroe:MOVOPERAND,BL;按下了运算符号并存入OPERAND中JMPAllscan_KeyNumber:MOVAL,NUM2MULTEN;NUM2*10+BLADDAL,BLMOVNUM2,AL;将第二个运算数保存在NUM2中Calc:CMPBL,10JZ_Mul;乘法CMP BL,11JZ_Add;加法CMPBL,

12、12JZ_Sub;减法_Mul:MOVAL,NUM1MULNUM2CMPAL,100;结果超过99,则显示E0JAEOverflowCALC ;将计算结果存至HIGH_NUM,LOW_NUM中DISPLAY;送至LED显示Overflow:MOVHIGH_NUM,79H;79H为E的段码MOVLOW_NUM,3FH;3FH为0的段码JMPAllscan_Key_Add:MOVAL,NUM1ADDAL,NUM2;NUM1+NUM2JAEOverflow;溢出CALC;将计算结果存至HIGH_NUM,LOW_NUM中DISPLAY;送至LED显示_Sub:MOVAL,NUM1SBBAL,NUM2J

13、CNegtive;有借位,说明结果为负数CALC ;将计算结果存至HIGH_NUM,LOW_NUM中DISPLAY;送至LED显示Negtive:CMPAL,-9 ;负量超过9了吗?JSOverflow ;超过了,则溢出,显示E0MOVHIGH_NUM,40H;40H为-的段码NEGAL ;求补CBW ;AL符号扩展至AXMOVBX,AXMOVCL,LEDBXMOVLOW_NUM,CL;低位段码送至LOW_NUMJMPAllscan_Key;-MOVAX,4C00HINT 21HMAINENDPENDMAIN九、 参考文献1 朱定华,微机原理、汇编与接口技术清华大学出版社,2005Page:1

14、63(8088引脚图)、171(最大系统组态连接方式)、176(最大系统组态时的I/O读写时序图)、221(4x4键盘扫描)、264(8255引脚图)、266272(方式0输入输出程序例程)。2 张毅刚,新编MCS-51单片机应用设计(第3版)哈尔滨工业大学出版社,2003Page:26(按键电平复位电路) 3 8088pdf 8255pdf 8088CLK时钟产生电路由8284产生。十、 心得与体会此次的微机原理课程设计从开始的方案设计,方案选择,到原理图的设计,原理图的绘制,再到最后的接口程序编写只用了两天的时间。其中编写手画原理图和编写程序用了一天,上机用Protel画图外加整理报告用了

15、一天。这两天感觉很充实,因为这是我有史以来第一次完全设计一个具有实用性的系统接口电路。在设计的过程当中,以前总是感觉一上来就开始连接电路,但是脑海里的思绪似乎都很乱,没有一条很清晰的线路。于是就静下心来,发现设计一个电路首先需要的是一个方案,于是方案选择的模块就诞生了,并且在思考的过程当中,发现了几种不同的设计方案,当时心里就开心了起来,毕竟都是突然冒出来的点子,比较有成就感,尤其是选择了一个具有模块化的方案三。选择好了方案就开始设计电路的连接:8088与8255的连接,键盘的扫描,LED的接口显示很快就完成了。然后根据画出来的系统连接引脚图,开始了接口的程序设计,我想这应该是重头戏了,我用了

16、一天的时间来做他。之前编写程序的时候也总是不喜欢什么程序流程图之类的东西,感觉拿东西没必要,而且很浪费时间,还不如自己直接写代码来的爽。刚开始感觉没问题,后来就卡了一个输入检测的地方。因为从8255传来的数据可能是第一个运算数,也可能是第二个运算数,还可能是+、-、*之类的运算符号,甚至是“=”号。于是很自然的就开始话条件判断语句开始程序的跳转指令设计。完成之后,乍眼一看才发现原来我写的是流程图。随后根据这个流程图很快就把这个难点给攻破了。经过几经周折,终于把程序编好了,于是就开始上机用Protel画图,让我重拾了当年使用Protel的快感。不过在画到8088的AEN信号时,我卡了壳(之前设计

17、时,以为AEN在8088引脚上,采用的是最小系统组态)。后来一翻书,才发现8088只有在最大系统组态中的8288总线控制器上才有AEN这个信号,于是就忍痛可爱的将辛辛苦苦画的最小系统换成了最大系统,于是就有了8259A。在引出AEN信号之后,工程就差不多完成了,只是在74LS30八输入与非门那里,由于纸张的原因,不得不自己画了一个小型的74HC04反相器才得以解决问题。另外说一句,LED数码管的上拉电阻由于没找到8255的最大灌电流参数,所以选用的4.7K,如果太亮则改用10K,太暗选用1K。到此,整个设计过程就结束了。回首一下自己的整个设计过程,打心眼里说之前的课程设计没这么认真仔细完完全全都是自己弄出来的,因为之前多多少少还是借鉴了网上的东西。从这次的课程设计当中,体验了一把如何设计系统方案,如何分析方案并选择最佳方案;体会到了程序流程图在某些程序设计时的重要性;学会了使用Visio画程序流程图;重温了一次Protel画图的步骤和方法;用Protel自己画元件图的步骤;8088最大系统组态结构;datasheet的查看等知识和技能。总之,学会了多少,自己心里清楚就行。专心-专注-专业

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号