简易计算器的设计与实现.docx
《简易计算器的设计与实现.docx》由会员分享,可在线阅读,更多相关《简易计算器的设计与实现.docx(24页珍藏版)》请在冰点文库上搜索。
![简易计算器的设计与实现.docx](https://file1.bingdoc.com/fileroot1/2023-8/18/6bff6bff-ff8a-4664-a45c-7c9175b3f6c8/6bff6bff-ff8a-4664-a45c-7c9175b3f6c81.gif)
简易计算器的设计与实现
沈阳航空航天大学
课程设计报告
课程设计名称:
单片机系统综合课程设计
课程设计题目:
简易计算器的设计与实现
院(系):
专业:
班级:
学号:
姓名:
指导教师:
完成日期:
第1章总体设计方案1
1.1设计内容1
1.2设计原理1
1.3设计思路2
1.4实验环境2
第2章详细设计方案3
2.1硬件电路设计3
2.2主程序设计7
2.2功能模块的设计与实现8
第3章结果测试与分析11
3.1结果测试11
3.2结果分析11
参考文献12
附录1元件清单13
附录2总电路图14
附录3程序代码15
第1章总体设计方案
1.1设计内容
本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除1位无符号数字的简单四则运算,并在6位8段数码管上显示相应的结果。
设计过程在硬件与软件方面进行同步设计。
硬件方面从功能考虑,首先选择内部存储资源丰富的8751单片机,输入采用4×4矩阵键盘。
显示采用6位8段共阳极数码管动态显示。
软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。
编程语言方面从程序总体设计以与高效性和功能性对C语言和汇编语言进行比较分析,最终选用汇编语言进行编程,并用99涉与硬件电路。
1.2设计原理
在该课程设计中,主要用到一个8751芯片和串接的共阳数码管,和一组阵列式键盘。
作为该设计的主要部分,下面将对它们的原理与功能做详细介绍和说明。
1)提出方案
以8751为核心,和数码管以与键盘用实验箱上已有的器件实现计算器的功能。
2)总体方案实现
(1)要解决键值得读入。
先向键盘的全部列线送低电平,在检测键盘的行线,如果有一行为低电平,说明可能有按键按下,则程序转入抖动检测就是延时10再读键盘的行线,如读得的数据与第一次的相同,说明真的有按键按下,程序转入确认哪一键按下的程序,该程序是依次向键盘的列线送低电平,然后读键盘的行线,如果读的值与第一次相同就停止读,此时就会的到键盘的行码与列码查表可的键值。
并且将键值送入缓冲区。
(2)计算。
从缓冲区中取出数据按照括号配匹算法解决符号优先级问题,如果有键值为“F”则清空缓冲区跳至开始处,否则调用汇编指令进行计算,结果送入缓冲区。
(3)显示。
从缓冲区中取出数据查找段码表,将段码送入段码管。
1.3设计思路
采用汇编语言程序设计的方法结合硬件电路设计方法,利用6000实验箱上已有芯片来实现计算器的各项功能。
1.4实验环境
硬件环境:
6000实验箱,机。
软件环境:
应用软件。
第2章详细设计方案
2.1硬件电路设计
1)单片机8751
P0口作为存储器地址线的低8位,p2口作为地址线的高8位,采用定时器0作为键盘抖动时的10延时,采用外部设备与存储器统一编制方式。
如图2.1所示。
图2.1单片机8751图
2)8段共阳极数码管
图为八段共阳极数码管的引脚图,从左到右数码管的段码分别为和小数点,高电平时点亮,这八位分别74374的Q07接,作为数码管的段码锁存器,其访问地址位09004。
下边为位选端和阳极端,6个位选端分别与另一片74374的Q05,与此同时为了体现总线的复用性和硬件电路的简单性这6位位选线作为键盘的列线,访问地址为09002H。
如图2.2所示。
图2.2共阳极8段数码管图
3)键盘
键盘可分为两类:
编码键盘和非编码键盘。
编码键盘是较多按键(20个以上)和专用驱动芯片的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。
通用计算机使用的标准键盘就是编码键盘。
当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。
但大多数智能仪器和电子产品的按键数目都不太多(20个以内),为了降低成本和简化电路通常采用非编码键盘。
非编码键盘的接口电路有设计者根据需要自行决定,按键信息通过接口软件来获取。
本课题需要的是16个按键,故选择用非编码键盘。
键盘的行线与一片74245相连接作为键盘的扫描码,其访问地址09001H。
如图2.3所示。
图2.3简易计算器数据输入键盘图
4)74374
74374是地址锁存器,一片用来锁存键盘,数码管的地址,另一片用来锁存数码管的段码。
如图2.4所示。
图2.474374图
5)74245
74245用来读取键盘的行码A03分别与键盘的行线相连接;B07分别与数据总线相连接。
如图2.5所示。
图2.574245图
6)2003A
2003A相当于7个非门输入输出,其中端接键盘的列线,端接数码管。
如图2.6所示。
图2.62003A图
2.2主程序设计
主程序模块是边检测边显示的模块,一旦有按键按下(无论是按键抖动还是真的有按键按下)就转入键值读取模块,如果没有按键按下或是已经从键值读取模块返回,就继续从一个以30H为首地址的缓冲区中取出数据并转换成数码管的段码显示出来。
主模块是一个死循环函数没有结束直至人为终止。
主程序流程图如图2.7所示。
图2.7主程序流程图
2.2功能模块的设计与实现
1)键值读取模块。
键只读取模块是,当主模块中有按键时,才被调用的。
其功能是首先延时10已消除键盘抖动,继续读写,若读得的数据与主模块中的键值一样则真的有按键按下,若是“F”键则清空缓冲区若是“E”键则调用计算模块,否则将键值写入缓冲区返回主函数。
流程图如2.8所示。
图2.8键值读取模块图
2)计算模块
计算模块是从缓冲区中取得数据并且压栈,如遇到“*”或是“/”就出栈同时进行乘除运算;至到遇到等号为止,再从栈中取得数据进行加减运算。
并将计算的结果送入缓冲区中。
具体流程图如图2.9所示。
图2.9计算模块图
第3章结果测试与分析
3.1结果测试
计算器实现了0–F内的加减乘除法运算,并将表达式以与结果显示在六位八段数码管上,其中A键为加号,B键为减号,C键为乘号D键为除号,F键为清零,还可以实现表达式的运算,例如1+2*3/4-52.75的表达式。
3.2结果分析
键值的读取是本次课程设计最关键的一部分,因为只有从键盘取得数据才能进行计算和显示,否则该题目无法继续进行下去,按键的读取逻辑方面并不是很难,但是边读取边显示就显得不那么简单了,所以存在一个延时问题。
延时得当则读取和显示可完美结合。
计算也是一个很关键部分,本来想做一个任意位数的任意数学表达式的计算器可是由于时间限制,只能完成了计算任意数学表达式计算器。
显示模块比较简单实现起来也比较容易。
参考文献
[1]王爱英.计算机组成与设计[M].北京:
教育出版社,2003
[2]杨素行.微型计算机系统原理与应用[M].北京:
清华大学出版社,1996
[3]张雪兰.汇编语言程序设计[M].北京:
清华大学出版社,2006
[4]龚尚福.微机原理与接口技术[M].西安:
西安电子科技大学出版社,2003
[5]王中民.微型计算机原理[M].西安:
西安电子科技大学出版社,2003
[6]沈美明,温冬婵汇编语言程序设计[M].北京:
清华大学出版社,2001
附录1元件清单
名称
数量(个)
型号
备注
电阻
6
8段数码管
6
开关
24
单片机
1
8751
与非门
3
电源
3
电容
3
30(2个),10(1个)
晶振
1
芯片
5
74系列2003A
74138,74245,74373
(2)
74374
附录2总电路图
附录3程序代码
0000H
000
00
:
R730H
R600H
:
7
R0
R101H
06H
6
.7
6
00H
6
R3
5
:
R306H
5:
0
R5
1
A
R1
R0
R35
:
09004H
00H
R100H
0
:
R2
0
:
R10
:
2
1
A
R1
:
2:
0
3
2
3:
:
00H
R500H
4:
A
R4
1
4
A
0
:
R5
5
4
:
:
5
R4
:
09002H
1
09004H
4
R20
R2,$
:
09002H
1
09001H
R0
:
R7
7
R0
5
R6
0
5
0
5
0
M
M:
:
:
:
03
00B0H
01H
0
0
0,$
:
0
:
:
00,00,00,0F70,00,00,0F70
007H,007H,0F707H,007H,00,00,00
0F70,00
:
3,06H,5,4,66H,6,7,07H
7,6,77H,7,39H,5,79H,71H
:
R031H
R150H
:
0
0
0
0
0
0
0
1
R0
R1
:
0
R3
R1
1
R2
R0
0
R0
R4
5
1
R1
5
1
:
:
3
0
3
0
3
0
:
2
4
R5
:
2
4
R5
:
2
4
R5
:
:
R0
0
1
R150H
8:
1
0
1
R1
1
0
1
R1
1
R2
R1
1
R3
R1
1
R4
5
1
8
1:
R1
1
0
R7
R6
课程设计总结:
通过这次课程设计,我进一步加深了对单片机的了解。
并进一步熟练了对和软件的操作。
在编写程序的过程中,遇到了很多问题,例如键值的读入问题,数码管的动态显示问题。
经过几天的努力,在老师同学们的帮助下终于完成了本次课程设任务。
通过这次的设计,进一步了解了单片微型计算机与应用原理,收获很大,对软件编程、排错调试、查阅资料等方面得到较全面的锻炼和提高。
同时通过本次课程设计的学习,掌握了51系列单片机和其工作环境,可以进行一些简单的编程,我还深深的体会到设计课的重要性和目的性所在。
为了完成课程设计的任务,在网络上找到了许多相关的资料,大大扩充自己的知识面,使许多以前想解决却无法解决的困难迎刃而解。
将书本上的理论知识和实际有机地结合起来,从理论中得出结论。
锻炼了实际分析问题和解决问题的能力,提高了适应实际的能力,为今后的学习和实践打下了良好的基础。
此次课设还巩固和综合运用所学过的原理知识,从而提高自己的实际动手能力和独立思考的能力。
指导教师评语:
指导教师(签字):
年月日
课程设计成绩