1 / 20
文档名称:

计算器实验报告.doc

格式:doc   大小:188KB   页数:20页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

计算器实验报告.doc

上传人:蓝天 2021/7/24 文件大小:188 KB

下载得到文件列表

计算器实验报告.doc

文档介绍

文档介绍:计算器实验报告
一,实验目的
1、 学****按键扫描及LED数码管显示的设计方法。
2、 设计任务及要求利用实验平台上8个LED数码管,设计可以通过键盘输入,并能显 示输入相对应的数字、能够进行加,减,乘,除准确的基本运算、能够进行3位或3位的以上 的乘,除运算.
二,实验要求
基本要求:
1、 可以通过键盘输入,并能显示输入相对应的数字.
2、 能够进行加,减,乘,除准确的基本运算、
3、 能够进行3位或3位的以上的乘,除运算.
三,实验基本原理
利用单片机实现简单计算器的加减乘除,通过键盘输入数据并在数码管上显示出数据, 然后按下加减乘除任意一个键,再输入第二个数并显示,再按下等于号时,执行第一次输入 的数与第二个数的加减乘除函数,并显示出最终结果。
四,实验设计分析
针对要实现的功能,采用AT89S52单片机进行设计,AT89S52单片机是一款低功耗,高 性能CM0S8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash只读程序存 储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS- 51指令系统及80C51引脚结 构。这样,既能做到经济合理又能实现预期的功能。
在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便 于添加各项功能。程序可分为按键扫描、数码管显示输入数据、加减乘除函数,延时程序等。 运用这种方法,关键在于各模块的兼容和配合,若各模块不匹配会出现意想不到的错误。
首先,在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、存储单元 的用法,否则,编程无从下手,电路也无法设计。这是前期准备工作。第二部分是硬件部分: 依据想要的功能分块设计设计,比如输入需要键盘扫描,输出需要显示驱动电路和数码管电 路等。第三部分是软件部分:先学****理解汇编语言的编程方法再根据设计的硬件电路进行分 块的编程调试,最终完成程序设计。第四部分是软件画图部分:设计好电路后进行画图,包 括电路图和仿真图的绘制。第五部分是软件仿真部分:软硬件设计好后将软件载入芯片中进 行仿真,仿真无法完成时检查软件程序和硬件电路并进行修改直到仿真成功。第六部分是硬
件实现部分:连接电路并导入程序检查电路,若与设计的完全一样一般能实现想要的功能。 最后进行功能扩展,在已经正确的设计基础上,添加额外的功能!
五,实验要求实现


此次设计主要是应用单片机来设计电子时钟,硬件部分主要分以下电路模块:显示电路 用8个共阴数码管分别显示,个位、十位、百位、千位、万位等,通过动态扫描进行输入数 据,从而避免了译码器的使用,同时节约了 I/O端口,使电路更加简单。单片机采用AT89S52 系列,这种单片机应用简单。
电路的总体设计框架如下:


本实验用汇编程序完成.
1、 键扫程序的过程为:开始时,先判断是否有键闭合,无键闭合时,返回继续判
断,有键闭合时,先去抖动,然后确定是否有键按下,若无键按下,则返回继 续判断是否有键闭合,若有键按下,则判断键号,然后释放,若释放按键完毕, 则返回,若没有释放按键,则返回继续释放。
按键流程图:
2、 算术运算程序的过程为:先输入第…个数据,判断输入的运算符是+、-、*、/中
的哪一个,若是+或-,则要判断运算结果是否溢出,溢出则显示错误信息,没 溢出就显示运算结果,若是/,则要先判断除数是否为零,为零就显示错误信息, 不为零则显示运算结果,若是-,则直接显示运算结果。
算数运算流程图:
开始
加 乘 除 减
错误信息送显示
N 缓冲 N
数值送显示缓

结合电路图,程序设计的整体思路为:
接通电源,数码管显示零。
1、 按1到9键在个位上显示1到9,当再按下0到9这十个按键时按下的第 个数向 前移一位,以此类推;
2、 当按下加减乘除四个按键其中一个时将第一次的数据保存起来;
3、 输入第二个数据;
4、 按等于号,执行加减乘除函数,显示出最终计算结果
B. 2. 3主程序
主程序主要对按键进行扫描,以及判断定时和闹铃时间是否已到,若到则调用相关程序,
该段程序如下:
#include<reg52. h>
ftdefine uint unsigned int
#define uchar unsigned char
uchar code table[]={
0x3f, 0x06, 0x5b, 0x4f,
0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c,
0x39, 0x5e, 0x79, 0x71, 0};
uint num, temp,