4位数加法器设计报告.docx

上传人:b****1 文档编号:15173247 上传时间:2023-07-02 格式:DOCX 页数:22 大小:149.64KB
下载 相关 举报
4位数加法器设计报告.docx_第1页
第1页 / 共22页
4位数加法器设计报告.docx_第2页
第2页 / 共22页
4位数加法器设计报告.docx_第3页
第3页 / 共22页
4位数加法器设计报告.docx_第4页
第4页 / 共22页
4位数加法器设计报告.docx_第5页
第5页 / 共22页
4位数加法器设计报告.docx_第6页
第6页 / 共22页
4位数加法器设计报告.docx_第7页
第7页 / 共22页
4位数加法器设计报告.docx_第8页
第8页 / 共22页
4位数加法器设计报告.docx_第9页
第9页 / 共22页
4位数加法器设计报告.docx_第10页
第10页 / 共22页
4位数加法器设计报告.docx_第11页
第11页 / 共22页
4位数加法器设计报告.docx_第12页
第12页 / 共22页
4位数加法器设计报告.docx_第13页
第13页 / 共22页
4位数加法器设计报告.docx_第14页
第14页 / 共22页
4位数加法器设计报告.docx_第15页
第15页 / 共22页
4位数加法器设计报告.docx_第16页
第16页 / 共22页
4位数加法器设计报告.docx_第17页
第17页 / 共22页
4位数加法器设计报告.docx_第18页
第18页 / 共22页
4位数加法器设计报告.docx_第19页
第19页 / 共22页
4位数加法器设计报告.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

4位数加法器设计报告.docx

《4位数加法器设计报告.docx》由会员分享,可在线阅读,更多相关《4位数加法器设计报告.docx(22页珍藏版)》请在冰点文库上搜索。

4位数加法器设计报告.docx

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

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2