简易计算器的设计与实现

  • 格式:docx
  • 大小:602.15 KB
  • 文档页数:27

下载文档原格式

  / 27
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

沈阳航空航天大学

课程设计报告

课程设计名称:单片机系统综合课程设计课程设计题目:简易计算器的设计与实现

院(系):

专业:

班级:

学号:

姓名:

指导教师:

完成日期:

沈阳航空航天大学课程设计报告第1章总体设计方案

第1章总体设计方案

1.1设计内容

本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计

算器的键盘输入,进行加、减、乘、除1位无符号数字的简单四则运算,并在6

位8段数码管上显示相应的结果。

设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择

内部存储资源丰富的8751单片机,输入采用4×4矩阵键盘。显示采用6位8段

共阳极数码管动态显示。软件方面从分析计算器功能、流程图设计,再到程序的

编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,最终选用汇编语言进行编程,并用protel99se涉及硬

件电路。

1.2设计原理

在该课程设计中,主要用到一个8751芯片和串接的共阳数码管,和一组阵列

式键盘。作为该设计的主要部分,下面将对它们的原理及功能做详细介绍和说明。

1)提出方案

以8751为核心,和数码管以及键盘用实验箱上已有的器件实现计算器的功能。

2)总体方案实现

(1)要解决键值得读入。先向键盘的全部列线送低电平,在检测键盘的行线,如果有一行为低电平,说明可能有按键按下,则程序转入抖动检测---就是延时

10ms再读键盘的行线,如读得的数据与第一次的相同,说明真的有按键按下,程序转入确认哪一键按下的程序,该程序是依次向键盘的列线送低电平,然后读键

盘的行线,如果读的值与第一次相同就停止读,此时就会的到键盘的行码与列码查表可的键值。并且将键值送入缓冲区。

(2)计算。从缓冲区中取出数据按照括号配匹算法解决符号优先级问题,如果有键值为“F”则清空缓冲区跳至开始处,否则调用汇编指令进行计算,结果送入缓冲区。

(3)显示。从缓冲区中取出数据查找段码表,将段码送入段码管。

1.3设计思路

采用汇编语言程序设计的方法结合硬件电路设计方法,利用Lab6000实验箱上已有芯片来实现计算器的各项功能。

1.4实验环境

硬件环境:Lab6000实验箱,PC机。

软件环境:WA VE应用软件。

第2章详细设计方案

2.1硬件电路设计

1)单片机8751

P0口作为存储器地址线的低8位,p2口作为地址线的高8位,采用定时器0作为键盘抖动时的10ms延时,采用外部设备与存储器统一编制方式。如图2.1所示。

图2.1单片机8751图

2)8段共阳极数码管

图为八段共阳极数码管的引脚图,从左到右数码管的段码分别为a,b,c,d,e,f,g 和小数点dp,高电平时点亮,这八位分别74LS374的Q0~Q7接,作为数码管的

段码锁存器,其CPU访问地址位09004。下边为位选端和阳极端,6个位选端分别与另一片74LS374的Q0~Q5,与此同时为了体现总线的复用性和硬件电路的简单性这6位位选线作为键盘的列线,CPU访问地址为09002H。如图2.2所示。

图2.2共阳极8段数码管图

3)键盘

键盘可分为两类:编码键盘和非编码键盘。编码键盘是较多按键(20个以上)和专用驱动芯片的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。通用计算机使用的标准键盘就是编码键盘。当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。但大多数智能仪器和电子产品的按键数目都不太多(20个以内),为了降低成本和简化电路通常采用非编码键盘。非编码键盘的接口电路

有设计者根据需要自行决定,按键信息通过接口软件来获取。本课题需要的是16个按键,故选择用非编码键盘。键盘的行线与一片74LS245相连接作为键盘的扫描码,其CPU访问地址09001H。如图2.3所示。

图2.3简易计算器数据输入键盘图

4)74LS374

74LS374是地址锁存器,一片用来锁存键盘,数码管的地址,另一片用来锁存数码管的段码。如图2.4所示。

图2.474LS374图

5)74LS245

74LS245用来读取键盘的行码A0-A3分别与键盘的行线相连接;B0-B7分别与数据总线相连接。如图2.5所示。

图2.574LS245图

6)UNL2003A

UNL2003A相当于7个非门IN输入OUT输出,其中IN端接键盘的列线,OUT 端接数码管。如图2.6所示。

图2.6ULN2003A图

2.2主程序设计

主程序模块是边检测边显示的模块,一旦有按键按下(无论是按键抖动还是真的有按键按下)就转入键值读取模块,如果没有按键按下或是已经从键值读取模块返回,就继续从一个以30H为首地址的缓冲区中取出数据并转换成数码管的段码显示出来。主模块是一个死循环函数没有结束直至人为终止。主程序流程图如图2.7所示。

写入缓冲区返回主函数。流程图如2.8所示。

开始

延时10ms

有键按下

读取键值

延时10ms

按键放开

E键

缓冲区加一将键值存入

F键

清空缓冲区

调用计算函数

结束

图2.8键值读取模块图