科学计算器—单片机课程设计报告_第1页
科学计算器—单片机课程设计报告_第2页
科学计算器—单片机课程设计报告_第3页
科学计算器—单片机课程设计报告_第4页
科学计算器—单片机课程设计报告_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

单片机课程设计报告 计算器设计班级:2008级通信工程二班学号:*姓名:陶庆权日期:2011.3.25目 录一、设计任务和性能指标11.1设计任务11.2性能指标1二.设计方案2三.系统硬件设计23.1单片机最小系统23.2键盘接口电路33.3数码管显示电路33.4按键提示电路3四、系统软件设计44.1键盘扫描子程序设计44.2运算程序设计54.3显示子程序设计54.4主程序设计5五、调试及性能分析65.1调试步骤65.2性能分析7六、心得体会7参考文献7附录1 系统硬件电路图8附录2 程序清单8-1822一、设计任务和性能指标设计任务基本功能:利用89c51作为主控器组成一个四则运算的计算器。发挥部分:增加一种以上的科学计算功能。可选器件:51系列单片机、6264、7段LED数码管、74LS244或74LS240、与非门等二.设计方案按照系统设计的功能的要求,确定设计系统由主控模块、显示模块、按键提示模块、键扫描接口电路、扩张功能模块共五个模块组成,电路系统构成框图如图1.1所示。主控芯片使用51系列STC89C54单片机。键盘电路采用4*4矩阵键盘电路。显示模块采用4位共阴极数码管。按键提示电路采用5V扬声器。三.系统硬件设计3.1单片机最小系统单片机最小系统就是支持主芯片正常工作的最小电路部分,包括主控芯片、复位电路和晶振电路。主控芯片选取STC89C54RC芯片,因其具有良好的性能及稳定性,价格便宜应用方便,可直接用USB线下载代码。晶振选取11.0592MHz,晶振旁电容选取20pF。采用按键复位电路,电阻分别选取100和10K,电容选取0.1F。以下为单片机最小系统硬件电路图。 单片机最小系统硬件电路3.2键盘接口电路: 计算器所需按键有: 数字键:0、1、2、3、4、5、6、7、8、9. 功能键:。+、- 、*、/ 、 = 、C( 清零)。 共计16个按键,采用4*4矩阵键盘,键盘的行和列之间都有公共端相连,四行和四列的8个公共端分别接P1.0P1.7,这样扫描P1口就可以完成对矩阵键盘的扫描,我们就可以得到是哪个键按下,从而完成键盘的功能。 以下为键盘接口电路的硬件电路图: 键盘接口电路3.3数码管显示电路 本课程设计采用八位数码管显示,为了节约I/O口资源,从而采用动态扫描的方式,P0口段选,P2位选,由于是P0口段选所以要接上拉电阻,显示电路部分如下:数码显示电路硬件电路图3.4按键提示电路 按键提示电路就是在有按键的时候提示有键按下,发出声音提示,提示使用者按键有效。 这里就采用5V扬声器作为提示设备,由P3.7对其进行控制。 系统整体硬件电路图见附录一四、系统软件设计4.1键盘扫描子程序设计采用先令高四位为低电平,高四位为高电平,然后看扫描键盘,看哪一列按下,再使高四位为高,低四位为低。再扫描行,进而确定是哪个键按下。键盘部分的子程序如下:uchar Keyscan(void)uchar i,j, temp, Buffer4 = 0xef, 0xdf, 0xbf, 0x7f;for(j=0; j4; j+)P1 = Bufferj;/*以下三个_nop_();作用为让 P1 口的状态稳定*/delay();temp = 0x01; for(i=0; i4; i+)if(!(P1 & temp) return (i+j*4);temp = 1;结合主程序部分的代码,实现键盘扫描。4.2运算部分程序设计本部分采用全局变量a、b、c、d,将运算的结果都存入这几个变量里,通过将这些变量的值分部分存入数组里的各个元素,从而改变显示的值。程序见附录二。4.3显示子程序设计显示部分采用定时中断方式,每隔一段时间扫描一次数组xx,从而使得各个时段数组中的数值显示在数码管上。代码如下: void diaplay(void) interrupt 1uchar len;TH0=(65536-2000)/256;TL0=(65536-2000)%256;P2=Disbufdcounter;len=dcounter; P0=xxlen; dcounter+=1;if(dcounter=8)dcounter=0;4.4主程序设计 主程序既把以上各子程序串连成一个整体,使整个程序循环运行,同时启动定时。中断部分的显示部分与主程序部分独立,一直执行;主程序一直调用扫描电路,若有键按下,则会进入以下的主程序部分执行相应的运算操作并作出相应的处理。通过计算后,数组内的值发生改变,显示的值也会同时发生改变。之后再进行键盘扫描,如此反复运行,就构成了程序的整体。整体程序清单见附录二。五、调试及性能分析5.1调试步骤 焊接前考虑好布局,采用较为合理的一种,为了使得板子简洁不易出错,采用公共电源和地。焊接插槽时先不要把所有的引脚都焊接上,以免在后面发现错误时无法再改变布局。应先焊好两个引脚以固定好插槽就够了。 在焊接好器件后,先不要将芯片插在芯片座上,要先验证先板上电源是否好用,有无短路等。接上USB电源,用万用表测量个芯片座对应电源和地之间的电压值,观察电压值是否正常。再插上单片机测试最小系统是否可用,一切正常后方可将其它芯片插入芯片座,以继续测试其他功能。 将芯片插上后,对各个模块进行调试,按键是否工作正常,数码管是否显示正常等。编写相关部分的测试程序对其进行测试。 各部分硬件检测无误后,下载程序进行整体调试,一切正常后,结束调试过程。成功下载程序后,查看结果,发现数码管显示数值不正常,首先测试是否是数码管有损坏,自己编一个点亮所有数码管所有段的程序进行测试,结果发现所有数码管e端不亮,说明数码管正常,而是前面部分的电路或芯片有问题。通过用电压表测试发现是芯片74ls244损坏,输入端对应的输出端输出数值出现反向现象,从而导致前面的结果。更换好的芯片后,从新下载计算器程序显示出现新的乱码问题。归零后显示的数值不是零,而是乱码,自习观察发现刚好是显示零的显示数值按相反的顺序排列显示出来的情况,从而可以断定是P0口的各个位与74ls244接口的顺序接反了,调整后归零正常显示0。通过以上的修正后仍不能进行正常的计算,同样出现乱码,最后考虑到我程序中采用了P3口引脚控制扩张功能,而P3口是有部分引脚接在下载电路部分max232芯片上,肯定会有一定影响,用电压表测试其对应引脚电压发现电平有变化,故可以确定会影响程序的执行,撤去MAX232后可正常运行。 5.2性能分析 对于计算器的性能,主要的衡量指标就在于计算的精度,本次制作的计算器性能情况如下:加法运算:8位加法运算,和值不超过一亿,若超过上限,则显示错误提示ERROR,扬声器报警提示。减法运算:8位减法运算,若结果为负,提示ERROR。乘法运算:积不超过一亿的乘法运算,若超出上限,显示错误提示ERROR,扬声器报警提示。除法运算:支持小数运算,结果最大保留四位小数,若除数为0,则输出ERROR扬声器报警提示。小数运算:可支持小数输入运算,结果最大精确到0.0001,优先显示整数部分,剩余部分显示小数,不显示无效的零。扩展功能:支持求自然对数,常用对数,开方,求e的幂次运算。所有功能的计算都通过了与电脑计算器计算结果的对比验证,完全符合运算要求。通过对实际性能的分析,可以得到本次设计满足设计的要求。六、心得体会本次单片机课程设计是学了单片机后的第一次实际应用,获益匪浅。通过本次课程设计我真正的自己完成了对给定要求系统的硬件选择及设计、电路设计、软件设计以及对成品的调试过程。通过本次试验发现自己可以通过自己的知识真正做出可以实际应用的电子产品,增强自己的自信心,在设计过程中发现问题,解决问题,虽然过程有点累,但通过学习又扩张了自己的知识面,学到了新的单片机内容。刚开始写程序时问题一大堆,就算是写个小程序验证下自己的某个想法都很吃力,但经过痛苦的四天钻研后,才有了实质的进展,第五天基本写出了程序,第六天完善了扩展功能同时消除了执行过程的按键稳定性问题,使得可以在长期按下键的时候同样不会影响数字的输入,在调试过程中同样经历了诸多问题,这些在“调试步骤”部分做了详细说明,由于只有我做了八位显示的计算器,且做了部分扩张功能和支持小数运算,与其他人都的不同,故出现问题都得完全靠自己解决,虽然有难度,但更有挑战性和成就感,相信在以后的学习工作中会大有裨益的。在收获的同时也发现了自己诸多方面的不足,基础知识不够扎实,实际操作还不够熟练,很多东西都只停留在理论上,对于实际的硬件器件及芯片不够了解,在应用时比较吃力,说明没有将理论很好的与实际联系,同时自己电子方面知识面还不够广,应该加强在电子方面的相关知识,提高自己的电子专业技能 。参考文献1 刘琨 孙春亮.单片机C语言入门.人民邮电出版社,20082 杨辉先 黄辉先.单片机原理及应用.人民邮电出版社,20093 谭浩强 .C语言程序设计.清华大学出版社,20084 姜志海 赵艳雷.单片机的C语言程序设计与应用,2008附录1 系统硬件电路图附录2 程序清单#include#include#includetypedef unsigned char uchar;typedef unsigned int uint;void delay();uchar Keyscan(void);void result_a(void);void diaplay(void);void Delay_1ms(uint i);uchar vie_a10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uchar exchg_a16=7,8,9,13,4,5,6,12,1,2,3,11,14,0,15,10;uchar xx8;uchar xxu8;void Speak_a(void);sbit spp=P37;/响铃sbit cl3=P36;/小数点sbit cl=P31;/求lnsbit cl0=P32;/开方sbit cl1=P33;/求logsbit cl2=P34;/求e的x次幂uchar flo10=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;uchar zz8=0x77,0x3f,0x77,0x77,0x79;uchar Disbuf8=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;uchar yy8=0x3f,0,0;float a=0,b=0,c;uchar L=1;uchar cal_a=0,dcounter=0;void main(void)uchar singlp_a=1,n=1;uchar key=18;uchar all_m=0,ent_a=0,att=1;signed long s,r;TMOD=0x01;TH0=(65536-2000)/256;TL0=(65536-2000)%256;EA=1;ET0=1;TR0=1;spp=0;while(1)if(singlp_a=1)singlp_a=0;P3=0x7f;if(P3!=0x7f)Delay_1ms(2);if(cl=0)Speak_a();cal_a=14;/求以xkey=15;if(cl0=0)Speak_a();cal_a=15;/开方key=15;if(cl1=0)Speak_a();cal_a=16;/求以十为底对数key=15;if(cl2=0)Speak_a();cal_a=17;/求e的x次幂key=15;if(cl3=0)att=0;xx0=xx0+0x80; P1=0x0f;if(P1!=0x0f)Delay_1ms(2);if(P1!=0x0f)key=exchg_aKeyscan();Speak_a();P1=0x0f;P3=0x7f;if(P1=0x0f&P3=0x7f)singlp_a=1;if(key=0)if(all_m=0)if(ent_a=0)uchar i;ent_a=1;for(i=0;i0;i-)xxi=xxi-1;xx0=vie_akey;key=18;elseuchar i;double m;for(i=7;i0;i-)xxi=xxi-1;xx0=vie_akey;m=key;for(i=1;i0;i-)xxi=xxi-1;xx0=vie_akey;key=18;elseuchar i;double m;for(i=7;i0;i-)xxi=xxi-1;xx0=vie_akey;m=key;for(i=1;i=10&key=13)uchar i;cal_a=key;for(i=0;i=7;i+)xxi=xxui;all_m=1;key=18;att=1;n=1;if(key=14)uchar i;key=18;ent_a=0;for(i=0;i=7;i+)xxi=yyi; a=0;b=0;c=0;all_m=0;L=1;att=1;n=1;cal_a=0;if(key=15)uchar i;all_m=0;key=28;for(i=0;i=0.0001)r=c;s=10000*(c-r);n=0;xxn=vie_as%10;if(s%10!=0)n+;if(c=0.001)r=c;s=1000*(c-r);xxn=vie_as%10;if(n=0&s%10=0)elsen+;if(c=0.01)r=c;s=100*(c-r);xxn=vie_as%10;if(n=0&s%10=0)elsen+;if(c=0.1)r=c;s=10*(c-r);xxn=vie_as%10;if(n=0&s%10=0)elsen+;if(c=1)s=c;xxn=flos%10;n+;if(c=10)s=c/10;xxn=vie_as%10;n+;if(c=100)s=c/100;if(n=8)uchar i;for(i=0;i=1000)s=c/1000;if(n=8)uchar i;for(i=0;i=10000)s=c/10000;if(n=8)uchar i;for(i=0;i=)s=c/;if(n=8)uchar i;for(i=0;i=)s=c/;if(n=8)uchar i;for(i=0;i=)s=c/;if(n=8)uchar i;for(i=0;i=)for(i=0;i=7;i+)xxi=zzi;elsexxn=0xbf;elsexxn+1=0xbf;xxn=0x3f;elsexxn+2=0xbf;xxn+1=0x3f;xxn=0x3f;else xxn+3=0xbf;xxn+2=0x3f;xxn+1=0x3f;xxn=0x3f;void result_a(void)switch(cal_a)case 0:c=a;break;case 10:c=a+b;break;case 11:if(ab)uchar i;for(i=0;i=7;i+)xxi=zzi;L=0;elsec=a-b;break;case 12:c=a*b;break;case 13:c=a/b;break;case 1

温馨提示

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

评论

0/150

提交评论