4位数加法器设计报告.docx
- 文档编号:15173247
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:22
- 大小:149.64KB
4位数加法器设计报告.docx
《4位数加法器设计报告.docx》由会员分享,可在线阅读,更多相关《4位数加法器设计报告.docx(22页珍藏版)》请在冰点文库上搜索。
4位数加法器设计报告
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所示:
图2.1矩阵键盘控制电路
2.2、采用LED数码管显示,数码管图如图2.2.1所示:
图2.2.1LED数码管
三、电路基本单元电路设计
本电路的总体的工作框图如下所示:
下图则是加法器电路的原理图:
3.1、主控模块
该设计的核心控制电路是AT89C51单片机。
AT89C51是一种带4K字节FLASH存储器的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
其引脚图以及工作原理如下:
AT89C51芯片模型
3.1.1、主要功能特性
(1)4K字节可编程闪烁存储器。
(2)32个双向I/O口;128×8位内部RAM。
(3)2个16位可编程定时/计数器中断,时钟频率0-24MHz。
(4)可编程串行通道。
(5)5个中断源。
(6)2个读写中断口线。
(7)低功耗的闲置和掉电模式。
3.1.2、AT89C51的引脚介绍
89C51单片机多采用40只引脚的双列直插封装(DIP)方式,下面分别简单介绍。
(1)电源引脚
电源引脚接入单片机的工作电源。
Vcc(40引脚):
+5V电源。
GND(20引脚):
接地。
(2)时钟引脚
XTAL1(19引脚):
片内振荡器反相放大器和时钟发生器电路的输入端。
XTAL2(18引脚):
片内振荡器反相放大器的输出端。
电源接入方式
(3)复位RST(9引脚)
在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引脚时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。
(4)
/Vpp(31引脚)
为外部程序存储器访问允许控制端。
当它为高电平时,单片机读片内程序存储器,在PC值超过0FFFH后将自动转向外部程序存储器。
当它为低电平时,只限定在外部程序存储器,地址为0000H~FFFFH。
Vpp为该引脚的第二功能,为编程电压输入端。
(5)ALE/
(30引脚)
ALE为低八位地址锁存允许信号。
在系统扩展时,ALE的负跳沿江P0口发出的第八位地址锁存在外接的地址锁存器,然后再作为数据端口。
为该引脚的第二功能,在对片外存储器编程时,此引脚为编程脉冲输入端。
(6)
(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所示:
字型
共阳极代码
共阴极代码
字型
共阳极代码
共阴极代码
0
C0H
3FH
9
90H
6FH
1
F9H
06H
A
88H
77H
2
A4H
5BH
B
83H
7CH
3
B0H
4FH
C
C6H
39H
4
99H
66H
D
A1H
5EH
5
92H
6DH
E
86H
79H
6
82H
7DH
F
8EH
71H
7
F8H
07H
灭
FFH
00H
8
80H
7FH
表3.2.1LED数码管十六位进数的字形码
3.2.2显示模块控制电路
四、程序设计
本作品实现的功能全部是由C语言程序编写实现。
通过程序的编写使简单的器件实现丰富的功能。
如下所示是主程序流程图
五、系统调试及结果
本设计应用Proteus6及KEIL51软件,首先根据自己设计的电路图用Proteus6软件画出电路模型,关于这个软件的使用通过查一些资料和自己的摸索学习;然后我们用KEIL51软件对所编写的程序进行编译、链接,如果没有错误和警告便可生成程序的hex文件,将此文件加到电路图上使软硬件结合运行。
下图为运行状况图,首先输入123,再加上100,得223,再减去200,得23,再乘以4,得92,再除以2,得46。
五、设计个人总结
经过一周的努力终于设计成功,LED数码管的显示结果与理想所保持的一样。
在这一周的设计中,完成这个简易的计算器,虽然精度不高,但是对于一般的计算,是绰绰有余。
起初,电路的设计对我们这些人来说,是一大障碍,通过查找资料,发现一个简易的计算器,似乎没有那么难,只要有心,定能成功。
后来数码管的显示一直困扰着我,但随着慢慢地了解它,在相关资料帮助之下,终于明白如何用汇编语言写程序去控制数码管的显示。
加之以前学过一些计算机方面的汇编语言,那并不是针对单片机汇编语言的,虽有相似之处,但差之甚大,如今已经了逐步地了解,相信若坚持下去,定能学好这一门课程。
通过此次设计课程,使我受益匪浅。
终于更深刻地体会到实践是唯一的真理。
附录:
程序清单
YJEQU50H;结果存放
YJ1EQU51H;中间结果存放
GONGEQU52H;功能键存放
ORG00H
START:
MOVR3,#0;初始化显示为空
MOVGONG,#0
MOV31H,#00H
MOV32H,#00H
MOV33H,#00H
MOV34H,#00H
MLOOP:
CALLDISP;调显示子程序
WAIT:
CALLTESTKEY;判断有无按键
JZWAIT
CALLGETKEY;读键
INCR3;按键个数
CJNEA,#0,NEXT1;判断是否数字键
LJMPE1;转数字键处理
NEXT1:
CJNEA,#1,NEXT2
LJMPE1
NEXT2:
CJNEA,#2,NEXT3
LJMPE1
NEXT3:
CJNEA,#3,NEXT4
LJMPE1
NEXT4:
CJNEA,#4,NEXT5
LJMPE1
NEXT5:
CJNEA,#5,NEXT6
LJMPE1
NEXT6:
CJNEA,#6,NEXT7
LJMPE1
NEXT7:
CJNEA,#7,NEXT8
LJMPE1
NEXT8:
CJNEA,#8,NEXT9
LJMPE1
NEXT9:
CJNEA,#9,NEXT10
LJMPE1
NEXT10:
CJNEA,#10,NEXT11;判断是否功能键
LJMPE2;转功能键处理
NEXT11:
CJNEA,#11,NEXT12
LJMPE2
NEXT12:
CJNEA,#12,NEXT13
LJMPE2
NEXT13:
CJNEA,#13,NEXT14
LJMPE2
NEXT14:
CJNEA,#14,NEXT15
LJMPE2
NEXT15:
LJMPE3;判断是否清除键
E1:
CJNER3,#1,N1;判断第几次按键
LJMPE11;为第一个数字
N1:
CJNER3,#2,N2
LJMPE12;为第二个数字
N2:
CJNER3,#3,N3
LJMPE13;为第三个数字
N3:
CJNER3,#4,N4
LJMPE14;为第四个数字
N4:
LJMPE3;第五个数字转溢出
E11:
MOVR4,A;输入值暂存R4
MOV34H,A;输入值送显示缓存
MOV33H,#00H
MOV32H,#00H
MOV31H,#00H
LJMPMLOOP;等待再次输入
E12:
MOVR7,A;个位数暂存R7
MOVB,#10
MOVA,R4
MULAB;十位数
ADDA,R7
MOVR4,A;输入值存R4
MOV31H,#00H
MOV32H,#00H;输入值送显示缓存
MOV33H,34H
MOV34H,R7
LJMPMLOOP
E13:
MOVR7,A
MOVB,#10
MOVA,R4
MULAB
ADDA,R7
MOVR4,A
MOV31H,#00H
MOV32H,33H;输入值送显示缓存
MOV33H,34H
MOV34H,R7
LJMPMLOOP
E14:
MOVR7,A
MOVB,#10
MOVA,R4
MULAB
JBOV,E3
ADDA,R7
JBCY,E3
MOVR4,A
MOV31H,32H;输入值送显示缓存
MOV32H,33H
MOV33H,34H
MOV34H,R7
LJMPMLOOP
E3:
MOVR3,#0;按键次数清零
MOVR4,#0;输入值清零
MOVYJ,#0;计算结果清零
MOVGONG,#0;功能键设为零
MOV31H,#00H;显示清空
MOV32H,#00H
MOV33H,#00H
MOV34H,#00H
LJMPMLOOP
E2:
MOV34H,#00H
MOV33H,#00H
MOV32H,#00H
MOV31H,#00H
MOVR0,GONG;与上次功能键交换
MOVGONG,A
MOVA,R0
CJNEA,#10,N21;判断功能键
LJMPJIA;"+"
N21:
CJNEA,#11,N22
LJMPJIAN;"-"
N22:
CJNEA,#12,N23
LJMPCHENG;"*"
N23:
CJNEA,#13,N24
LJMPCHU;"/"
N24:
CJNEA,#0,N25
LJMPFIRST;首次按功能键
N25:
LJMPDEN;"="
N5:
LJMPE3
FIRST:
MOVYJ,R4;输入值送结果
MOVR3,#0;按键次数清零
LJMPDISP1;结果处理
JIA:
MOVA,YJ;上次结果送累加器
ADDA,R4;上次结果加输入值
JBCY,N5;溢出
MOVYJ,A;存本次结果
MOVR3,#0;按键次数清零
LJMPDISP1
JIAN:
MOVA,YJ
SUBBA,R4;上次结果减输入值
JBCY,N5;负数溢出
MOVYJ,A
MOVR3,#0
LJMPDISP1
CHENG:
MOVA,YJ
MOVB,A
MOVA,R4
MULAB;上次结果乘输入值
JBOV,N5;溢出
MOVYJ,A
LJMPDISP1
CHU:
MOVA,R4
MOVB,A
MOVA,YJ
DIVAB;上次结果除输入值
MOVYJ,A
MOVR3,#0
LJMPDISP1
DEN:
MOVR3,#0
LJMPDISP1
DISP1:
MOVB,#10
MOVA,YJ;结果送累加器
DIVAB;结果除10
MOVYJ1,A;暂存"商"
MOVA,B;取个位数
MOV34H,A;个位数送显示缓存
MOVA,YJ1
JZDISP11;结果是否为一位数
MOVB,#10
MOVA,YJ1
DIVAB
MOVYJ1,A
MOVA,B
MOV33H,A;十位送显示缓存
MOVA,YJ1
JNZDISP11;结果是否为二位数
MOVB,#10
MOVA,YJ1
DIVAB
MOVYJ1,A
MOVA,B
MOV32H,A;百位送显示缓存
MOVA,YJ1
JZDISP11
MOV31H,A;千位数送显示缓存
DISP11:
LJMPMLOOP
DISP:
MOVR0,#34H
DIR1:
MOVDPTR,#SEGTAB
MOVA,@R0
MOVCA,@A+DPTR
MOVP0,A
CJNER0,#34H,DIR2
SETBP2.0
CALLD1MS
CLRP2.0
DECR0
SJMPDIR1
DIR2:
CJNER0,#33H,DIR3
SETBP2.1
CALLD1MS
CLRP2.1
DECR0
SJMPDIR1
DIR3:
CJNER0,#32H,DIR4
SETBP2.2
CALLD1MS
CLRP2.2
DECR0
SJMPDIR1
DIR4:
SETBP2.3
CALLD1MS
CLRP2.3
RET
D1MS:
MOVR7,#02H
DMS:
MOVR6,#0F0H
DJNZR6,$
DJNZR7,DMS
RET
SEGTAB:
DB0C0H,0F9H,0A4H,0B0H
DB99H,92H,82H,0F8H
DB80H,90H,88H,83H
DB0C6H,0A1H,86H,8EH
TESTKEY:
ACALLDISP
MOVP1,#0FH;读入键状态
MOVA,P1
CPLA
ANLA,#0FH;高四位不用
RET
KEYTABLE:
DB0EEH,0EDH,0DDH,0BDH;键码定义
DB0EBH,0DBH,0BBH,0E7H
DB0D7H,0B7H,0DEH,0BEH
DB07EH,07DH,07BH,077H
GETKEY:
MOVR6,#10;读键子程序
ACALLDELAY
MOVP1,#0FH
MOVA,P1
CJNEA,0FH,K12
LJMPMLOOP
K12:
MOVB,A
MOVP1,#0EFH
MOVA,P1
CJNEA,#0EFH,K13
MOVP1,#0DFH
MOVA,P1
CJNEA,#0DFH,K13
MOVP1,#0BFH
MOVA,P1
CJNEA,#0BFH,K13
MOVP1,#07FH
MOVA,P1
CJNEA,#07FH,K13
LJMPMLOOP
K13:
ANLA,#0F0H
ORLA,B
MOVB,A
MOVR1,#16
MOVR2,#0
MOVDPTR,#KEYTABLE
K14:
MOVA,R2
MOVCA,@A+DPTR
CJNEA,B,K16
MOVP1,#0FH
K15:
MOVA,P1
CJNEA,#0FH,K15
MOVR6,#10
ACALLDELAY
MOVA,R2
RET
K16:
INCR2
DJNZR1,K14
AJMPMLOOP;10ms延时子程序
DELAY:
MOVR7,#10
TS1:
MOVR6,#0FFH
TS2:
NOP
NOP
DJNZR6,TS2
DJNZR7,TS1
RET
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 位数 加法器 设计 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)