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

下载本文档

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

文档简介

1、辽辽 宁宁 工工 业业 大大 学学 单片机原理及接口技术单片机原理及接口技术 课程设计(论文)课程设计(论文)题目:题目: 简易计算器的设计简易计算器的设计 院(系):院(系): 电气工程学院电气工程学院 专业班级:专业班级: 自动化自动化132132班班 学学 号:号: 130302044130302044 学生姓名:学生姓名: 陆强陆强 指导教师:指导教师: (签字)起止时间:起止时间: 2016.6.6-2016.6.17 本科生课程设计(论文)课程设计(论文)任务及评语课程设计(论文)任务及评语院(系):电气工程学院 教研室:自动化 本科生课程设计(论文)注:成绩:平时20% 论文质量

2、60% 答辩20% 以百分制计算学 号130302044学生姓名陆强专业班级自动化132班课程设计(论文)题目简易计算器的设计课程设计(论文)任务课题完成的功能、设计任务及要求、技术参数课题完成的功能、设计任务及要求、技术参数实现功能实现功能简易计算器采用 4*4 键盘输入要计算的数字及要进行的计算操作,并显示上次输入的数据及结果,能够进行加、减、乘、除的运算,并存储上次计算的值。硬件设计包括 CPU 选型、最小系统电路、按键电路、显示电路等。设计任务及要求设计任务及要求1、确定设计方案,画出方案框图。2、进行硬件电路的设计,包括元器件选择,绘制原理图。3、进行实物的制作4、绘出程序流程图,并

3、编写完整程序。5、要求认真独立完成所规定的全部内容;所设计的内容要求正确、合理。6、按学校规定的格式,撰写、打印设计说明书一份;设计说明书应在4000字以上。技术参数技术参数密码长度可修改,密码可修改,密码输入正确,在显示屏上出现 Right,并控制开锁;密码错误出现 Error,连续输入错误三次,隔 30S 才能再次输入。进度计划1、布置任务,查阅资料,确定系统设计方案(2 天)2、系统硬件设计及实物制作(3 天)3、系统软件设计及编写功能程序及调试(3 天)4、撰写、打印设计说明书(1 天)5、验收及答辩。(1天)指导教师评语及成绩 平时: 论文质量: 答辩: 总成绩: 指导教师签字: 年

4、 月 日本科生课程设计(论文)摘 要计算器是日常生活中比较的常见的电子产品之一。在各种智能化产品中也常常会用到计算器,而且在现代化系统中人们对计算器技术要求更加的严格和精确,因此计算器已成为生产中必不可少的设备。本设计的硬件包括 4*4 键盘、单片机最小系统、液晶显示器,软件包括 C 语言编程和 Keil uVision5。简易计算器的设计使得计算器的技术更加的成熟、简单。简易计算器设计是以 AT89C52 单片机为核心的,输入采用 4*4 矩阵键盘,简易计算器不仅可以进行加、减、乘、除带符号数字运算(八位整数),还可以进行负数运算和错误提示,并在液晶显示器 LCD1602 上显示操作结果。

5、计算器的出现不仅使计算数据越来越方便,而且在算术方面节省了大量的计算时间。关键词:单片机;矩阵键盘;液晶显示;计算器 本科生课程设计(论文)目 录第 1 章 绪论 .1第 2 章 课程设计的方案 .22.1 概述 .22.2 系统组成总体结构 .2第 3 章 硬件设计 .33.1 单片机最小系统设计 .33.1.1 AT89S52 单片机简介 .33.1.2 AT89C52 单片机的引脚功能及说明 .33.1.3 单片机最小系统设计 .53.2 液晶显示器电路设计 .63.2.1 1602 液晶显示器的简介 .63.2.2 液晶引脚说明 .73.2.3 液晶显示模块电路 .73.3 电源电路的

6、设计 .83.4 按键电路设计 .83.5 总体电路图设计 .9第 4 章 软件设计 .104.1 主程序流程图设计 .104.2 子程序流程图设计 .10第 5 章 系统分析与调试 .125.1 系统调试 .125.2 实验数据与分析 .12第 6 章 课程设计总结 .15参考文献 .16附录 I.17附录 II.18本科生课程设计(论文)1第 1 章 绪论计算工具最早诞生于中国,中国古代最早采用的一种计算工具叫筹策,也被叫做算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的,约二百七十枚一束,放在布袋里可随身携带。另外直到今天仍在使用的珠算盘,是中国古代计算工具领域中的另一项发明,明代

7、时的珠算盘已经与现代的珠算盘几乎相同。 17 世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的“纳皮尔算筹”,英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加、减、乘、除、乘方和开方运算,甚至可以计算三角函数、指数函数和对数函数。这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。1642 年,年仅 19 岁的法国伟大科学家帕斯卡引用算盘的原理,发明了第一部机械式计算器,在他的计算器中有一些互相联锁的齿轮,一个转过十位的齿轮会使另一个齿轮转过一位,人们可以像拨电话号码盘那样,把数字拨进去,计算结果就会出现在另一个窗口

8、中,但是它只能做加减运算。1694 年,莱布尼兹在德国将其改进成可以进行乘除的计算。此后,一直到 20 世纪 50 年代末才有电子计算器的出现。电子计算器的出现给人们带来了很大的方便,不仅使计算更为方便,而且使计算结果更加准确,人们的日常生活中已经离不开计算器了,社会的各个角落都有它的身影,比如商店,办公室,学校等计算器电源采用交流转换器或电池,电池可用交流转换器或太阳能转换器再充电。为节省电能,计算器都采用CMOS 工艺制作的大规模集成电路(见互补金属-氧化物-半导体集成电路) ,并在内部装有定时不操作自动断电电路。计算器可选用的外围设备有微型打印机、盒式磁带机和磁卡机等。现在社会大部分使用

9、的是都是科学计算器,简易计算器在我们日常生活中已经不常见了,但是它的设计非常重要,科学计算器只是在简易计算器的设计的基础上加以改动,加部分功能,但是如是没有简易计算器的出现,科学计算器也不会出现及普及,因为简易计算器是最基础的,但同时也是最重要的,所以简易计算器的设计显得尤为重要。本科生课程设计(论文)2第 2 章 课程设计的方案2.1 概述计算器一般由运算器、控制器、存储器、键盘、显示器、电源和一些可选外围设备及电子配件通过人工或机器设备组成。低档计算器的运算器、控制器由数字逻辑电路实现简单的串行运算,其随机存储器只有一、二个单元,提供累加存储用。键盘是计算器的输入部件,一般采用接触式或传感

10、式。为减少计算器的尺寸,一键常常有很多功能。显示器是计算器的输出部件,有发光二极管显示器或液晶显示器等。除显示加、减、乘、除的计算结果外,还有负数运算、错误显示等。2.2 系统组成总体结构 图 2.1 系统框图本设计是以 STC89C52 单片机为核心器件,配合电阻电容晶振等器件,构成单片机的最小系统。其它个模块围绕着单片机最小系统展开。其中包括,显示设备采用 1602 液晶,该液晶可以进行 2 行内容的显示。对于本设计来说,第 1 行显示输入的内容,第 2 行显示计算结果。输入设备采用 4*4 的矩阵键盘,共 16个按键,除去 10 个数字键后,剩下的六个按键功能分别为加、减、乘、除、等于、

11、清除。电源供电则采用 USB 的形式,常用的供电电源可以是手机充电器、移动电源、电脑 USB 口等。液晶显示模块电源模块AT89C52主控制模块晶振模块矩阵键盘模块本科生课程设计(论文)3第 3 章 硬件设计3.1 单片机最小系统设计3.1.1 AT89S52 单片机简介单片机是单片微型机的简称,故又称为微控制器 MCU(Micro Control Unit)。通常由单块集成电路芯片组成,内部包含有计算机的基本功能部件:中央处理器CPU,存储器和 I/O 接口电路等。因此,单片机只要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。单片机广泛用于智能产品,智能仪表,测控技术,智能接口等

12、,具有操作简单,实用方便,价格便宜等优点,而其中AT89S52 以 MCS-51 为内核,是单片机中最典型的代表,应用于各种控制领域。 AT89S52 单片机是一种低功耗高性能的 CMOS8 位微控制器,内置 8KB 可在线编程闪存。该器件采用 Atmel 公司的高密度非易失性存储技术生产,其指令与工业标准的 80C51 指令集兼容。片内程序存储器允许重复在线编程,允许程序存储器在系统内通过 SPI 串行口改写或用同用的非易失性存储器改写。通过把通用的 8 位 CPU 与可在线下载的 Flash 集成在一个芯片上,AT89S52 便成为一个高效的微型计算机。它的应用范围广,可用于解决复杂的控制

13、问题,且成本较低。AT89S52 单片机如图 3.1 所示。 图 3.1 单片机 AT89C523.1.2 AT89C52 单片机的引脚功能及说明STC89C52 有 40 个引脚,32 个外部双向输入/输出(I/O)端口,同时内含 2个外中断口,3 个 16 位可编程定时计数器,2 个全双工串行通信口,2 个读写口线。空闲模式下,CPU 停止工作,允许 RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。STC89C52 有 PDIP、PQFP/TQFP 及 PLCC 等本科生课程设计(论文)4三种

14、封装形式,以适应不同产品的需求。AT89C52 的主要功能特性如下:1)兼容 MCS51 指令系统;2)8k 可反复擦写(1000 次)Flash ROM; 3)32 个双向 I/O 口; 4)256*8bit 内部 RAM ;5)3 个 16 位可编程定时/计数器中断;6)时钟频率 0-24MHz; 7)2 个串行中断;8)可编程 UART 串行通道; 9)2 个外部中断源; 10)共 8 个中断源; 11)2 个读写中断口线; 12)3 级加密位; 13)低功耗空闲和掉电模式; 14)软件设置睡眠和唤醒功能;AT89C52 系列单片机一般采用 40 个引脚,双列直插式封装,用 HMOS工艺

15、制造,其外部引脚排列如图 3.2 所示。其中,各引脚的功能为: 图 3.2 AT89C52 的引脚图 1)主电源引脚VCC(40 脚),接5V 电源正端;GND(20 脚),接5V 电源地端;2)外接晶体或外部振荡器引脚XTAL1(19 脚),接外部晶振和微调电容的一个引脚。在单片机内部,P101P112P123P134P145P156P167P178RESET9P30/RXD10P31/TXD11P32/INT012P33/INT113P34/T014P35/T115P36/WR16P37/RD17XTAL218XTAL119GND20P2021P2122P2223P2324P2425P25

16、26P2627P2728PSEN29ALE30EA31P0732P0633P0534P0435P0336P0237P0138P0039VCC40本科生课程设计(论文)5它是振荡电路的一个反相放大器的输入端,振荡电路的频率就是晶体的固有频率。当采用外部振荡器时,此引脚应接地。XTAL2(18 脚),接外部晶振和微调电容的另一个引脚。在片内接至反相放大器的输出端和内部时钟电路的输入端。当采用外部振荡器时,此脚接外部振荡器的输出端。3)控制信号线RESET(9 脚),复位信号输入端,复位/掉电时内部 RAM 的备用电源输入端。ALE(30 脚),地址锁存允许/编程脉冲输入,用 ALE 锁存从 P0

17、口输出的低 8 位地址。在对片内 EPROM 编程时,编程脉冲由此输入。PSEN (29 脚),外部程序存储器读选通信号,PSEN 端可以驱动 8 个LSTTL 门电路,低电平有效。EA(31 脚),访问外部存储器允许/编程电压输入。EA 为高电平时,访问内部存储器;低电平时,访问外部存储器。3.1.3 单片机最小系统设计基于 ST89C52 的单片机最小系统如图 3.3 所示,整个单片机最小系统由复位电路部分、晶振电路部分、辅助电路等三个部分组成。复位电路是由极性电容 C1 和电阻 R3 组成的,其中电容 C1 为 10uF,电阻R3 的阻值为 10K,复位电路的工作原理是利用电容电压不能突

18、变的性质进行设计的,一旦供电,RESET 脚就会出现高电平,并且高电平持续时间是由 R 和 C 的大小决定的,只有当 RESET 引脚上出现两次及两次以上的高电平才会复位,所以选取适当的 R 和 C 就可以保证及精准又可靠的复位。晶振电路是由两个电容及一个晶振组成的,其中两个电容分别为 C2 和 C3,其大小为 30pF,晶振 X1 的大小为 12M。电容的作用是帮助晶振更加容易的起振,所以电容的大小将影响起振的效果,晶振越大效果越好,取值范围为 15-33pF,所以我们取整数 30pF。而晶振的取值也可以是 24M,因为晶振越大单片机的执行速度就越快,所以在设计单片机最小系统时,晶振电路离单

19、片机越近越好。辅助电路是由一个 10K 大的排阻 R1 和电源组成,其作用就是在扩展 I/O 口时使用,以便接 LCD1602 液晶显示器。因为 STC89C52 的 P0 口是漏极开路输出,所以在 P0 口接了一个 10K 的排阻R1,这样子就可以使 P0 口作为普通的 I/O 口使用,而且 P0 口还得以充分利用,P2 口用作扩展用,用于接外部扩展的 RAM 和 ROM,本设计用 P0 口来做液晶的数据口。单片机最小系统如图 3.3 所示。本科生课程设计(论文)6图 3.3 单片机最小系统电路3.2 液晶显示器电路设计3.2.1 1602 液晶显示器的简介液晶显示器是一种显示器件,具有小体

20、积、轻重量、低功耗等特色。由于其功耗低、显示的信息量大(例如,文本,图形,曲线等)、无电磁辐射、使用寿命长,它已被广泛应用在便携式电子产品。本系统采用的 1602 是一款物美价廉的液晶显示屏,可以显示 2 行标准字符,每行共有 16 个字符。在通信系统,智能操作仪表和办公设备的自动化中被广泛的应用,主要功能是显示 ASCII 字符,因此被称为“字符型显示装置”。当在内部没有适合的汉字库的液晶类型显示器想要表达汉字的时候,第一步就是要获得想要的汉文或者图形的子模数据。子模块的软件不能直接提取子模块的数据 5*8点阵,可以从手工提取汉字的字体以模具。第二步,把取得的汉字子模数据保存在液晶存储器里面

21、。1602LCD 主要技术参数:1)显示容量:16*2 个字符2)芯片工作电压:4.55.5V3)工作电流:2.0mA(5.0V)4)模块最佳工作电压:5.0V5)字符尺寸:2.95*4.35(W*H)mmP101P112P123P134P145P156P167P178RESET9P30/RX D10P31/TX D11P32/INT012P33/INT113P34/T014P35/T115P36/WR16P37/RD17X TA L218X TA L119G ND20P2021P2122P2223P2324P2425P2526P2627P2728PSEN29A LE30EA31P0732P0

22、633P0534P0435P0336P0237P0138P0039V CC40U 1STC89C5212X 112MC230pFC330pFV CCV CC123456789R1103C110uFR310KV CCP00P01P02P03P04P05P06P07ENRWRSP10P11P12P13P14P15P16P17本科生课程设计(论文)7GNDGNDVCCVCCRSRWEND0D1D2D3D4D5D6D7R1103GNDVSS1VCC2VO3RS4RW5EN6D07D18D29D310D411D512D613D714A15K16LCD 1602LCD116023.2.2 液晶引脚说明第

23、1 脚:接地电源 VSS。 第 2 脚:5V 正电源为 VDD。 第 3 脚:VL 为液晶显示器对比度调整的端口,对比度的强弱由接电源的不同决定,对比度的调整可以通过一个 10k 的电位器。 第 4 脚:RS 是寄存器选择,高水平的数据寄存器,低选择指令寄存器。 第 5 脚:R / W 的读和写信号线,高水平低的读操作,写操作。 第 6 脚:使能端 E,当 E 端由 1 至 0 时,液晶模块中的命令开始被运行。 第 7 至 14 脚:D0-D7 为 8 位双向数据线。第 15 脚:背光源正极。 第 16 脚:背光源负极。3.2.3 液晶显示模块电路液晶模块的电路的连接图如图 3.4 所示,LC

24、D1602 一共有 16 个引脚,引脚1 和引脚 2 分别接到了电路的地和电源,这 2 个脚是液晶工作时电源输入端引脚。而第 3 引脚则是通过一个 10K 的滑动电阻器连接到地端,可通过调节该电位器来调节液晶的清晰度。第 4 脚是液晶的寄存器控制脚,接到了单片机的 P12 脚上。第 5 脚是液晶的读写控制脚,接到了单片机的 P13 脚上。第 6 脚是液晶的使能端脚,接到了单片机的 P14 脚上。第 7 脚到第 14 脚是液晶的数据/地址 8 位总线,接到了单片机的 P0 口上。最后第 15 脚和第 16 脚是液晶的背光电源脚,直接连接系统 VCC 和 GND。 图 3.4 液晶模块连接图本科生

25、课程设计(论文)83.3 电源电路的设计本设计是采用 USB 借口提供电源供电的,由于通过 USB 的电源输出的电压都为 5V,符合给单片机和液晶的供电电压,所以可以直接给单片机和液晶供电,电源电路设计较为简单,不需要加稳压和降压电路,只需要一个 USB 接口和按键开关即可,电源电路的连接图如图 3.5 所示。 图 3.5 电源电路3.4 按键电路设计按键电路的设计是采用 4*4 的是 16 个按键的矩阵式按键。键盘是单片机系统中最常用的人机对话输入设备,用户通过键盘向单片机输入数据或指令。键盘控制程序需完成的任务有:监测是否有键按下,有键按下时,在无硬件去抖的动电路时,应用软件延时方法消除按

26、键抖动影响;当有多个键同时按下时,只处理一个按键,不管一次按键持续多长时间,仅执行一次按键功能程序。矩阵按键扫描程序是一种节省 I/O 口的方法,按键数目越多节省 I/O 口就越可观,思路:先判断某一列(行)是否有按键按下,再判断该行(列)是那一只键按下。但是,在程序的写法上,采用了最简单的方法,使得程序效率最高。本程序中,如果检测到某键按下了,就不再检测其它的按键,这完全能满足绝大多数需要,又能节省大量的 CPU 时间。本键盘扫描程序的优点在于:不用专门的按键延时程序,提高了 CPU 效率,也不用中断来扫描键盘,节省了硬件资源。另外,本键盘扫描程序,每次扫描占用 CPU 时最短,不论有键按下

27、或者无键按下都可以在很短的时间完成一次扫描。本设计由于用到的按键比较多,故采用矩阵键盘的方式和单片机进行连接,J1DC5.5123456SW1VCC本科生课程设计(论文)9K1K2K3K4K5K6K7K8K9K10K11K12K13K14K15K16P10P11P12P13P14P15P16P17不同按键按下具有不同的按键功能,本设计共用到的按键共 16 个,除去 10 个数字键后,剩下的六个按键功能分别为加、减、乘、除、等于、清除。按键的连接图 3.6 所示。 图 3.6 按键电路3.5 总体电路图设计总体电路图见附录 I 所示。本科生课程设计(论文)10第 4 章 软件设计4.1 主程序流

28、程图设计主程序的功能主要是 LCD 显示与清屏、液晶的光标定位、液晶初始化、键盘扫描、按键处理、子程序调用和判断当前状态等。主程序的设计是整个程序设计的最重要的部分,不仅可以体现设计人的思想结构,还可以体现出设计人对设计理解的深度和认识的程度。主程序流程图如下图 4.1 所示。Y是否N图 4.1 主程序流程图4.2 子程序流程图设计子程序设计包括键盘扫描子程序和显示模块子程序的设计。开始系统初始化LCD 显示按键处理判断当前状态是否继续进行?结束本科生课程设计(论文)11键盘扫描子程序,首先读出P1的低四位,然后读出P1口的高四位。然后键值并显示缓存。然后将键如的值转换为ASCII码然后就可以

29、软件来设置硬件按键各个键代表的内容。读键程序使用的是反转法读键,不管键盘矩阵的规模大小,均进行两次读键。第一次所有行线均输出低电平,从所有读入键盘信息(列信息);第二次所有列线均输出低电平,从所有行线读入键盘信息(行信息)。数字键按下则将相应的数字送入缓存区,功能键按下则执行相应的程序。显示模块程序首先要对显示模块进行初始化;然后控制光标的位置;定义液晶显示的控制端口,用SBIT指令完成;然后设置清屏、关闭显示、归位、开显示、显示位置的首地址等等。子程序的设计是整个设计的中间部分,用于主程序中的指令的调用,主要是运算部分的加、减、乘、除和功能部分的等于、清零等。除此之外,在本设计中又添加了错误

30、显示和负数运算的功能。子程序流程图如下图4.2所示。 N Y 图 4.2 子程序流程图清屏扫描键盘加减乘除运算子程序液晶显示返回开始显示结束?本科生课程设计(论文)12第 5 章 系统调试与分析5.1 系统调试调试是整个系统功能否实现的关键步骤,我们将整个调试过程分为两大部分:硬件调试和软件调试。硬件调试主要工具是万用表和烙铁等工具,主要是为了排查板子焊错线、焊少线、短路和断路等情况。可通过电压、电流、电阻等物理量的测量,再进行推测,最终发现存在问题的地方,利用烙铁进行维修。通常软件调试应具备四种技能,跟踪、断点、查看变量和更改数值等。整个程序是一个主程序调用各个子程序实现功能的过程,要使主程

31、序和整个程序都能平稳运行,各个模块的子程序的正确与平稳运行必不可少,所以在软件调试的最初阶段就是把各个子程序模块进行分别调试。5.2 实验数据与分析本设计是简易计算器的设计,由单片机最小系统、矩阵键盘、液晶显示、晶振电路等部分组成,具体实物如下图 5.1 所示。 图 5.1 实物图 此设计是简易计算器的设计,除存在一些简单的运算如:加、减、乘、除等基本运算外,还有错误显示、负数运算等部分功能,以下为实物运行状态下的简本科生课程设计(论文)13单运行的结果:1)加减法运算:例如 9 加 6 等于 15 得运算如下图 5.2 所示,9 减 4 等于 5的运算如图 5.3 所示。图 5.2 加法运算

32、 图 5.3 减法运算2)乘除法运算:例如 2 乘以 8 等于 16 的运算如下图 5.4 所示,99 除以 9 等于 11 的运算如下图 5.5 所示。图 5.4 乘法运算图 5.5 除法运算 本次设计加减法的最高位只能为 4 位数,超过四位数将不显示,运行结果将只会运行之前显示的前四位数之间的运算,也就是说当按键被按下五次,五次之间没有运算符号键的按下时,将只显示前四次的按键结果,同时不显示的数也不会参与运算。 简易计算器的设计不仅只有加、减、乘、除等基本运算,而且还有负数运算和错误显示的功能,使得计算器更加灵活,应用更为方便,所适用的场合也越来越多。本科生课程设计(论文)143)错误显示

33、:当除数为 0 时出现错误显示,例如 22 除以 0 出现错误的运算如下图 5.6 所示。 图 5.6 错误显示4)负数运算:例如 3 减去 9 等于负 6 的运算如下图 5.7 所示。图 5.7 负数运算以上为简易计算器的加、减、乘、除及负数运算和错误显示的结果,从显示中可以看出来本次设计的程序是对的,运算结果没有错误,这也间接告诉我们中间的焊接过程也没有出现问题,所以总结来说,本次设计还是比较成功的。本科生课程设计(论文)15第 6 章 课程设计总结单片机课程设计终于结束了,通过紧张的工作,完成了我的设计任务-简易计算器的设计。总的来说,这次课程设计是还算成功的。当然,这其中也经历了许多坎

34、坷,但是在我的坚持不懈下,在郭老师的细心指导下,在同学们的热情帮助下,最终克服了种种困难,取得了成功。 刚开始接到这个计算器的课程设计任务时,因为以前动手实践做过类似的题目,于是在脑海中初步构建了编写程序的一些控制程序。但是由于缺乏编写大量程序的经验,不能如行云流水般的将全部的各部分代码写出,于是去网上查找相关资料,了解计算器的输入控制原理、运算处理以及显示的原理。了解之后自己尝试编写程序,在此过程中,其中键盘扫描和动态扫描显示扫描程序困扰了我很久,经过几天的辛苦工作,终于初步把所需要的程序编好了,于是就用 Keil uversion5 进行仿真,在仿真期间也发现了许多错误,基本上都是平日容易

35、犯的错误,比如忘记了子程序标号、死循环程序、标点符号的漏写等。经过反复的编译差错,仿真编译通过后,Keil 生成的 Hex 文件.然后将 Hex 文件导入仿真软件进行仿真,发现软件与硬件不能够对应协调工作,于是分别对软件和硬件进行检查,经过反复的仿真调试,并且在郭老师和同学的热心帮助和自己对每个子程序进行仿真观察下,终于在设计快结束时成功的调试出结果了。这就是我的课程设计的经过,看似简单,过程却曲折艰辛。通过这次单片机课程设计,我进一步加深了对单片机的了解。并进一步熟练了对Keil软件的操作。在编写程序的过程中,遇到了很多问题,使我发现自己以前学习上存在的不足,对以前所学过的知识理解得不够深刻

36、,掌握得不够牢固,对C语言掌握得不够好。通过与同学探讨和请教老师,终于把问题都解决了,并加深了对计算器工作的原理的了解。做单片机课程设计时,先查阅相关知识,把原理吃透,确定一个大的设计方向,在按照这个方向分模块的把要实现的功能用流程图的形式展示。学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。总之,通过这次课程的设计,进一步了解了单片机的应用及原理,收获很大,对软件编程、排错调试、查阅资料等方面得到较全面的锻炼和提高。本科生课程设计(论文)16参考文献1 楼然苗,李光飞.单片机课程设计指导M.北京:北京航空航天大学出版社,2012. 2 梅丽凤,

37、王艳秋.单片机原理及接口技术M.北京:清华大学出版社,2015.3 颜晖.C 语言程序设计M.北京:高等教育出版社,2012.4 徐昆良,基于 AT89C52 单片机的简易计算器设计与仿真J.电脑知识与技术.2015,24(16):14-20.5 槽瑞,徐森.基于单片机的计算器的设计J.科技视界.2012,12(4):121-121. 6 宋慧超.简易计算器的设计与仿真J.科技创新导报.2015,23(29):7-9.7 吴洋.基于单片机的建议计算器的设计J.电子世界.2016,34(8):56-56.8 李峡.基于单片机控制的简易计算器J.电子产品世界.2012,39(9):10-11.9

38、吴芳琴.基于单片机的简易计算器设计J.电子世界.2015,17(19):20-22.10 刘利华.简易计算器的设计与制作J.无线互联网科技.2014,13(4):17-19.11 程晓艳.基于单片机控制的计算器设计J.才智创新.2013,13(4):5-7.12 董雷刚.基于单片机的计算器的设计J.电脑知识技术.2012,31(4):42-44.13 周怀芳.简易计算器的设计与实现J.天津联合学报.2013,25(6):11-12.14 王丽琴.数字式计算器设计与仿真J.现代制造技术.2015,21(6):75-75.15 李嘉诚.简易数学计算器设计与实现J.软件导刊.2015,35(5):1

39、4-16.本科生课程设计(论文)17附录 I 总体电路图P101P112P123P134P145P156P167P178RESET9P30/RXD10P31/TXD11P32/INT012P33/INT113P34/T014P35/T115P36/WR16P37/RD17XTAL218XTAL119GND20P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE30EA31P0732P0633P0534P0435P0336P0237P0138P0039VCC40U1STC89C5212X112MC230pFC330pF123456789R1103C1

40、10uFR310KJ1DC5.5123456SW1R2103VSS1VCC2VO3RS4RW5EN6D07D18D29D310D411D512D613D714A15K16LCD 1602LCD11602K1K2K3K4K5K6K7K8K9K10K11K12K13K14K15K16本科生课程设计(论文)18附录 II #include / 包含 51 单片机相关的头文件#define uchar unsigned char/ 以后 unsigned char 就可以用 uchar 代替#define uint unsigned int/ 以后 unsigned int 就可以用 uint 代替#

41、define ulong unsigned long/ 以后 unsigned ulong 就可以用 ulong 代替sbit LcdRs_P = P27; / 1602 液晶的 RS 管脚 sbit LcdRw_P = P26; / 1602 液晶的 RW 管脚 sbit LcdEn_P = P25; / 1602 液晶的 EN 管脚uint num1;/ 运算数 1uint num2; / 运算数 2ulong num3; / 计算结果uchar cal; / 运算符号,1 加,2 减,3 乘,4 除uchar num1_flag;/ 运算数 1 的输入标志uchar num2_flag;

42、/ 运算数 2 的输入标志void DelayMs(uint time)uint i,j;for(i=0;itime;i+)for(j=0;j112;j+);/ 1602 液晶写命令函数,cmd 就是要写入的命令void LcdWriteCmd(uchar cmd) LcdRs_P = 0; LcdRw_P = 0; LcdEn_P = 0; P0=cmd;DelayMs(2); LcdEn_P = 1; DelayMs(2); LcdEn_P = 0; / 1602 液晶写数据函数,dat 就是要写入的命令void LcdWriteData(uchar dat) LcdRs_P = 1; L

43、cdRw_P = 0; LcdEn_P = 0; P0=dat;本科生课程设计(论文)19DelayMs(2); LcdEn_P = 1; DelayMs(2); LcdEn_P = 0; / 1602 液晶初始化函数void LcdInit() LcdWriteCmd(0 x38); / 16*2 显示,5*7 点阵,8 位数据口 LcdWriteCmd(0 x0C); / 开显示,不显示光标 LcdWriteCmd(0 x06); / 地址加 1,当写入数据后光标右移 LcdWriteCmd(0 x01); / 清屏 / 液晶光标定位函数void LcdGotoXY(uchar line,

44、uchar column)/ 第一行 if(line=0) LcdWriteCmd(0 x80+column); / 第二行 if(line=1) LcdWriteCmd(0 x80+0 x40+column); / 液晶输出字符串函数void LcdPrintStr(uchar *str) while(*str!=0) LcdWriteData(*str+);/ 液晶输出数字void LcdPrintNum(uchar num)LcdWriteData(num+0 x30); / 矩阵键盘扫描程序,按键对应的返回值如下所示:/ | 第 1 列 第 2 列 第 3 列 第 4 列 |/ |第

45、1 行 1 2 310 |/ |第 2 行 4 5 6 11 |/ |第 3 行 7 8 9 12 |/ |第 4 行 13 0 14 15 |/ -/ 如果扫描不到有按键按下,则返回 99 char KeyScanf() uchar ret=99; uchar temp;/*第一行按键的判断*/ P1=0 xfe;/ 让 P10 口为低电平本科生课程设计(论文)20 temp=P1&0 xf0;/ 变量 temp 保存 P1 口高 4 位的电平状态 switch(temp)/ 根据 temp 变量的值,判断不同的按键case 0 x70: ret=1; break;/ 第一个按键被按

46、下case 0 xb0: ret=2; break;/ 第二个按键被按下case 0 xd0: ret=3; break;/ 第三个按键被按下case 0 xe0: ret=10; break; / 第四个按键被按下/*第二行按键的判断*/ P1=0 xfd;/ 让 P11 口为低电平 temp=P1&0 xf0;/ 变量 temp 保存 P1 口高 4 位的电平状态 switch(temp)/ 根据 temp 变量的值,判断不同的按键case 0 x70: ret=4; break;/ 第一个按键被按下case 0 xb0: ret=5; break;/ 第二个按键被按下case 0

47、 xd0: ret=6; break;/ 第三个按键被按下case 0 xe0: ret=11; break; / 第四个按键被按下/*第三行按键的判断*/ P1=0 xfb;/ 让 P12 口为低电平 temp=P1&0 xf0;/ 变量 temp 保存 P1 口高 4 位的电平状态 switch(temp)/ 根据 temp 变量的值,判断不同的按键case 0 x70: ret=7; break;/ 第一个按键被按下case 0 xb0: ret=8; break;/ 第二个按键被按下case 0 xd0: ret=9; break;/ 第三个按键被按下case 0 xe0: r

48、et=12; break; / 第四个按键被按下/*第四行按键的判断*/ P1=0 xf7;/ 让 P13 口为低电平 temp=P1&0 xf0;/ 变量 temp 保存 P1 口高 4 位的电平状态 switch(temp)/ 根据 temp 变量的值,判断不同的按键case 0 x70: ret=13; break;/ 第一个按键被按下case 0 xb0: ret=0; break;/ 第二个按键被按下case 0 xd0: ret=14; break;/ 第三个按键被按下case 0 xe0: ret=15; break; / 第四个按键被按下本科生课程设计(论文)21return ret; / 返回按键的扫描结果/ 主函数void main() uchar ret; uchar i; LcdInit();while(1) LcdWriteCmd(0 x01); / 清除屏幕显示LcdWriteCmd(0 x0f); / 开启光标闪烁num1=0; / 运算数 1 清零num2=0;/ 运算数 2 清零num3=0

温馨提示

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

评论

0/150

提交评论