单片机课程设计报告---计算器.docx
《单片机课程设计报告---计算器.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告---计算器.docx(20页珍藏版)》请在课桌文档上搜索。
1、目录:1、 课题目标22、 系统总体设计方案规划与选定23、 硬件设计24、 软件设计31. 1主程序流程图44. 2键盘读取程序流程图55. 3显示函数流程图66. 4数值转换流程图65、 调试76、 新增功能及实现方法107、 小结与体会118、 参考文献129、 附录(源程序代码、电路图等)121 课程目标设计一个计算器,实现两个4位数(含整数和小数)的加减乘除,运算功能数据输入及运算结果显示与平时使用计算机相同。用8279接口实现,4*5键盘及8位LED灯显示。20个键包括09共10个数字键,+,共4个运算键,键,小数点键以及清零键,剩余3个键可以自由发挥。系统复位后,应在最右边LED
2、上显示0。2 .系统总体设计方案规划与选定由于本学期学习了C51单片机的课程,此次的单片机选择了AT89C51,同样因为前段时间的实验使用过LED,所以这次显示屏幕还是选择了LED的显示屏,方便操作和使用。接口部分课程规定要用8279,其功能十分强大,读取键盘等都十分便利,利于LED灯和键盘的扩展,其中还使用了74HC138,74LS373配合电路的实现和连接。3 .硬件设计AT89C51通过8279扩展键盘和LED灯,其中PO口作为单片机芯片与8279传递命令,状态,数据的端口,P2口通过P2.0的状态来区分8279是状态字传送还是数据传送。INTO与8279的IRQ连接,当有键按下时会产生
3、一个中断,从而执行中断程序。8279中的SL0,SLbSL2产用编码模式,通过一个74H的38可以控制8条线,其中4条线分别和键盘行线相连接,作为扫描线。同时8279中的RL04作为键盘的列线,当键盘上有键按下时,可以通过扫描值和返回值得到键的准确位置,从而根据位置执行不同的函数。8279的OUTA,OUTB共8个端口通过一个74LS373与LED相连,作为LED的数据线,而8个LED灯的片选端由8279的SL0,SLl,SL2控制。(详细电路图见附录一)4 .软件设计4.1主程序流程图4.4数字转换流程图5 .调试电路图调试:将程序放入单片机后,在实际运行的时候发现显示屏上出现了相同的乱码,
4、按下键盘不能改变显示。在检查了一遍连线后,我们对器件也进行了一次检查,发现我们在器材选择时选择了共阳极的LED灯,于是我们上网查了共阴极LED的编号并改了过来。但在运行时发现还是无法正常显示,我们决定一步一步执行来找到问题所在。我们在按下开关时,观察开关两端的电位变化发现无论开关按下与否,开关右侧始终显示高电平,导致键盘返回值一直是零而无法产生中断。我们尝试将电阻去掉后发现键盘的电位变化正常了。我们再次运行程序,发现键盘可以引起显示的变化,但是显示的全部都是乱码,与我们设想的不一样。我们首先检查了一遍键码表,发现没有问题后我们再次检查了连线,看各个端口的连接是否有问题。通过反登检查和8279功
5、能键的比对,我们发现OUTA,OUTB这两个口在作为输出口的时候是OUTA作为高4位的,我们连错了位置,结果导致显示结果出现了很大的偏差。电路图是修改程序的基础,只有在电路图正确的基础上我们才能准确的判断程序的正确性。经过多次的调试之后,电路图终于可以正常工作了。程序调试:整个程序比较长,因此我们将整个程序分成4个部分来编写和分析,包括键盘读取程序,显示程序,数值转化程序以及主程序和中断程序等连接程序。首先是对主程序和中断程序的检查,主要是状态字的书写时候正确,有没有正确清零LED灯:这部分的问题比较少,基本没有浪费太多时间。键盘读取程序:键盘读取程序的编写比较麻烦,需要考虑数字键和功能键的区
6、别。在实际运行过程中,当我们在按下功能键后发现不能对先前输入的数清除,当有数字键按下后会跟在原先的数字后显示出来。这应该是属于功能键部分的问题,我们通过检查发现我们在功能键部分忘了给它赋值。解决这个问题后我们又发现当我们按下清零键后,再按小数时小数位数会发生叠加的现象,我们不得不再次检查清零键部分,反复比对之后发现我们在清零之后没有对记录小数位数的变量清零,导致小数位数山错。在键盘读取程序中,我们还需要对输入的各个数字转化为能运算的数值,这个我们同样是通过一个小数点标志位来判断,对其进行不同的操作,达到运算的要求。其中运算同样是在这里完成,在完成运算后将结果作为返回值。显不程序:显示程序部分程
7、序比较短,主要是对有无负数,有没有无效零的判断。通过负数标志位来判断负数,通过从后向前循环查询的方式将数组中的无效零都清除,并改变数值的显示长度。运行时我们发现一旦出现了负号,我们在按下清零键之后发现不能将负号给清除。我们首先尝试了清空FlFo和显示RAM的操作,发现并没有能解决这一问题,后来我们又检查了一遍清零程序,发现我们漏掉了负号标志位的赋值。因为这是后来加上的功能,导致遗漏了这样一个小问题,让我们寻找了很长时间。数值转化程序:这部分是十分重要的一部分,需要将计算得出的结果转化成一个一个的数字才能实现LED的显示。数值转化过程我们用的大体思路是将结果都转化成小数,然后乘以10取整就能得到
8、一个一个数字了。这一部分其实并不是很难,但最关键的是在于小数位数的判断上。我们设计的小数位数标志位pointx和pointy来记录数字的小数位数,然后再根据它们所做的运算来确定小数位数,例如乘法的最大小数位数是POintX+pointy(若有无效零将在显示部分去除),而除法我们直接默认小数位数为8以提高准确性。在经过转化时会做出一定的调整,并在整数部分最后一个数加上小数点。这块内容给我们带来了很大的问题,让我们花费了很长的时间。主要问题还是处在小数位数的问题上,一开始当我们按下一个小数后,第二个数默认的就是和前一个数的小数位数相同,但这不是我们想要的结果,经过分析我们觉得可能还是小数标志位的问
9、题。在对其检查时发现我们在按下第二个数时没有考虑到前一个己经对标志位赋值因此影响了后一个数的输入,我们在其后加入了一个标志位清零语句,顺利解决了这个问题。但随之而来的问题是我们发现最后计算的结果总是和两个位数之和相同,虽然还是位数的问题但是这次不是标志位的问题,而是出在了函数参数的问题上,我们在定义那个参数时使用的不是全局变量导致前面程序执行中对其的赋值不能在这个函数内使用,结果每次都执行最开始的语句而不能执行下面的判断语句。重新定义之后这一问题也得到了很好的解决。这一部分的程序我们经过了多次的调整,修改了很多,终于能够实现基本的操作和数字的正常显示。6 .新增功能及实现方法这次因为时间的原因
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 报告 计算器

链接地址:https://www.desk33.com/p-1021096.html