收藏 分享(赏)

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

上传人:精品资料 文档编号:8824849 上传时间:2019-07-13 格式:DOC 页数:14 大小:169KB
下载 相关 举报
4位数加法器设计报告.doc_第1页
第1页 / 共14页
4位数加法器设计报告.doc_第2页
第2页 / 共14页
4位数加法器设计报告.doc_第3页
第3页 / 共14页
4位数加法器设计报告.doc_第4页
第4页 / 共14页
4位数加法器设计报告.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

1、4位数加法器设计报告一、设计任务和要求1.1、任务描述:1、系统通过 44 的矩阵键盘输入数字及运算符; 2、可以进行 4 位十进制数以内的加法运算,如果计算结果超过 4 位十进制数,则屏幕显示 E; 3、可以进行加法以外的计算(乘、除、减) ; 4、创新功能。1.2、任务要求:1、理解任务书要求,明确分工,查找相关资料,制定系统方案; 2、论证系统设计方案,运用 Proteus 等软件绘制电路原理图; 3、根据硬件电路,确定算法,设计程序框图,编写程序代码; 4、误差分析与改进,完成设计报告。 二、方案论证2.1、适用矩阵键盘控制作为输入电路,电路和软件稍微复杂,但是相比用独立按键,可节省

2、I/O 口,其原理图如 2.1 所示:S2 S3 S4S1S5 S6 S7 S8S9 S10 S11 S12S13 S14 S15 S16图 2.1 矩阵键盘控制电路2.2、采用 LED 数码管显示,数码管图如图 2.2.1 所示:P2.0P2.1P2.2P2.3P2.4P2.5图 2.2.1 LED 数码管一、 电路基本单元电路设计本电路的总体的工作框图如下所示:下图则是加法器电路的原理图:LED 数码管显示矩阵键盘控制电路AT89C51 主控制电路P0.7.6P0.5.4P0.3.2P0.1.P2.0.1P23LEP0.4.3P0.2.1P05P0.6.7P2.0.1P23P2.4.5P2

3、.4.5S2 S3 S4S1S5 S6 S7 S8S9 S10 S1 S12S13 S14 S15 S16XTAL218XTAL119ALE301PSN29RST9P0./AD039.1/18P0.2/AD237.3/36P0.4/AD435.5/54P0.6/AD63.7/72P1.0/T21./EX2P1.23.34P1.45.56P1.67.78P3.0/RXD10.1/TP3.2/IN012./IT13P3.4/014P3.7/RD17.6/W6.5/T15P2.7/A1528P2.0/A821.1/9P2./A023.3/14P2.4/A225.5/136.6/47U1AT89C51

4、D03Q021415D27Q263839D413Q4125455D617Q6167879OE1L U274LS37R11k2k31kR4k51k6kR71k8kX1CRYSTALC11uFVCGNDGNDC230uFC330uFR910k R1010kk210kR3kR1410k5k610k7k3.1、主控模块该设计的核心控制电路是 AT89C52 单片机。A T89C51 是 一 种 带 4K 字节 FLASH 存 储 器 ( FPEROMFlash Programmable and Erasable Read Only Memory) 的 低 电 压 、 高 性 能 CMOS 8 位 微

5、处 理 器 , 俗 称 单 片 机 。AT89C2051 是 一 种 带 2K 字 节 闪 存 可 编 程 可 擦 除 只 读 存 储 器 的 单 片 机 。单 片 机 的 可 擦 除 只 读 存 储 器 可 以 反 复 擦 除 1000 次 。 该 器 件 采 用 ATMEL高 密 度 非 易 失 存 储 器 制 造 技 术 制 造 , 与 工 业 标 准 的 MCS-51 指 令 集 和 输出 管 脚 相 兼 容 。 由 于 将 多 功 能 8 位 CPU 和 闪 烁 存 储 器 组 合 在 单 个 芯 片 中 ,ATMEL 的 AT89C51 是 一 种 高 效 微 控 制 器 , AT

6、89C2051 是 它 的 一 种 精 简版 本 。 AT89C 单 片 机 为 很 多 嵌 入 式 控 制 系 统 提 供 了 一 种 灵 活 性 高 且 价 廉的 方 案 。 其引脚图以及工作原理如下:XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD63P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD1P3.2/INT012P3.3/INT113P3.4

7、/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A92P2.2/A1023P2.3/A1 24P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51AT89C51 芯 片 模 型3.1.1、主要功能特性(1) 4K 字 节 可 编 程 闪 烁 存 储 器 。 (2) 32 个 双 向 I/O 口 ; 1288 位 内 部 RAM 。(3) 2 个 16 位 可 编 程 定 时 /计 数 器 中 断 , 时 钟 频 率 0-24MHz。 (4) 可 编 程 串 行 通 道 。 (5) 5 个 中 断 源 。

8、(6) 2 个 读 写 中 断 口 线 。 (7) 低 功 耗 的 闲 置 和 掉 电 模 式 。(8) 片 内 振 荡 器 和 时 钟 电 路 。3.1.2、AT89C51 的引脚介绍89C51 单 片 机 多 采 用 40 只 引 脚 的 双 列 直 插 封 装 (DIP)方 式 , 下 面 分 别 简 单 介 绍 。(1)电源引脚电源引脚接入单片机的工作电源。Vcc(40 引脚): +5V 电源。GND(20 引脚) :接地。(2)时钟引脚XTAL1(19 引脚):片内振荡器反相放大器和时钟发生器电路的输入端。XTAL2(20 引脚):片内振荡器反相放大器的输出端。电 源 接 入 方 式

9、(3)复 位 RST(9 引 脚 )在 振 荡 器 运 行 时 , 有 两 个 机 器 周 期 ( 24 个 振 荡 周 期 ) 以 上 的 高 电 平出 现 在 此 引 脚 时 , 将 使 单 片 机 复 位 , 只 要 这 个 脚 保 持 高 电 平 , 51 芯 片 便 循环 复 位 。(4)EA/Vpp(31 引脚)为外部程序存储器访问允许控制端。当它为高电平时,单片机读片内程序存储器,在 PC 值超过 0FFFH 后将自动转向外部程序存储器。当它为低电平时,只限定在外部程序存储器,地址为 0000HFFFFH。Vpp 为该引脚的第二功能,为编程电压输入端。(5)ALE/PROG(30

10、 引脚)ALE 为低八位地址锁存允许信号。在系统扩展时,ALE 的负跳沿江 P0口发出的第八位地址锁存在外接的地址锁存器,然后再作为数据端口。PR为该引脚的第二功能,在对片外存储器编程时,此引脚为编程脉冲输入端。(6) SEN(29 引脚)片外程序存储器的读选通信号。在单片机读片外程序存储器时,此引脚输出脉冲的负跳沿作为读片外程序存储器的选通信号。(7) pin39-pin32 为 P0.0-P0.7 输入输出脚,称为 P0 口。P0 是一个 8 位漏极开路型双向 I/O 口。内部不带上拉电阻,当外接上拉电阻时,P0 口能以吸收电流的方式驱动八个 LSTTL 负载电路。通常在使用时外接上拉电阻

11、,用来驱动多个数码管。 在访问外部程序和外部数据存储器时,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 位地址和控制信息。

12、在访问外部程序和 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 数码管十六位进数的字形

13、码如表 3.2.1所示,而显示模块控制电路如 3.2.2 所示:字型共阳极代码共阴极代码字型共阳极代码共阴极代码0 C0H 3FH 9 90H 6FH1 F9H 06H A 88H 77H2 A4H 5BH B 83H 7CH3 B0H 4FH C C6H 39H4 99H 66H D A1H 5EH5 92H 6DH E 86H 79H6 82H 7DH F 8EH 71H7 F8H 07H 灭 FFH 00H8 80H 7FH表 3.2.1 LED 数码管十六位进数的字形码P0.7.6P0.5.4P0.3.2P0.1.P2.0.1P23LEP2.4.5P2.0P2.1P2.P2.3P2.4

14、P2.5XTAL218XTAL119ALE30E1PSN29RST9P0.0/AD039.1/ 1 8P0.2/AD237.3/ 3 6P0.4/AD435.5/ 54P0.6/AD63.7/ 7 2P1.0/T21 .1/EX2P1.23 .34P1.45 .56P1.67 .78P3.0/RXD10.1/TP3.2/IN012.3/IT1 3P.4/014P3.7/RD17.6/W63.5/T1 5P2.7/A1528P2.0/A821.1/9P2.2/A1023.3/ 4P2.4/A1225.5/36.6/4 7U1AT89C52R11k21kR31k41kR51k61kR71k81kX

15、1CRYSTALC11uFVCGNDC230uFC330uFR910k R1010k10k210kR3kR1410k5kR610k7k图 3.2.2 显示模块控制电路3.3、操作模块该操作模块的实际操作如下图所示:图 3.3.1 矩阵键盘实际操作图四、程序设计本作品实现的功能全部是由 C 语言程序编写实现。通过程序的编写使简单的器件实现丰富的功能。如下所示是主程序流程图05142 36=7CX98/*-+主程序流程图五、系统调试及结果本设计应用 Proteus6 及 KEIL51 软件,首先根据自己设计的电路图用 Proteus6软件画出电路模型,关于这个软件的使用通过查一些资料和自己的摸索学

16、习;然后我们用 KEIL51 软件对所编写的程序进行编译、链接,如果没有错误和警告便 可生成程序的 hex 文件,将此文件加到电路图上使软硬件结合运行。下图为运行 状况图,为首先输入 10+990,再加上 9999,最后每个数码管上为 E,因为为了满足实验要求,当结果超过了 9999 后显示 E.显示程序程序初始化开始按键扫描程序结束刚开始为 0输入 10再加上 990 得到了 1000最后显示 E五、设计个人总结经过一周的努力终于设计成功,LED 数码管的显示结果与理想所保持的一样。在这一周的设计中,完成这个简易的计算器,虽然精度不高,但是对于一般的计算,是绰绰有余。起初,电路的设计对我们这

17、些人来说,是一大障碍,通过查找资料,发现一个简易的计算器,似乎没有那么难,只要有心,定能成功。后来数码管的显示一直困扰着我,但随着慢慢地了解它,在相关资料帮助之下,终于明白如何用 C 语言写程序去控制数码管的显示。加之以前学过一些计算机方面的 C 语言,那并不是针对单片机 C 语言的,虽有相似之处,但差之甚大,如今已经了逐步地了解,相信若坚持下去,定能学好这一门课程。通过此次设计课程,使我受益匪浅。终于更深刻地体会到实践是唯一的真理。附录 ( 程序 ):/*通过用单片机 MCU 与矩阵及数码管的相互连接构成一个简易的数计算器-可以进行加减乘除*/#include #define uchar u

18、nsigned charlong First,End; /定义全局变量/此表为 LED 的字模, 共阴数码管 0-9 - unsigned char code Disp_Tab = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; /段码控制/此表为 8 个数码管位选控制, 共阴数码管 1-8 个 - unsigned char code dispbit6=0xfe,0xfd,0xfb,0xf7,0xef,0xdf; /位选控制 查表的方法控制void delay(int n) /*

19、延时程序*/int i,j;for(i=0;i=y) z=x-y;elsez=y-x;z=z+100000; /*最高位用 1 表示负数*/return(z);long mul(long x,long y) /*乘法程序*/long z;z=x*y;return(z);long div(long x,long y) /*除法程序*/long z;z=x/y;return(z);uchar kbscan(void) /*键盘扫描程序*/uchar sccode;P0=0xf0;if(P0 /延时去抖if(P0 /逐行扫描初值while(sccode /输出行扫描码if(P0 /如果检测到有键按下

20、,返回键值elsesccode=(sccode=0;i-) P2=dispbiti; /位选输出P1=Disp_Tabnumi; /数据输出delay(2); /此延时必不可少? void main(void) /*主程序*/ int k,n;uchar f,g,key,gn1,i;n=0;f=0;/P1=0; /初始时指示灯灭 while(1) /不断查询是否有按键动作 key=kbscan(); /获取返回键值if(key!=0)switch(key) /译码,将对应按键返回值转换为相应数值 case 0xee: k=0;break;/0case 0xde: k=1;break;/1cas

21、e 0xbe: k=2;break;/2case 0x7e: k=3;break;/3case 0xed: k=4;break;/4case 0xdd: k=5;break;/5case 0xbd: k=6;break;/6case 0x7d: k=7;break;/7case 0xeb: k=8;break;/8case 0xdb: k=9;break;/9case 0xbb: k=10;First=0;End=0;f=0;break;/清除case 0x7b: k=11;break;/等于case 0xe7: k=12;f=1;break;/加case 0xd7: k=13;f=2;bre

22、ak;/减 case 0xb7: k=14;f=3;break;/乘case 0x77: k=15;f=4;break;/除/P1=1;delay(280); /有按键时,指示灯的显示时间/P1=0; /按键指示灭if(k1) /输入为多位数时,将它转化为 10进制的多位数First=First*10+k; else /如果没有功能键按下n+;gn1=1; /定义标志,当下一次为功能键时,停止数据输入if(n=1)First=k;else if(n1)First=First*10+k;End=First; /将第一个数保存else if(k11) /为功能键时(+-*/) if(gn1=1)

23、/前一次数字键之后为功能键时n=0; /清除计数标志 else /如果再次输入功能键,则进行运算n=0; /清除计数标志switch(g)case 1: First=add(End,First);break;case 2: First=sub(End,First);break;case 3: First=mul(End,First);break;case 4: First=div(End,First);break;End=First; /保存本次结果else if(k=11) /为等于号时(=)n=0;gn1=1; /接着输入为功能键时可以继续运算switch(g)case 1: First=

24、add(End,First);break;case 2: First=sub(End,First);break;case 3: First=mul(End,First);break;case 4: First=div(End,First);break;End=First; /保存最终运算结果 f=0; /清除运算标志if(End9999) /*当结果大于 9999 时,显示 E*/ P1=0XF9; /显示 Efor(i=5;i=0;i-) P2=dispbiti; /位选输出/P1=Disp_Tabnumi; /数据输出delay(1); /此延时必不可少? display(); /调用显示程序

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报