二○一一~二○一二学年第一学期信息科学与工程学院自动化系课程设计计划书课程名称:微机原理及应用课程设计班级:自动化0901姓名:王立学号:200904134032指导教师:孟志华二○一一年十二月六日一、课题名称简易计算器设计二、课题目的利用8088和8255设计一个简易计算器,并将其结果显示在LED数码管上。熟悉系统设计的基本步骤,掌握8088与8255的接口设计,掌握通过8255设计键盘扫描技术,掌握通过8255显示七段共阴极数码管设计。加强对8088数据总线,地址总线及接口寻址的理解,加深对8255的端口控制的理解。三、需求分析(1)能够实现99以内的加减乘法运算,并显示在2位LED上。(2)对于减法运算产生的负数,可在LED上显示“-”号,若负量超过9,则显示“E0”。四、方案选择方案一:80888255LED键盘该方案将LED显示电路直接接在8088的DB上,而键盘则采用8255进行扫描。方案二:80888255LED键盘8255该方案则是将LED显示电路和键盘扫描电路分别接在两个不同的8255上,扫描和显示时,选中不同的8255。方案三:80888255LED键盘该方案则只用一片8255驱动LED显示和键盘扫描电路。方案评估:方案一:LED显示驱动电路实现起来较简单,但是很浪费系统总线资源,舍弃!方案二:释放了系统数据总线,但是方案缺乏经济性,因为采用了两片8255,与建设资源节约型社会初衷冲突!舍弃!方案三:此种方案较为经济,方便,具有模块化的特点(因为将计算和显示电路全部集成在了8255上,应用时,直接挂接8255即可实现要求!)综上所述:采用方案三!五、程序流程图程序总流程图:开始利用8255扫描键盘有按键?逐行扫描哪个键被按下结果回送8088并计算高低位数码分别送B、C口LED显示结束有断电无判断输入流程图:开始是否是“=”是否是运算符号否operand是否有符号否NUM1*10+BL→NUM1无NUM2*10+BL→BUM2有BL→operand是NUM1与NUM2运算,送到LED显示是跳转至Allscan_Key六、系统原理图键盘映射图:789*456+123-0=键盘编码图:777B7D7EB7BBBDBED7DBDDDEE7EBEDEE系统原理图:123456ABCD654321DCBATitleNumberRevisionSizeBDate:14-Dec-2011SheetofFile:F:\我的文档\学校资料\课程资源\微机原理\简易计算器\Protel\MyDesign.ddbDrawnBy:AD016A88AD115A97AD214A106AD313A115AD412A124AD511A133AD610A142AD79A1539A16/S338NMI17A17/S437INTR18A18/S536A19/S635RD32S0/DEN26WR/LOC29S1DT/R27HOLD31S2IO/M28HLDA30ALEQS025MN/MX33INAQS124SSO34TEST23CLK19READY22RESET21U18088INT8259A/AENINT8259A王立200904134032简易计算机系统原理图D034D133D232D331D430D529D628D727PA04PA13PA22PA31PA440PA539PA638PA737PB018PB119PB220PB321PB422PB523PB624PB725PC014PC115PC216PC317PC413PC512PC611PC710RD5WR36A09A18RESET35CS6U28255ARESETS7SW-PBS8SW-PBS9SW-PBS10SW-PBS4SW-PBS5SW-PBS6SW-PBS11SW-PBS1SW-PBS2SW-PBS3SW-PBS12SW-PBS17SW-PBS0SW-PBS15SW-PBR221KS14SW-PBR21200S13SW-PBC222uFVCCVCCR14.7KRESETR24.7KRESETR34.7KR44.7KU1474HC04U1574HC04U1374HC04U1274HC04456U10B74LS00A18OC1C111D31Q22D42Q53D73Q64D84Q95D135Q126D146Q157D177Q168D188Q19U874LS373AD6A19AD1D5R64.7KA14AD2AD2R184.7KA13A16R154.7KA11R134.7KAD3C1CAPabfcgdeDPY1234567abcdefg8dpdpDS17SEG_DPYAD7AD0~AD7AD4AD0D2AD0R174.7KVCCA10AD4AD4VCCAD4AD6AENBRDAD6R104.7KA8D6A17A8A15D0~D7A16AD1AD0A9D1R84.7KD1A9A14AD6AD1AD2AD5D0G19DIR1A12B118A23B217A34B316A45B415A56B514A67B613A78B712A89B811U674LS245R204.7KAD1AD0A18A11A16~A19AD4S019MRDC7S13MWTC9S218AMWC8IORC13IOWC11AIOWC12INTA14IOB1CEN15DT/R4AEN6DEN16MCEPDE17CLK2ALE5U48288R54.7KA16A9R114.7KA12AD7AD7AD7D4A10R1RES1AD512345611128U1174LS30D7D1DIODEAD0AD1D4AD1AD2D6AD3A19~A9D3A13R124.7KA19A10D011D110D29D38D47D56D65D74A027CS1RD3WR2SP/EN16INT17INTA26IR018IR119IR220IR321IR422IR523IR624IR725CAS012CAS113CAS215U58259AA12A17AD6AD2R194.7KA11AD3OC1C111D31Q22D42Q53D73Q64D84Q95D135Q126D146Q157D177Q168D188Q19U774LS373D3AD5D2AD0D7A8A17A19AD0~AD7OC1C111D31Q22D42Q53D73Q64D84Q95D135Q126D146Q157D177Q168D188Q19U974LS373A15A18D5R94.7KA12A13AD5R74.7KAD5123U10A74LS00AD3A8~A15AD3F/C13READY5EFI14CLK8CSYNC1PCLK2ASYNC15OSC12RESET10X117X216RDY14RDY26AEN13RES11AEN27U38284A14R164.7KAD7R144.7KA15Y1CRYSTALD0abfcgdeDPY1234567abcdefg8dpdpDS27SEG_DPY注:1、复位电路单独画在旁边,其参数设置符合6MHZ。2、74HC04反相器由于位置不够,本人自己画了一个小型的74HC04。3、IOW,IOR信号线由于采用了最大系统组态,故由8288的IORC和AIOWC代替。4、8088的CLK由8284A提供,其电路连接方式参照Datasheet5、最大系统组态连接方式参照课本。6、LED与键盘扫描电路的上拉电阻阻值统一采用4.7K,保证数码管有足够亮度。7、所有芯片的电源和GND均未标出。8、7段数码管为共阴极连接方式。9、74LS373和74LS245作为提高总线驱动能力的作用而存在。10、8259A的INT信号和8088的INTR信号相连,由于纸张大小问题,用网络标号“INT8259A”表明他们是相连的。11、CAD图纸见附件。七、元件清单元件名称参数值数量8088U118255U218284U318288U418259AU5174LS245U6174LS373U7U8U9374LS00U10174LS30U11174HC04U12U13U14U154RES2R1~R204.7K20RES2R212001RES2R221K1RES1R11DIODED11CAPC11CAPC222uF1SW-PBS0~S15167-SEG-DPYDS1DS22CRYSTALY11八、程序源代码PAGE60,132TITLECalculatorAprogramtocalculatewith8088and8255;--------------------------------------------------------DISPLAYMACRO;送至LED显示函数MOVDX,383H;控制字寄存器的端口地址(8255)MOVAL,80H;方式选择字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,LED[BX]MOVHIGH_NUM,CL;高位段码送至HIGH_NUM(乘结果)MOVAX,DXXCHGAH,AL;交换AH和AL,将余数放在AL准备符号扩展CBW;将余数AL符号扩展至AXMOVBX,AXMOVCH,LED[BX]MOVLOW_NUM,CH;低位段码送至LOW_NUM(乘结果)ENDM;--------------------------------------------------------.MODELSMALL;程序大小为SMALL数据段和代码段均小于64KB.STACK100;堆栈大小100个字.DATA;数据段KEYTABDB0E7H,0D7H,0DBH,0DDH,0B7H,0BBH,0DBH;键盘编码0~9*+-=DB77H,7BH,7DH,7EH,0BEH,0DEH,0EEHLEDDB3FH,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,ALMOVDX,380H;端口A的地址送DXXORAL,ALOUTDX,AL;送0,全键盘扫描MOVDX,383HMOVAL,90H;方式控制字10010000BA输入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