多功能计算器的设计毕业设计(论文)(编辑修改稿)内容摘要:

N Y N Y N Y 图 42 键盘扫描模块程序流程图 (3)判断按键是否释放。 首先要计算出闭合键的键值,然后对按键判断是否释放。 如果按键释放就等待;如果键已经释放,那么就再延时消抖。 (4)命令处理。 输入闭合键的键值后,程序自动实现该键已经设定的功能。 开始 是否有键按下 消抖 确实有键按下 判断并计算键号,执行相应命令 按键是否释放 返回 第四章 计算器的软件系统设计 16 在这个模块中,我要实现“加”、“减”、“乘”、“除”四种整数的运算,需要定义三个数: x、 y、 z ,类型为长整型( 2147485648~ +2147485647);其中 x为第一个数, y为第二个数, z 为两数运算的结果。 这次设计还要 求可以根据需要进行连 续多次的运算,即把c的值赋给 x,输入运算符,再输入 y,按下“ =”号,再得到 z,再赋给 x,以此反复执行。 在运算中 x的值有可能是负数,而 y必定是正数,所以我在进行“加”、“减”、“乘”三种运算时都可能会有溢出,都需要进行报错;在除法运算时,若除数为 0,也需要报错。 设 d=+2147485647, e=2147485648,判断溢出的方法是: ( 1)加法:当 0xd 时,若 ydy,则溢出; ( 2)减法:当 ex0 时,若 yxe,则溢出; ( 3)乘法:当 0xd 时,若 yd/x,则溢出; 当 ex0 时,若 ye/x,则溢出; 这次需要当心的地方就是在设计过程中除法运算时为了保留四位小数需对 z 转化为float 型并进行 10000 的操作,可以想象当 z + 时, z扩大一万倍就不再属于长整型的范围了,这就产生了溢出错误。 为了阻止这种情况的发生,这次设计规定了当z + 或 z 时,结果显示不保留小数;当 z+ 或z 时,结果显示保留四位小数。 运算模块程序流程图如图 43 所示。 南京工业大学本科生毕业设计 (论文) 17 N Y Y N 图 43 运算模块程序流程图 在这次 设计中,显示器上只需要显示数字和符号,不需要显示图形或者汉字,而且需要显示的数字和符号都有在 TC1602 液晶模块内置的字符发生存储器里,在编程时,通过开始 判断是哪个运算符 加 减 乘 除 除数是否为0 运算结果是否溢出 数值送显示缓冲区 错误信息送显示缓冲区 第四章 计算器的软件系统设计 18 查表就可得到相应字符的代码。 显示程序的流程图如图 44 所示。 N Y Y N Y 图 44 显示程序流程图 在这个模块中,我们需要了解液晶的基本操作时序 —— 写指令和写数据。 写指令:输入: RS=L, RW=L, D0~ D7=指令码, E=高脉冲;输出:无。 写数据:输入: RS=H, RW=L,D0~D7=数据, E=高脉冲;输出:无。 开显示 液晶初始化 判断是否显示字符 送地址 送数据 相应功能的设置 判断是否显示完 返回 南京工业大学本科生毕业设计 (论文) 19 DS1302 实时时钟模块程序的设计 从前面已经了解到了时钟芯片的功能很强大,设计这部分程序前,我必须对 DS1302有关日历、时间的寄存器进行深入的了解。 在本设计中 ,我只用到了时间,所以我在这里就只对时间寄存器进行解释,时( 85H、 84H)、分( 83H、 82H)、秒( 81H、 82H)寄存器及控制寄存器( 8FH、 8EH)介绍如表 41 所示。 表 41 时、分、秒、控制寄存器介绍 读寄存器 写寄存器 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 范围 81H 80H CH 10 秒 秒 00~59 83H 82H 10 分 分 00~59 85H 84H 0 0 20时 10时 时 0~23 8FH 8EH WP 0 0 0 0 0 0 0 ——— 从表中,可以很明了的知道以上寄存器的功能和使用方法,需要说明的是控制寄存器的位 7( WP)是写保护位,其他七位都为 0,在对任何时钟和 RAM 进行写操作前, WP必须为 0。 当 WP 为 1 时,禁止对任一寄存器进行写操作,也就是说在电路上电的初始态WP 为 1,必须先将它置为 0,才可进行写操作。 还有 秒寄存器的位 7 位定义为时钟暂停标志( CH)位置为 1 时,时钟振荡器停止, DS1302 时钟芯片处于低功耗状态;为 0 时,时钟开始运行。 例如,执行以下语句,就在时钟芯片中写入了时间 —— 11:20:05。 write_ds1302(0x8e,0x00)。 //去保护 write_ds1302(0x84,0x12)。 //写小时, 11 时 write_ds1302(0x82,0x30)。 //写分钟, 20 分 write_ds1302(0x80,0x01)。 //写秒钟, 05 秒 write_ds1302(0x8e,0x80)。 //写完后,上保护 DS1302 时钟程序流程图如图 45 所示。 第四章 计算器的软件系统设计 20 N N Y Y 图 45 DS1302时钟程序流程图 开始 相关变量初始化 DS1302 去保护 复位端产生一个高电平 写 1302地址 延时 向该地址写数据 地址增加 数据是否写完 复位端产生一个高电平 写 1302 地址 延时 将该地址数据读出 地址增加 数据是否读完 显示数据 南京工业大学本科生毕业设计 (论文) 21 第五章 计算器系统的组装与调试 在本次设计中, C程序是在 Keil 软件中编写并编译的, 在程序编写中主要出现了以下问题: ( 1)在进行编程的时候,因为程序过长过复杂,容易出现少了或多了一个“ }”的现象。 ( 2)有的变量所定义的类型错误,虽然程序没有错误,但仿真后结果错误。 ( 3)事先未被定义的被调函数放在了主调函数的后面,导致错误。 ( 4)事先定义的芯片引脚与仿真图中引脚不是同一个。 ( 5)仿真的结果有时正确有时是乱码,例如: 6+15=21 正确,但若是运算2148787845+26,结果就是乱码。 这是因为系统本身定义的是长整型,而此结果已经溢出,不属于长整型了,我们一眼就能看出是溢出,应该提示 错误信息,但是计算机不能,所以在编写程序时不能直接判断运算结果是否大于长整型,而应该间接判断,判断方法在运算模块的设计中已讲解过。 在 Keil 和 Protues 的联合调试下,经过了多次认真的分析与修改,程序终于能实现我预期的要求。 Protues 仿真如图 51 所示。 第五章 计算器系统的组装与调试 22 图 51 Protues 仿真图 在成功的进行软件仿真后,下一步要做的就是焊接硬件实物了,焊在焊接前一定要认真阅读焊接注意事项,并在万能电路板上对各元件的放置进行合理布局,此时不仅要考虑正面整体的美观,还要考虑背 面布线的方便性,尽可能减少布线的复杂度。 焊接好后要做的就是进行调试,这个过程中遇到的问题如下: ( 1)通过 STCISP 软件把在 Keil 中生成的 .hex 文件加载到单片机中,开机,进行运算,发现液晶屏点亮但不显示任何数据,经过对电路的检查,发现本应接地液晶第 3 脚( VL)接到了电源端,改正后液晶可以显示。 ( 2)液晶虽然可以显示了,但在进行计算时并不能正确显示,经过多次检查,发现硬件并无错误,断定为软件的错误,最后发现软件中液晶初始化不完整,可是在仿真时是正确的,这充分说明了仿真与实际硬件的区别。 经过多 次的调试,我的计算器终于能达到同仿真时一样的效果了。 计算器实物如图 52 所示。 南京工业大学本科生毕业设计 (论文) 23 图 52 计算器实物图 计算器进行各种运算的截图如图 53所示。 ( a)加 (b) 减 (c)乘 (d) 除 第五章 计算器系统的组装与调试 24 (e) 除数为 0 ( f)溢出错误 ( g)时间显示 图 53 运算器各种运算截图 从上图可以看出,我做的计算器在运算部分和时钟部分都能成功地运行了,它可以做到基本的四则运算,还可以正确的显示时间,同时,在计算结果超出它本身的运算范围的时候它会用英文提示错误。 南京工业大学本科生毕业设计 (论文) 25 第六章 总结和展望 我的题目是多功能计算器的设计,对于我们这些实践中的新手来说,这是一次考验。 如何才能把课堂上学到的东西和实际应用中的相结合。 如何能让自己的水平有更多的提高。 如何让自己的计划变得更有序性,而不会忙无一用。 这都是需要我考虑和努力的地方。 通过这次课程设计使我学到很多很多东西,学会了如何让去制定计划,如何去实现这个计划,而且掌握了在执行过程中如何去克服心理上的不良情绪。 不仅加深巩固了以前学过的知识,而且学到了许多书本上没有提到过的知识,学会了一种系统的研究方法,可以进行一些简单的编程。 同时通过这次设计,我体会到了大学四年学习中存在的不足,例如没有深刻的理解以前老师教过的知识,没有系统的掌握所学内容,对 C 语言的运用能力也很差。 本来我是想增加键盘按键来实现除四则基本运算以外的运算功能的,但在实践中我发现并不是我想的那么简单,在编写程序的时候 我遇到了困难,使得我的想法只能被打。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。