简易计算器的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
沈阳航空航天大学
课程设计报告
课程设计名称:单片机系统综合课程设计课程设计题目:简易计算器的设计与实现
院(系):
专业:
班级:
学号:
姓名:
指导教师:
完成日期:
目录
第1章总体设计方案 (1)
1.1设计内容 (1)
1.2设计原理 (1)
1.3设计思路 (2)
1.4实验环境 (2)
第2章详细设计方案 (3)
2.1硬件电路设计 (3)
2.2主程序设计 (8)
2.2功能模块的设计与实现 (9)
第3章结果测试及分析 (13)
3.1结果测试 (13)
3.2结果分析 (13)
参考文献 (14)
附录1 元件清单 (15)
附录2 总电路图 (16)
附录3 程序代码 (18)
第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机。
软件环境:WAVE应用软件。
第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.4 74LS374图
5)74LS245
74LS245用来读取键盘的行码A0-A3分别与键盘的行线相连接;B0-B7分别与数据总线相连接。如图2.5所示。
图2.5 74LS245图
6)UNL2003A
UNL2003A相当于7个非门IN输入OUT输出,其中IN端接键盘的列线,OUT端接数码管。如图2.6所示。
图2.6 ULN2003A图
2.2 主程序设计
主程序模块是边检测边显示的模块,一旦有按键按下(无论是按键抖动还是真的有按键按下)就转入键值读取模块,如果没有按键按下或是已经从键值读取模块返回,就继续从一个以30H为首地址的缓冲区中取出数据并转换成数码管的段码显示出来。主模块是一个死循环函数没有结束直至人为终止。主程序流程图如图2.7所示。