收藏 分享(赏)

单片机课程设计——计算器设计.doc

上传人:HR专家 文档编号:5210063 上传时间:2019-02-12 格式:DOC 页数:19 大小:274.28KB
下载 相关 举报
单片机课程设计——计算器设计.doc_第1页
第1页 / 共19页
单片机课程设计——计算器设计.doc_第2页
第2页 / 共19页
单片机课程设计——计算器设计.doc_第3页
第3页 / 共19页
单片机课程设计——计算器设计.doc_第4页
第4页 / 共19页
单片机课程设计——计算器设计.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

1、第 0 页目录一、设计总绪 21.1 设计思想 .21.2 设计说明 .21.3 关键词:矩阵键盘,单片机,数码管显示,汇编语言 21.4 设计目的 .21.5 设计要求 .2二、设计方案 32.1 硬件电路设计方案 .32.1.1 基本结构 .32.1.2 系统框架图 .32.1.3 工作流程图 .42.1.4 单片机主控制模块 .52.2 系统功能描述 .6三、各模块功能介绍 73.1 键盘输入模块 .73.1.1 键盘分布图 .73.1.2 工作原理 .73.2 运算控制模块 83.3 显示模块 .83.4 振荡电路模块 .9四、仿真电路 10仿真运行结果 10五、调试过程总结 12附录

2、: 13参考文献: 13源程序代码 13第 1 页一、设计总绪1.1 设计思想近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。 计算机在人们的日常生活中是比较常见的电子产品之一。可是它还在发展之中,以后必将出现功能更加强大的计算机,基于这样的理念,本次设计是用 AT89c51 单片机、LCD 显示器、控制按键为元件来设计的计算器。利用此设计熟悉单片机微控制器及汇编语言编程,对其片资源及各个 I/O 端口的功能

3、和基本用途的了解。掌握应用程序开发环境,常用的LCD 显示器的使用方法和一般键盘的使用方法此设计是基于单片机技术的简易计算器的方案,本次设计所提出的一种基于单片机技术的简易计算器的方案,采用具有数据处理能力的中央处理器CPU,随机存储器 ROM,多种 I/O 口和中断系统、定时器/计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统单片机,配以汇编语言编写的执行程序,能更好的解决计算机计算的问题,随着数字生活的到来,单片机在生活中越来越重要,它能将大量的逻辑功能集成与一个集成电路中,使用起来十分方便。1.2 设计说明本次课程设计讨论了单片机技术的计算器构思,设计方案,工作原理,主要系统包

4、括单片机 80C51,排阻 RESPACK8,开关,六位数码管显示器等,主要组成部分包括:键盘输入模块,运算模块,控制模块,显示模块。通过键盘输入数值,单片机进行运算后在数码管显示出结果。1.3 关键词 :矩阵键盘,单片机,数码管显示,汇编语言1.4 设计目的通过本次课程设计,运用单片机微型计算机原理及应用所学到的知识及查询相关资料,完成简易计算器的设计,进一步提高单片机的系统设计和开发能力,达到理论知识与实践更好的结合,提高综合运用所学知识和设计能力的目的。1.5 设计要求要求设计一个单片机应用系统,利用 keil 和 proteus 软件完成系统软硬件的设计及模拟调试。实现五位数(可为带小

5、数点)的加减乘除运算,通过按键输第 2 页入十进制数据。利用六位数码管显示运算结果。并实现复位操作。由于要设计的是简单的计算器,可以进行四则运算,为了得到教好的显示效果,采用 LCD显示数据和结果。 、另外键盘包括数字键(0-9) 、符号键(+、-、*、/ ) 、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算机键盘来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值后将显示键入的数值,按等号就会在 LCD 上输出运算结果,执行程序:开机显示零,等待键入数值,当键入数字,通过 LCD 显示出二、设计方案2.1 硬件电路设计方案2.1.1 基本结构计算器

6、一般由运算器、控制器、键盘、显示器、电源和一些可选外围设备及电子配件通过人工或机器设备组成。键盘是计算器的输入部件,一般采用接触式或传感式。显示器是计算器的输出部件,有发光二极管显示器或液晶显示器等。除显示计算结果外,还常有溢出指示、错误指示等。计算器电源采用交流转换器或电池。计算器都采用 CMOS 工艺制作的大规模集成电路。本次课程设计中我是采用了以 MCS51 系列的单片机 AT89C51 单片机为核心构成的简易计算器。该系统通过单片机控制,实现对 4*4 键盘进行实时扫描的按键检测,并把检测数据存储下来。整个计算器系统的工作过程为:首先存储单元初始化,显示初始值和键盘扫描,判断按键位置,

7、查表得出按键值,单片机则对数据进行储存与相应处理转换,之后送入数码管动态显示。整个系统可分为三个主要功能模块:功能模块一,实时键盘扫描;功能模块二,数据转换成显示器显示;功能模块三,计算控制模块。功能模块四:显示模块。2.1.2 系统框架图键盘控制运算显示第 3 页图 2.1 系统总体框架图2.1.3 工作流程图NoYes开始初始化键盘列扫描有键按下运算功能键是” =”?计算最后结果数码管显示复位键 数字键记忆对应键值数码管显示 其他键记忆其运算符第 4 页图 2.2 系统工作流程图2.1.4 单片机主控制模块AT89C51 是一种带 4K 字节闪烁可编程可擦除只读存储器(FPEROMFals

8、h Programmable and Erasable Read Only Memory)的低电压,高性能 CMOS8 位微处理器,俗称单片机。该器件采用 ATMEL 高密度非易失存储器制造技术制造,与工业标准的 MCS-51 指令集和输出管脚相兼容。由于将多功能 8 位 CPU 和闪烁存储器组合在单个芯片中,ATMEL 的 AT89C51 是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。主要特性:与 MCS-51 兼容 ;4K 字节可编程闪烁存储器 ;1000 写/擦循;数据保留时间:10 年;全静态工作:0Hz-24Hz;三级程序存储器锁定;128*8 位内部 RA

9、M;32 可编程 I/O 线;两个 16 位定时器/计数器;5 个中断源 ;可编程串行通道;低功耗的闲置和掉电模式;片内振荡器和时钟电路74LS245是我们常用的芯片,用来驱动 led 或者其他的设备,它是8 路同相三态双向总线收发器,可双向传输数据。74LS245还具有双向三态功能,既可以输出,也可以输入数据。当8051单片机的 P0口总线负载达到或超过 P0最大负载能力时,必须接入74LS245等总线驱动器。当片选端/CE 低电平有效时,DIR=“0 ”,信号由 B 向 A 传输;(接收)第 5 页DIR=“1”,信号由 A 向 B 传输;(发送)当 CE 为高电平时,A、B 均为高阻态。

10、由于 P2口始终输出地址的高 8位,接口时74LS245 的三态控制端1G 和2G接地,P2口与驱动器输入线对应相连。 P0口与74LS245输入端相连,E 端接地,保证数据线畅通。8051的 /RD 和/PSEN 相与后接 DIR,使得 RD 且 PSEN 有效时,74LS245 输入(P0.1D1) ,其它时间处于输出(P0.1D1) 。图 2 74LS245 引脚图2.2 系统功能描述本程序有 LCD 动态显示,键盘输入显示功能,程序启动时默认为计算器状态。(1)计算器状态下:按“0”“9” ,显示相应数字;按“复位” ,恢复初始化模式;按“加减乘除”可实现加减乘除的运算功能第 6 页三

11、、各模块功能介绍3.1 键盘输入模块3.1.1 键盘分布图图 3.1 计算器键盘图3.1.2 工作原理本设计采用 P3 口作为矩阵键盘输入口,开始工作后,单片机先对矩阵键盘的行进行扫描。若无键按下,先使 P3 为 11110000,然后检测外来输入,若有输入,则可使四位的 0 其中一位置 1,即完成了按行号的输入。列扫描远离同行扫描相同,不过 P3 初始为 00001111.检测完行号与列号后,产生一个 8 位二进制码,即可对键盘值进行输入。第 7 页3.2 运算控制模块图 3.2 计算器运算控制模块控制模块控制着数字录入,数字录入是进行计算的前提,它是将从矩阵键盘上输入的数值、运算符等录入单

12、片机处理器进行处理,从而得出运算结果。计算模块作为计算器的核心模块共有加、减、乘、除四个部分。其设计原理是先将键盘输入的 BCD 码数字转换为十进制数字,然后再对其进行运算。由于最后需要进行输出显示,所以我们的最终结果以十进制的形式显示在六位的数码显示管上。3.3 显示模块图 3.3 数码管显示屏第 8 页本设计采用了六位数码管,可以显示 0999999 之间的任意整数,由于LED 数码管有 6 个,若采用静态显示,则最少需要 48 根数据线与 6 根地址线,这对只有 40 个引脚的单片机来说是不可能实现的。所以我采用了动态扫描的显示方法。其原理是不同时刻对不同位上的数码管进行选通,同时对其进

13、行数码输出。当扫描频率很高时,将不会看到数码管的闪烁。本设计应用了定时器中断来实现间时显示。3.4 振荡电路模块图 3,.4 振荡电路振荡电路如图所示。图中晶振的两端分别接单片机的 19 和 18 脚。时钟有内部电路产生,定时器件为石英晶体和电容组成的并联谐振回路。3.5 起保护作用模块图 3.5 限流电阻第 9 页这一排限流电阻,它们的作用是起保护作用,防止数码管的段位被烧坏。四、仿真电路图 4.1 系统电路仿真图仿真运行结果例如:运行 23*2 时,一次在键盘上输入数据和功能键,功能键不会再数码管上显示出来,只会显示出输入的数据和运行结果。第 10 页图 4.2 输入数据 23 时图 4.

14、3 输入数据 2第 11 页图 4.4 计算 23*2 的运行结果五、调试过程总结开始在做这个单片机课设的时候,感觉无从下手,一点头绪都没有。后来上网查了好多资料,向学长请教。终于功夫不负有心人,做出了这个单片机的课设。调试过程中也遇到了一些问题,先是数码管显示数据不完整,经过仔细检查发现是线路连接的错误;后来又遇到计算时会出现运算错误,经过查找发现原来是编程的问题。在利用 keil 软件编程的过程中,会出现各种各样的问题,有的是由于粗心而引起的,有的是因为概念模糊而导致的。再用 proteus 进行仿真时,会出现的问题主要是线路连接问题,可能会不小心把线连错,其他的我觉得只要元器件选择好,各

15、引脚的功能清楚的话一般不会有太大的问题。在这次做课程设计的过程中我深深体会到了要独立完成一个作品的设计是多么不容易。虽然我做的只是最基础的,但是从这个最小的系统中却是利用了单片机的最基础的功能。在这个过程中,我们不仅仅是编程仿真那么简单,还需要有极大的耐心与毅力。设计的过程中会遇到各种各样的问题,我们应该静下心来好好研究,这对于我们以后的工作也是非常重要的。总的来说,这次课程设计,一个礼拜的紧张忙碌终于完成了。感觉自己的收获还是很多的,无论是对专业知识的了解还是对硬件的设计,都是需要我们下很大的功夫去研究的。通过这次课程设计,最大的一点体会是单片机学的不够扎实,不会的很多啊,当然这次的课程设计

16、做计算器程序用的是汇编语言,尽管大家都知道汇编编这个程序很困难,但还是互相学习,到处找资料看,问第 12 页同学,所以我的软件主程序才能编译成功,系统才能调试出结果。很感谢那些热心教导我的同学和指导我的老师。附录:参考文献:【1】姜志海、刘连鑫等,单片机微型计算机原理及应用M。北京:电子工业出版社,2011【2】周润景,张丽娜。基于 PROTEUS 的电路及单片机系统设计与仿真M。北京:北京航空航天大学出版社,2006源程序代码YJ EQU 50H ;结果存放YJ1 EQU 51H ;中间结果存放GONG EQU 52H ;功能键存放ORG 00H ;程序存放的首地址START: MOV R3

17、,#0 ;初始化显示为空MOV GONG,#0 ;功能键清零MOV 32H,#00H ;(32H)=00H,存放输入的数据MOV 33H,#00H ;(33H)=00HMOV 34H,#00H ;(34H)=00HMLOOP: CALL DISP ;调显示子程序, call 通过入口地址跳转有返回,返回地址压入堆栈。WAIT: CALL TESTKEY NEXT1: CJNE A,#1,NEXT2 LJMP E1NEXT2: CJNE A,#2,NEXT3LJMP E1NEXT3: CJNE A,#3,NEXT4LJMP E1NEXT4: CJNE A,#4,NEXT5LJMP E1NEXT5

18、: CJNE A,#5,NEXT6LJMP E1NEXT6: CJNE A,#6,NEXT7LJMP E1NEXT7: CJNE A,#7,NEXT8第 13 页LJMP E1NEXT8: CJNE A,#8,NEXT9LJMP E1NEXT9: CJNE A,#9,NEXT10LJMP E1NEXT10:CJNE A,#10,NEXT11 ;判断是否功能键LJMP E2 ;转功能键处理NEXT11:CJNE A,#11,NEXT12LJMP E2NEXT12:CJNE A,#12, NEXT13LJMP E2NEXT13:CJNE A,#13,NEXT14LJMP E2NEXT14:CJNE

19、 A,#14,NEXT15LJMP E2NEXT15:LJMP E3 ;判断是否清除键E1: CJNE R3,#1,N1 ;判断第几次按键,若(R3)不等于(1),则跳转到 N1 处执行LJMP E11 ;为第一个数字N1: CJNE R3,#2,N2LJMP E12 ;为第二个数字N2: CJNE R3,#3,N3 LJMP E13 ;为第三个数字N3: LJMP E3 ;第四个数字转溢出E11:MOV R4,A ;输入值暂存 R4MOV 34H,A ;输入值送显示缓存MOV 33H,#00HMOV 32H,#00HLJMP MLOOP ;等待再次输入E12: MOV R7,A ;个位数暂存

20、 R7MOV B,#10MOV A,R4MUL AB ;十位数,输入的值乘 10,即为十位数ADD A,R7MOV R4,A ;输入值存 R4MOV 32H,#00H ;输入值送显示缓存MOV 33H,34HMOV 34H,R7LJMP MLOOPE13:MOV R7,AMOV B,#10MOV A,R4MUL ABJB OV,E3 ;输入溢出第 14 页ADD A,R7JB CY,E3 ;输入溢出MOV R4,AMOV 32H,33H ;输入值送显示缓存MOV 33H,34HMOV 34H,R7LJMP MLOOPE3: MOV R3,#0 ;按键次数清零MOV R4,#0 ;输入值清零MO

21、V YJ,#0 ;计算结果清零MOV GONG,#0 ;功能键设为零 MOV 32H,#00H ;显示清空MOV 33H,#00HMOV 34H,#00HLJMP MLOOPE2: MOV 34H,#00HMOV 33H,#00HMOV 32H,#00HMOV R0,GONG ;与上次功能键交换MOV GONG,AMOV A,R0CJNE A,#10,N21 ;判断功能键LJMP JIA ;“N21: CJNE A,#11,N22LJMP JIAN ;“N22: CJNE A,#12,N23LJMP CHENG ;“*“N23: CJNE A,#13,N24LJMP CHU ;“/“N24:

22、CJNE A,#0,N25LJMP FIRST ;首次按功能键N25: LJMP DEN ;“=“N4: LJMP E3FIRST: MOV YJ,R4 ;输入值送结果MOV R3,#0 ;按键次数清零LJMP DISP1 ;结果处理/加法/JIA: MOV A,YJ ;上次结果送累加器ADD A,R4 ;上次结果加输入值JB CY,N4 ;溢出MOV YJ,A ;存本次结果MOV R3,#0 ;按键次数清零LJMP DISP1第 15 页/减法/JIAN: MOV A,YJSUBB A,R4 ;上次结果减输入值JB CY,N4 ;负数溢出,JB 位变量条件转移指令,若直接寻址位的值为 1,则

23、执行转移MOV YJ,AMOV R3,#0LJMP DISP1/乘法/CHENG: MOV A,YJMOV B,AMOV A,R4MUL AB ;上次结果乘输入值JB OV,N4 ;溢出MOV YJ,ALJMP DISP1/除法/CHU: MOV A,R4MOV B,AMOV A,YJDIV AB ;上次结果除输入值MOV YJ,AMOV R3,#0LJMP DISP1/等于/DEN: MOV R3,#0LJMP DISP1DISP1: MOV B,#10MOV A,YJMOV B,#10MOV A,YJ1DIV ABMOV YJ1,AMOV A,BMOV 33H,A ;十位送显示缓存MOV

24、A,YJ1JZ DISP11 ;结果是否为二位数MOV 32H,A ;百位数送显示缓存DISP11: LJMP MLOOP ;长跳转指令DISP: MOV R0,#34HDIR1: MOV DPTR,#SEGTAB ;基寄存器 DPTR 存入输入的数据值MOV A,R0 ;寄存器间接寻址MOVC A,A+DPTR ;基寄存器加变址寄存器间接寻址第 16 页MOV P0,ACJNE R0,#34H,DIR2SETB P2.0DIR2: CJNE R0,#33H,DIR3SETB P2.1CALL D1MSCLR P2.1 ;P2.1 端口清零DEC R0 ;减 1 指令SJMP DIR1DIR3

25、: SETB P2.2CALL D1MSCLR P2.2RETD1MS: MOV R7,#02HDMS: MOV R6,#0F0HDJNZ R6,$ ;减 1 不为 0 跳转指令DJNZ R7,DMS RETSEGTAB: DB 0C0H, 0F9H, 0A4H, 0B0H ;0 1 2 3 定义字节DB 99H, 92H, 82H, 0F8H ;4 5 6 7DB 80H, 90H, 88H, 83H ;8 9 A BDB 0C6H, 0A1H, 86H, 8EH ;C D E FTESTKEY:ACALL DISPMOV P1,#0FH ;读入键状态MOV A,P1CPL A ;将累加器

26、A 的内容逐位求反,不影响标志ANL A,#0FH ;高四位不用,与操作,屏蔽高四位RETKEYTABLE:DB 0D7H,0EBH,0DBH,0BBH ;键码定义DB 0EDH,0DDH,0BDH,0EEHDB 0DEH,0BEH,077H,07BHDB 07DH,07EH,0B7H,0E7H;DB 07EH,07DH,07BH,0E7H ;键码定义;DB 0D7H,0B7H,0DEH,0BDH;DB 0EBH,0DBH,0BBH,0DDH;DB 077H,0EEH,0BEH,0EDHGETKEY: MOV R6,#10 ;读键子程序ACALL DELAYMOV P1,#0FH第 17 页M

27、OV A,P1CJNE A,#0FH,K12LJMP MLOOPK12: MOV B,AMOV P1,#0EFHMOV A,P1CJNE A,#0EFH,K13MOV P1,#0DFHMOV A,P1CJNE A,#0DFH,K13MOV P1,#0BFHMOV A,P1CJNE A,#0BFH,K13MOV P1,#07FHMOV A,P1CJNE A,#07FH,K13LJMP MLOOPK13: ANL A,#0F0HORL A,B ;或操作,用于数据拼装MOV B,AMOV R1,#16MOV R2,#0MOV DPTR,#KEYTABLEK14: MOV A,R2MOVC A,A+DPTRCJNE A,B,K16MOV P1,#0FHK15: MOV A,P1CJNE A,#0FH,K15MOV R6,#10ACALL DELAYMOV A,R2RETK16: INC R2DJNZ R1,K14AJMP MLOOPDELAY: MOV R7,#10TS1: MOV R6,#0FFHTS2:NOP ; 空操作指令NOPDJNZ R6,TS2DJNZ R7,TS1RETEND第 18 页

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 实用文档 > 课程设计

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报