当前位置:文档之家› 微机原理课件设计简易计算器

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

$二○一一~二○一二学年第一学期信息科学与工程学院自动化系:课程设计计划书课程名称:微机原理及应用课程设计班级:自动化 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提供,其电路连接方式参照Datasheet5、最大系统组态连接方式参照课本。

】6、LED与键盘扫描电路的上拉电阻阻值统一采用,保证数码管有足够亮度。

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

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

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

10、8259A的INT信号和8088的INTR信号相连,由于纸张大小问题,用网络标号“INT8259A”表明他们是相连的。

11、CAD图纸见附件。

、七、元件清单八、程序源代码PAGE 60,132TITLE C alculator A program to calculate with 8088 and 8255;--------------------------------------------------------DISPLAY MACRO ;送至LED显示函数MOV DX,383H ;控制字寄存器的端口地址(8255)>MOV AL,80H ;方式选择字 BOUT DX,ALMOV DX,381H ;B端口的地址送DXMOV AL,HIGH_NUM ;段码送至B端口显示OUT DX,ALMOV DX,383HMOV AL,80H ;方式选择字 BOUT DX,AL>MOV DX,382H ;C端口地址送DXMOV AL,LOW_NUM ;段码送至C端口显示OUT DX,ALJMP Allscan_Key ;显示完成,跳至键盘扫描ENDM;--------------------------------------------------------CALC MACRO ;计算结果并存至HIGH_NUM,LOW_NUM中DIV TEN ;除10取余和商分别显示-MOV DX,AX ;保存计算结果CBW ;将商AL符号扩展至AXMOV BX,AXMOV CL,LED[BX]MOV HIGH_NUM,CL ;高位段码送至HIGH_NUM(乘结果)MOV AX,DXXCHG AH,AL ;交换AH和AL,将余数放在AL准备符号扩展 CBW ;将余数AL符号扩展至AX】MOV BX,AXMOV 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,0EEHLED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;LED显示字模(共阴极)OPERAND DB 0 ;用于存放运算符号TEN DB 10NUM1 DB 0 ;用于存放第一个计算数~NUM2 DB 0 ;用于存放第二个计算数HIGH_NUM DB 0 ;用于存放结果的高位段码LOW_NUM DB 0 ;用于存放结果的低位段码;--------------------------------------------------------.CODE ;代码段MAIN PROC FAR ;主程序开始MOV AX,@data ;将DS指向DATAMOV DS,AX{Allscan_Key:MOV DX,383H ;控制字寄存器地址的端口地址(8255)MOV AL,80H ;方式控制字 BOUT DX,ALMOV DX,380H ;端口A的地址送DXXOR AL,ALOUT DX,AL ;送0,全键盘扫描MOV DX,383H#MOV AL,90H ;方式控制字 B A输入OUT DX,ALMOV DX,380H ;端口AIN AL,DXAND AL,0FH ;屏蔽掉送回来的AL中的高四位CMP AL,0FHJZ Allscan_Key ;相等说明没有键按下,重新全键盘扫描 MOV BX,0!MOV AH,7FH ;保存扫描设定初量Scan_key:MOV DX,383HMOV AL,80H ;方式控制字,A输出OUT DX,ALMOV DX,380H ;端口AMOV AL,AH ;逐行扫描OUT DX,AL。

MOV DX,383HMOV AL,90H ;A输入OUT DX,ALMOV DX,380H ;端口AIN AL,DX ;读按键状态AND AL,0FH ;取数据的低四位CMP AL,0FHJNE Decode/ROR AH,1 ;向右循环移位,扫描下一行JMP Allscan_KeyDecode:AND AH,0F0HOR AL,AH ;AL,AH或操作组合编码CMP AL,KEYTAB[BX] ;比较编码JE NextINC BX]JMP DecodeNext:CMP BX,13 ;13的偏移量表示编码值为EE,即"="JE Calc ;检测到"=",计算结果CMP BX,10 ;10的偏移量表示编码值为7E,即"*"JNS Stroe ;比10大,表示按下"*"或"+"或"-"MOV AL,OPERANDCMP AL,0 ;OPERAND若为0,表示为按下运算符号-JNE Number ;OPERAND非0,说明按下过运算符号 MOV AL,NUM1MUL TEN ;NUM1*10+BLADD AL,BLMOV NUM1,AL ;将第一个运算数保存在NUM1中JMP Allscan_KeyStroe:MOV OPERAND,BL ;按下了运算符号并存入OPERAND中]JMP Allscan_KeyNumber:MOV AL,NUM2MUL TEN ;NUM2*10+BLADD AL,BLMOV NUM2,AL ;将第二个运算数保存在NUM2中Calc:CMP BL,10;JZ _Mul ;乘法CMP BL,11JZ _Add ;加法CMP BL,12JZ _Sub ;减法_Mul:MOV AL,NUM1MUL NUM2`CMP AL,100 ;结果超过99,则显示"E0"JAE OverflowCALC ;将计算结果存至HIGH_NUM,LOW_NUM中 DISPLAY ;送至LED显示Overflow:MOV HIGH_NUM,79H ;79H为"E"的段码MOV LOW_NUM,3FH ;3FH为"0"的段码JMP Allscan_Key:_Add:MOV AL,NUM1ADD AL,NUM2 ;NUM1+NUM2JAE Overflow ;溢出CALC ;将计算结果存至HIGH_NUM,LOW_NUM中DISPLAY ;送至LED显示_Sub:MOV AL,NUM1SBB AL,NUM2JC Negtive ;有借位,说明结果为负数CALC ;将计算结果存至HIGH_NUM,LOW_NUM中DISPLAY ;送至LED显示Negtive:CMP AL,-9 ;负量超过9了吗JS Overflow ;超过了,则溢出,显示"E0"MOV HIGH_NUM,40H ;40H为"-"的段码NEG AL ;求补CBW ;AL符号扩展至AXMOV BX,AXMOV CL,LED[BX]MOV LOW_NUM,CL ;低位段码送至LOW_NUMJMP Allscan_Key;--------------------------------------------------------MOV AX,4C00HINT 21HMAIN ENDPEND MAIN九、参考文献[1] 朱定华,《微机原理、汇编与接口技术》清华大学出版社,2005Page:163(8088引脚图)、171(最大系统组态连接方式)、176(最大系统组态时的I/O读写时序图)、221(4x4键盘扫描)、264(8255引脚图)、266~272(方式0输入输出程序例程)。

[2] 张毅刚,《新编MCS-51单片机应用设计(第3版)》哈尔滨工业大学出版社,2003Page:26(按键电平复位电路)[3] 8088pdf 8255pdf8088CLK时钟产生电路由8284产生。

十、心得与体会此次的微机原理课程设计从开始的方案设计,方案选择,到原理图的设计,原理图的绘制,再到最后的接口程序编写只用了两天的时间。

相关主题