4位数加法器设计报告一、设计任务和要求1.1、任务描述:1、系统通过4×4的矩阵键盘输入数字及运算符;2、可以进行4位十进制数以内的加法运算,如果计算结果超过4位十进制数,则屏幕显示E;3、可以进行加法以外的计算(乘、除、减);4、创新功能。1.2、任务要求:1、理解任务书要求,明确分工,查找相关资料,制定系统方案;2、论证系统设计方案,运用Proteus等软件绘制电路原理图;3、根据硬件电路,确定算法,设计程序框图,编写程序代码;4、误差分析与改进,完成设计报告。二、方案论证2.1、适用矩阵键盘控制作为输入电路,电路和软件稍微复杂,但是相比用独立按键,可节省I/O口,其原理图如2.1所示:S2S3S4S1S5S6S7S8S9S10S11S12S13S14S15S16图2.1矩阵键盘控制电路2.2、采用LED数码管显示,数码管图如图2.2.1所示:P2.0P2.1P2.2P2.3P2.4P2.5图2.2.1LED数码管一、电路基本单元电路设计本电路的总体的工作框图如下所示:下图则是加法器电路的原理图:LED数码管显示矩阵键盘控制电路AT89C51主控制电路P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0P2.0P2.1P2.2P2.3LEP0.4P0.3P0.2P0.1P0.0P0.5P0.6P0.7P2.0P2.1P2.2P2.3P2.4P2.5P2.4P2.5S2S3S4S1S5S6S7S8S9S10S11S12S13S14S15S16XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.0/T21P1.1/T2EX2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51D03Q02D14Q15D27Q26D38Q39D413Q412D514Q515D617Q616D718Q719OE1LE11U274LS373R11kR21kR31kR41kR51kR61kR71kR81kX1CRYSTALC11uFVCCGNDGNDC230uFC330uFR910kR1010kR1110kR1210kR1310kR1410kR1510kR1610kR1710k3.1、主控模块该设计的核心控制电路是AT89C52单片机。AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。其引脚图以及工作原理如下:XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51AT89C51芯片模型3.1.1、主要功能特性(1)4K字节可编程闪烁存储器。(2)32个双向I/O口;128×8位内部RAM。(3)2个16位可编程定时/计数器中断,时钟频率0-24MHz。(4)可编程串行通道。(5)5个中断源。(6)2个读写中断口线。(7)低功耗的闲置和掉电模式。(8)片内振荡器和时钟电路。3.1.2、AT89C51的引脚介绍89C51单片机多采用40只引脚的双列直插封装(DIP)方式,下面分别简单介绍。(1)电源引脚电源引脚接入单片机的工作电源。Vcc(40引脚):+5V电源。GND(20引脚):接地。(2)时钟引脚XTAL1(19引脚):片内振荡器反相放大器和时钟发生器电路的输入端。XTAL2(20引脚):片内振荡器反相放大器的输出端。电源接入方式(3)复位RST(9引脚)在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引脚时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。(4)EA/Vpp(31引脚)EA为外部程序存储器访问允许控制端。当它为高电平时,单片机读片内程序存储器,在PC值超过0FFFH后将自动转向外部程序存储器。当它为低电平时,只限定在外部程序存储器,地址为0000H~FFFFH。Vpp为该引脚的第二功能,为编程电压输入端。(5)ALE/PROG(30引脚)ALE为低八位地址锁存允许信号。在系统扩展时,ALE的负跳沿江P0口发出的第八位地址锁存在外接的地址锁存器,然后再作为数据端口。PROG为该引脚的第二功能,在对片外存储器编程时,此引脚为编程脉冲输入端。(6)PSEN(29引脚)片外程序存储器的读选通信号。在单片机读片外程序存储器时,此引脚输出脉冲的负跳沿作为读片外程序存储器的选通信号。(7)pin39-pin32为P0.0-P0.7输入输出脚,称为P0口。P0是一个8位漏极开路型双向I/O口。内部不带上拉电阻,当外接上拉电阻时,P0口能以吸收电流的方式驱动八个LSTTL负载电路。通常在使用时外接上拉电阻,用来驱动多个数码管。在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,不需要外接上拉电阻。(8)Pin1-Pin8为P1.0-P1.7输入输出脚,称为P1口,是一个带内部上拉电阻的8位双向I/0口。P1口能驱动4个LSTTL负载。(9)Pin21-Pin28为P2.0-P2.7输入输出脚,称为P2口。P2口是一个带内部上拉电阻的8位双向I/O口,P2口能驱动4个LSTTL负载。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存储器编程时,接收高8位地址和控制信息。在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。(10)Pin10-Pin17为P3.0-P3.7输入输出脚,称为P3口。P3口是一个带内部上拉电阻的8位双向I/O口,P2口能驱动4个LSTTL负载,这8个引脚还用于专门的第二功能。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存储器编程时,接控制信息。3.2、显示模块该电路的显示模块采用共阴极数码管显示。共阴极数码管的位选采用低电平,而段选采用高电平控制。LED数码管十六位进数的字形码如表3.2.1所示,而显示模块控制电路如3.2.2所示:字型共阳极代码共阴极代码字型共阳极代码共阴极代码0C0H3FH990H6FH1F9H06HA88H77H2A4H5BHB83H7CH3B0H4FHCC6H39H499H66HDA1H5EH592H6DHE86H79H682H7DHF8EH71H7F8H07H灭FFH00H880H7FH表3.2.1LED数码管十六位进数的字形码P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0P2.0P2.1P2.2P2.3LEP2.4P2.5P2.0P2.1P2.2P2.3P2.4P2.5XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.0/T21P1.1/T2EX2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C52R11kR21kR31kR41kR51kR61kR71kR81kX1CRYSTALC11uFVCCGNDC230uFC330uFR910kR1010kR1110kR1210kR1310kR1410kR1510kR1610kR1710k图3.2.2显示模块控制电路3.3、操作模块该操作模块的实际操作如下图所示:图3.3.1矩阵键盘实际操作图四、程序设计本作品实现的功能全部是由C语言程序编写实现。通过程序的编写使简单的器件实现丰富的功能。如下所示是主程序流程图0514236=7CX98/*-+主程序流程图五、系统调试及结果本设计应用Proteus6及KEIL51软件,首先根据自己设计的电路图用Proteus6软件画出电路模型,关于这个软件的使用通过查一些资料和自己的摸索学习;然后我们用KEIL51软件对所编写的程序进行编译、链接,如果没有错误和警告便可生成程序的hex文件,将此文件加到电路图上使软硬件结合运行。下图为运行状况图,为首先输入10+990,再加上9999,最后每个数码管上为E,因为为了满足实验要求,当结果超过了9999后显示E.显示程序程序初始化开始按键扫描程序结束刚开始为0输入10再加上990得到了1000最后显示E五、设计个人总结经过一周的努力终于设计成功,LED数码管的显示结果与理想所保持的一样。在这一周的设计中,完成这个简易的计算器,虽然精度不高,但是对于一般的计算,是绰绰有余。起初,电路的设计对我们这些人来说,是一大障碍,通过查找资料,发现一个简易的计算器,似乎没有那么难,只要有心,定能成功。后来数码管的显示一直困扰着我,但随着慢慢地了解它,在相关资料帮助之下,终于明白如何用C语言写程序去控制数码管的显示。加之以前学过一些计算机方面的C语言,那并不是针对单片机C语言的,虽有相似之处,但差之甚大,如今已经了逐步地了解,相信若坚持下去,定能学好这一门课程。通过此次设计课程,使我受益匪浅。终于更深刻地体会到实践是唯一的真理。附录(程序):/**********通过用单片机MCU与矩阵及数码管的相互连接构成一个简易的数计算器--------可以进行加减乘除********/#includereg51.h#defineucharunsignedcharlongFirst,End;//定义全局变量//此表为LED的字模,共阴数码管0-9-unsignedcharcodeDisp_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//段码控制//此表为8个数码管位选控制,共阴数码管1-8个-unsignedcharcodedispbit[6]={0xfe,0xfd,0xfb,0xf7,0xef,0x