简易计算器的设计与实现Word文件下载.docx
《简易计算器的设计与实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《简易计算器的设计与实现Word文件下载.docx(24页珍藏版)》请在冰点文库上搜索。
并且将键值送入缓冲区。
(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.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.7主程序流程图
2.2功能模块的设计与实现
1)键值读取模块。
键只读取模块是,当主模块中有按键时,才被调用的。
其功能是首先延时10ms已消除键盘抖动,继续读写,若读得的数据与主模块中的键值一样则真的有按键按下,若是“F”键则清空缓冲区若是“E”键则调用计算模块,否则将键值写入缓冲区返回主函数。
流程图如2.8所示。
图2.8键值读取模块图
2)计算模块
计算模块是从缓冲区中取得数据并且压栈,如遇到“*”或是“/”就出栈同时进行乘除运算;
至到遇到等号为止,再从栈中取得数据进行加减运算。
并将计算的结果送入缓冲区中。
具体流程图如图2.9所示。
第3章结果测试及分析
3.1结果测试
计算器实现了0–F内的加减乘除法运算,并将表达式以及结果显示在六位八段数码管上,其中A键为加号,B键为减号,C键为乘号D键为除号,F键为清零,还可以实现表达式的运算,例如1+2*3/4-5=-2.75的表达式。
3.2结果分析
键值的读取是本次课程设计最关键的一部分,因为只有从键盘取得数据才能进行计算和显示,否则该题目无法继续进行下去,按键的读取逻辑方面并不是很难,但是边读取边显示就显得不那么简单了,所以存在一个延时问题。
延时得当则读取和显示可完美结合。
计算也是一个很关键部分,本来想做一个任意位数的任意数学表达式的计算器可是由于时间限制,只能完成了计算任意数学表达式计算器。
显示模块比较简单实现起来也比较容易。
参考文献
[1]王爱英.计算机组成与设计[M].北京:
教育出版社,2003
[2]杨素行.微型计算机系统原理及应用[M].北京:
清华大学出版社,1996
[3]张雪兰.汇编语言程序设计[M].北京:
清华大学出版社,2006
[4]龚尚福.微机原理与接口技术[M].西安:
西安电子科技大学出版社,2003
[5]王中民.微型计算机原理[M].西安:
[6]沈美明,温冬婵.IBM-PC汇编语言程序设计[M].北京:
清华大学出版社,2001
附录1元件清单
名称
数量(个)
型号
备注
电阻
6
8段数码管
DPY
开关
24
BUTTON
单片机
1
8751
与非门
3
电源
电容
30pf(2个),10uf(1个)
晶振
CRYSTAL
芯片
5
74LS系列ULN2003A
74LS138,74LS245,74LS373
(2)
74LS374
附录2总电路图
附录3程序代码
ORG0000H
LJMPMAIN
ORG000BH
LJMPINT
ORG00FFH
MAIN:
MOVR7,#30H
MOVR6,#00H
CALLRESET
JMPMAIN
RESET:
MOVA,R7
MOVR0,A
MOVR1,#01H
MOVA,#06H
SUBBA,R6
JBPSW.7,MAX
MOVA,R6
XRLA,#00H
JZCC
MOVR3,A
JMPLOOP5
MAX:
MOVR3,#06H
LOOP5:
MOVA,@R0
MOVR5,A
CALLCHACKTABLE
CALLDISPLAY
MOVA,R1
RLA
MOVR1,A
DECR0
DJNZR3,LOOP5
CC:
MOVDPTR,#09004H
MOVA,#00H
MOVX@DPTR,A
MOVR1,#00H
CALLREAD
XRLA,#0FH
JZRESET
CALLCHACK
JMPRESET
RET
CHACK:
CALLDELAY
MOVXA,@DPTR
MOVR2,A
xrlA,R0
JZHAVE
AJMPCHACK
HAVE:
MOVR1,#0FBH
LOOP:
xrlA,R2
JZEQUAL
AJMPLOOP
EQUAL:
LOOP2:
JZLOOP3
JMPLOOP2
LOOP3:
CALLCHACKTAB
CALLRESOLVE
CHACKTAB:
MOVDPTR,#TAB
MOVR5,#00H
LOOP4:
MOVR4,A
MOVCA,@A+DPTR
XRLA,R1
JNZNEXT
MOVA,R4
INCA
XRLA,R0
AJMPENDD
NEXT:
INCR5
MOVA,R5
SJMPLOOP4
ENDD:
CHACKTABLE:
MOVDPTR,#TABLE
DISPLAY:
MOVDPTR,#09002H
MOVR2,#0FFH
DJNZR2,$
READ:
MOVDPTR,#09001H
RESOLVE:
INCR7
INCR6
MOV@R0,A
JZCLEAR
XRLA,#0EH
JZM
JMPMM
M:
LCALLJISUANG
MM:
CLEAR:
DELAY:
MOVTH0,#3CH
MOVTL0,#0B0H
MOVTMOD,#01H
SETBEA
SETBET0
SETBTR0
JBTR0,$
JMPRRR
INT:
CLRTR0
RETI
RRR:
TAB:
DW0DF0EH,0DF0DH,0EF0DH,0F70DH,0DF0BH,0EF0BH,0F70BH
DW0DF07H,0EF07H,0F707H,0FB07H,0FB0BH,0FB0DH,0FB0EH
DW0F70EH,0EF0EH
TABLE:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
JISUANG:
MOVR0,#31H
MOVR1,#50H
CHENGCHU:
XRLA,#0CH
JZCHENG
XRLA,#0DH
JZOVER
MOV@R1,A
INCR0
INCR1
JMPCHENGCHUCHENG:
DECR1
MOVA,@R1
CALLMATH
JMPCHENGCHU
CHU:
MATH:
MOVA,R3
XRLA,#0AH
JZADDD
XRLA,#0BH
JZSUBBB
JZMULL
JMPOVER
ADDD:
MOVA,R2
ADDA,R4
JMPRETT
SUBBB:
SUBBA,R4
MULL:
MOVB,R4
MULAB
RETT:
OVER:
MOVA,#0EH
LOOP8:
JZENDD1
JZENDD1
JMPLOOP8
ENDD1:
END
课程设计总结:
通过这次课程设计,我进一步加深了对单片机的了解。
并进一步熟练了对WAVE和Proteus软件的操作。
在编写程序的过程中,遇到了很多问题,例如键值的读入问题,数码管的动态显示问题。
经过几天的努力,在老师同学们的帮助下终于完成了本次课程设任务。
通过这次的设计,进一步了解了单片微型计算机及应用原理,收获很大,对软件编程、排错调试、查阅资料等方面得到较全面的锻炼和提高。
同时通过本次课程设计的学习,掌握了51系列单片机和其工作环境,可以进行一些简单的编程,我还深深的体会到设计课的重要性和目的性所在。
为了完成课程设计的任务,在网络上找到了许多相关的资料,大大扩充自己的知识面,使许多以前想解决却无法解决的困难迎刃而解。
将书本上的理论知识和实际有机地结合起来,从理论中得出结论。
锻炼了实际分析问题和解决问题的能力,提高了适应实际的能力,为今后的学习和实践打下了良好的基础。
此次课设还巩固和综合运用所学过的原理知识,从而提高自己的实际动手能力和独立思考的能力。
指导教师评语:
指导教师(签字):
年月日
课程设计成绩