简易计算器的设计与实现_第1页
简易计算器的设计与实现_第2页
简易计算器的设计与实现_第3页
简易计算器的设计与实现_第4页
简易计算器的设计与实现_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业沈阳航空航天大学课 程 设 计 报 告课程设计名称:单片机系统综合课程设计课程设计题目:简易计算器的设计与实现院(系): 专 业: 班 级:学 号:姓 名: 指导教师: 完成日期: 目 录 TOC o 1-3 h z 总体设计方案1.1 设计内容 本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除1位无符号数字的简单四则运算,并在6位8段数码管上显示相应的结果。 设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,

2、首先选择内部存储资源丰富的8751单片机,输入采用44矩阵键盘。显示采用6位8段共阳极数码管动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,最终选用汇编语言进行编程,并用protel99se涉及硬件电路。1.2 设计原理在该课程设计中,主要用到一个8751芯片和串接的共阳数码管,和一组阵列式键盘。作为该设计的主要部分,下面将对它们的原理及功能做详细介绍和说明。 提出方案以8751为核心,和数码管以及键盘用实验箱上已有的器件实现计算器的功能。2) 总体方案实现(1)要解决键值得读入。先向键盘的

3、全部列线送低电平,在检测键盘的行线,如果有一行为低电平,说明可能有按键按下,则程序转入抖动检测-就是延时10ms再读键盘的行线,如读得的数据与第一次的相同,说明真的有按键按下,程序转入确认哪一键按下的程序,该程序是依次向键盘的列线送低电平,然后读键盘的行线,如果读的值与第一次相同就停止读,此时就会的到键盘的行码与列码查表可的键值。并且将键值送入缓冲区。(2)计算。从缓冲区中取出数据按照括号配匹算法解决符号优先级问题,如果有键值为“F”则清空缓冲区跳至开始处,否则调用汇编指令进行计算,结果送入缓冲区。(3)显示。从缓冲区中取出数据查找段码表,将段码送入段码管。1.3 设计思路采用汇编语言程序设计

4、的方法结合硬件电路设计方法,利用Lab6000实验箱上已有芯片来实现计算器的各项功能。 1.4 实验环境硬件环境:Lab6000实验箱,PC机。软件环境:WAVE应用软件。第2章 详细设计方案2.1 硬件电路设计1)单片机8751P0口作为存储器地址线的低8位,p2口作为地址线的高8位,采用定时器0作为键盘抖动时的10ms延时,采用外部设备与存储器统一编制方式。如图2.1所示。图2.1 单片机8751图2)8段共阳极数码管图为八段共阳极数码管的引脚图,从左到右数码管的段码分别为a,b,c,d,e,f,g和小数点dp,高电平时点亮,这八位分别74LS374的Q0Q7接,作为数码管的段码锁存器,其

5、CPU访问地址位09004。下边为位选端和阳极端,6个位选端分别与另一片74LS374的Q0Q5,与此同时为了体现总线的复用性和硬件电路的简单性这6位位选线作为键盘的列线,CPU访问地址为09002H。如图2.2所示。图2.2共阳极8段数码管图3)键盘键盘可分为两类:编码键盘和非编码键盘。编码键盘是较多按键(20个以上)和专用驱动芯片的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。通用计算机使用的标准键盘就是编码键盘。当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。但大多数智能仪器和电子产品的按键数目都不太多(20个以内),为了

6、降低成本和简化电路通常采用非编码键盘。非编码键盘的接口电路有设计者根据需要自行决定,按键信息通过接口软件来获取。本课题需要的是16个按键,故选择用非编码键盘。键盘的行线与一片74LS245相连接作为键盘的扫描码,其CPU访问地址09001H。如图2.3所示。图2.3 简易计算器数据输入键盘图4)74LS37474LS374是地址锁存器,一片用来锁存键盘,数码管的地址,另一片用来锁存数码管的段码。如图2.4所示。图2.4 74LS374图5)74LS24574LS245用来读取键盘的行码A0-A3分别与键盘的行线相连接;B0-B7分别与数据总线相连接。如图2.5所示。图2.5 74LS245图6

7、)UNL2003AUNL2003A相当于7个非门IN输入OUT输出,其中IN端接键盘的列线,OUT端接数码管。如图2.6所示。图2.6 ULN2003A图2.2 主程序设计主程序模块是边检测边显示的模块,一旦有按键按下(无论是按键抖动还是真的有按键按下)就转入键值读取模块,如果没有按键按下或是已经从键值读取模块返回,就继续从一个以30H为首地址的缓冲区中取出数据并转换成数码管的段码显示出来。主模块是一个死循环函数没有结束直至人为终止。主程序流程图如图2.7所示。 图2.7 主程序流程图2.2 功能模块的设计与实现1)键值读取模块。键只读取模块是,当主模块中有按键时,才被调用的。其功能是首先延时

8、10ms已消除键盘抖动,继续读写,若读得的数据与主模块中的键值一样则真的有按键按下,若是“F”键则清空缓冲区若是“E”键则调用计算模块,否则将键值写入缓冲区返回主函数。流程图如2.8所示。图2.8 键值读取模块图图2.8 键值读取模块图2)计算模块 计算模块是从缓冲区中取得数据并且压栈,如遇到“*”或是“/”就出栈同时进行乘除运算;至到遇到等号为止,再从栈中取得数据进行加减运算。并将计算的结果送入缓冲区中。具体流程图如图2.9所示。图2.9 计算模块图2.9 计算模块图第3章 结果测试及分析3.1 结果测试 计算器实现了0 F内的加减乘除法运算,并将表达式以及结果显示在六位八段数码管上,其中A

9、键 为加号,B键为减号,C键为乘号D键为除号,F键为清零,还可以实现表达式的运算,例如1+2*3/4-5=-2.75的表达式。 3.2 结果分析键值的读取是本次课程设计最关键的一部分,因为只有从键盘取得数据才能进行计算和显示,否则该题目无法继续进行下去,按键的读取逻辑方面并不是很难,但是边读取边显示就显得不那么简单了,所以存在一个延时问题。延时得当则读取和显示可完美结合。计算也是一个很关键部分,本来想做一个任意位数的任意数学表达式的计算器可是由于时间限制,只能完成了计算任意数学表达式计算器。显示模块比较简单实现起来也比较容易。参考文献1王爱英.计算机组成与设计 M. 北京:教育出版社,2003

10、2杨素行.微型计算机系统原理及应用 M. 北京:清华大学出版社,19963张雪兰.汇编语言程序设计 M. 北京:清华大学出版社,20064龚尚福.微机原理与接口技术 M. 西安:西安电子科技大学出版社,20035王中民.微型计算机原理 M. 西安:西安电子科技大学出版社,20036沈美明,温冬婵.IBM-PC汇编语言程序设计M. 北京:清华大学出版社,2001附 录1 元件清单名称数量(个)型号备注电阻68段数码管6DPY开关24BUTTON单片机18751与非门3电源3电容330pf(2个),10uf(1个)晶振1CRYSTAL芯片574LS系列ULN2003A74LS138,74LS245

11、,74LS373(2)74LS374附 录2 总电路图附 录3 程序代码ORG 0000HLJMP MAINORG 000BHLJMP INTORG 00FFHMAIN:MOV R7,#30HMOV R6,#00HCALL RESETJMP MAINRESET:MOV A,R7MOV R0,AMOV R1,#01HMOV A,#06HSUBB A,R6JB PSW.7,MAXMOV A,R6XRL A,#00HJZ CCMOV A,R6MOV R3,AJMP LOOP5MAX:MOV R3,#06HLOOP5:MOV A,R0MOV R5,ACALL CHACKTABLECALL DISPLA

12、YMOV A,R1RL AMOV R1,ADEC R0DJNZ R3,LOOP5CC:MOV DPTR,#09004HMOV A,#00HMOVX DPTR,AMOV R1,#00HCALL READXRL A,#0FHJZ RESETCALL CHACKJMP RESETRETCHACK:CALL DELAYMOVX A,DPTRMOV R2,Axrl A,R0JZ HAVEAJMP CHACKHAVE:MOV R1,#0FBHLOOP:CALL READxrl A,R2JZ EQUALMOV A,R1RL AMOV R1,AAJMP LOOPEQUAL:CALL DELAYCALL DEL

13、AYLOOP2:MOVX A,DPTRXRL A,#0FHJZ LOOP3JMP LOOP2LOOP3:CALL CHACKTABCALL CHACKTABLECALL RESOLVERETCHACKTAB:MOV DPTR,#TABMOV A,#00HMOV R5,#00HLOOP4:RL AMOV R4,AMOVC A,A+DPTRXRL A,R1JNZ NEXTMOV A,R4INC AMOVC A,A+DPTRXRL A,R0JNZ NEXTAJMP ENDDNEXT:INC R5MOV A,R5SJMP LOOP4ENDD:RETCHACKTABLE:MOV DPTR,#TABLEM

14、OV A,R5MOVC A,A+DPTRMOV R4,ARETDISPLAY:MOV DPTR,#09002HMOV A,R1MOVX DPTR,AMOV DPTR,#09004HMOV A,R4MOVX DPTR,AMOV R2,#0FFHDJNZ R2,$RETREAD:MOV DPTR,#09002HMOV A,R1MOVX DPTR,AMOV DPTR,#09001HMOVX A,DPTRMOV R0,ARETRESOLVE:INC R7MOV A,R7MOV R0,AMOV A,R5INC R6MOV R0,AMOV A,R5XRL A,#0FHJZ CLEARMOV A,R5XRL

15、 A,#0EHJZ MJMP MMM:LCALL JISUANGMM:RETCLEAR:LJMP MAINDELAY:MOV TH0,#3CHMOV TL0,#0B0HMOV TMOD,#01HSETB EASETB ET0SETB TR0JB TR0,$JMP RRRINT:CLR TR0RETIRRR:RETTAB:DW 0DF0EH,0DF0DH,0EF0DH,0F70DH,0DF0BH,0EF0BH,0F70BHDW 0DF07H,0EF07H,0F707H,0FB07H,0FB0BH,0FB0DH,0FB0EHDW 0F70EH,0EF0EHTABLE: DB 3FH,06H, 5B

16、H,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H, 7CH,39H,5EH,79H,71HJISUANG:MOV R0,#31HMOV R1,#50HCHENGCHU:MOV A,R0XRL A,#0CHJZ CHENGMOV A,R0XRL A,#0DHJZ CHENGMOV A,R0XRL A,#0EHJZ OVERMOV A,R0MOV R1,AINC R0INC R1JMP CHENGCHUCHENG:MOV A,R0MOV R3,ADEC R1MOV A,R1MOV R2,AINC R0MOV A,R0INC R0MOV R4,ACALL MATHMOV A,

17、R5MOV R1,AINC R1MOV A,R5MOV R1,AJMP CHENGCHUCHU:MATH:MOV A,R3XRL A,#0AHJZ ADDDMOV A,R3XRL A,#0BHJZ SUBBBMOV A,R3XRL A,#0CHJZ MULLJMP OVERADDD:MOV A,R2ADD A,R4MOV R5,AJMP RETTSUBBB:MOV A,R2SUBB A,R4MOV R5,AJMP RETTMULL:MOV A,R2MOV B,R4MUL ABMOV R5,ARETT:RETOVER:INC R0MOV A,#0EHMOV R1,AMOV R1,#50HLOOP

18、8:MOV A,R1XRL A,#0EH JZ ENDD1INC R1MOV A,R1XRL A,#0EHJZ ENDD1DEC R1MOV A,R1MOV R2,AINC R1MOV A,R1MOV R3,AINC R1MOV A,R1MOV R4,ACALL MATHMOV A,R5MOV R1,AJMP LOOP8ENDD1:DEC R1MOV A,R1MOV R0,AINC R7INC R6RETEND课程设计总结: 通过这次课程设计,我进一步加深了对单片机的了解。并进一步熟练了对WAVE和Proteus软件的操作。在编写程序的过程中,遇到了很多问题,例如键值的读入问题,数码管的动态显示问题。经过几天的努力,在老师同学们的帮助下终于完成了本次课程设任务。通过这次的设计,进一步了解了单片微型计算机及应用原理,收获很大,对软件编程、排错调试、查阅资

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论