基于单片机的整数的加减乘除运算计算器设计毕业论文_第1页
基于单片机的整数的加减乘除运算计算器设计毕业论文_第2页
基于单片机的整数的加减乘除运算计算器设计毕业论文_第3页
基于单片机的整数的加减乘除运算计算器设计毕业论文_第4页
基于单片机的整数的加减乘除运算计算器设计毕业论文_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

毕业设计课题基于单片机的整数的加减乘除运算计算器设计学生姓名学号专业机电一体化班级院(系)机械与电子信息工程学院指导教师职称2014目录摘要1Abstract1设计要求21方案22系统和主要功能2计算器的硬件设计31.1位数码管动态显电路31.2LED数码显示器41.38255接口芯片41.4数码管显示模块51.5按键模块61.64×4矩阵键盘识别处理电路7计算器的软件设计72.1主程序流程及模块设计82.2总程序模块9调试结果及分析10参考文献11附录一:总体原理图12附录二:总程序13致谢14PAGE摘要近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。因此,单片机的应用已经越来越贴近生活,用单片机来实现一些电子设计也变得容易起来。计算器在人们的日常中是比较的常见的电子产品之一。可是它还在发展之中,以后必将出现功能更加强大的计算器,基于这样的理念,本次设计是用单片机来设计的计算器。该设计系统是以AT89C51为单片机,P0口作为输入端,外接4X4的键盘。通过键盘扫描来对输入数的控制,在P1口、P2口接了驱动电路,用来保证LED的工作正常。计算器将完成的功能有加,减,乘,除等功能。关键词:计算器,单片机,LCD,矩阵键盘Abstract

Withtherapiddevelopmentofscienceandtechnologyinrecentyears,theapplicationofSCMisthedeepeningandpromotethetraditionalcontrollingdetectiontechnologiesthatareincreasinglyupdated.Inreal-timedetectionandautomaticcontrolofmicrocomputerapplicationsystem,themicrocontrollerisoftenusedasacorecomponenttouse,butonlytheknowledgeofthemicrocontrollerisnotenough,andshouldbebasedonthespecifichardwarearchitecture,hardwareandsoftwarecombinationtomakeitThedesignsystemisbasedonAT89C51microcontroller,P0portasinput,external4X4keyboard.InP1,P2mouthisconnectedwiththedrivecircuittoensurethenormalworkofLED.Thecalculatorwillcompleteadd,subtract,multiply,divideandotherfunction.

KEYWORDS:calculator,MCU,LCD,Matrixkeyboard设计要求该计算器4*4矩阵键盘的16个按键分别代表不同的功能,包括0到9这10个数字和加,减,乘,除,等于,复位这6个功能键。开机启动,第四位数码管小数点亮,8位数码管的前四位显示前面输入的加数,被减数,被除数,乘数,后四位用于显示后输入的加数,减数,乘数,除数,复位键用于计算器恢复初始化,当输入加数和被加数时,显示器上显示的数字像平时用的计算器输入一样,即:每输入一个数字,原来显示的数字要往左移,当输入出错时(例如除数为零),调用报错子程序,数码管显示“ERROR”。方案操作显示设备显示设备采用八片七段共阴极LED显示器,共设臵16个键,其中数字键0~9共十个,接下来依次是加号键、减号键、乘号、除号、等于号、复位键。“清除键”表示程序初始化,为下次输入准备。程序实现功能a.十进制加减乘除计算:输入范围为(1~999),结果可以显示7位,计算结果可以精确到小数点后4位;b.计算机复位功能:复位均为清零重启,任何时候按下复位将重新开c.报错子程序是当系统计算出错时候,控制数码管自动显示“ERROR”,然后系统自动复位。系统的主要功能该系统使用了1块STC89C52RC单片机,主要性能有:1.4KByte程序存储器,存储量更大2.工作频率从静态到33MHz,更加灵活3.32根IO端口,方便使用4.内臵两个16位定时计数器,利用单片机周期工作,方便控制且可靠性高5.包含了全双工串行接口,方便与电脑或其它终端通信6.内臵看门狗,防止程序跑丢,在外界环境突变时可自行复位继续工作第一章计算器的硬件设计1.1位数码管动态显示电路硬件电路如下图所示:1.2LED数码显示器LED数码管的g~a七个发光二极管因加正电压而发亮,因加零电压如上图,a,b,c,d,e,f,g,h控制数码管的段,1,2,3,4,5,6,7,而不以发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为字行码,字行码见下表:动态扫描方法动态接口采用各数码管循环轮流显示的方法,当循环显示频率较高时,利用人眼的暂留特性,看不出闪烁显示现象,这种显示需要一个接口完成字形码的输出(字形选择),另一接口完成各数码管的轮流点亮(数位选择)。(1)在进行数码显示的时候,要对显示单元开辟8个显示缓冲区,每个显示缓冲区装有显示的不同数据即可。(2)对于显示的字形码数据我们采用查表方法来完成。系统板上硬件连线(1)把“单片机系统”区域中的P2.0-P2.7用8芯排线连接到“动态数码显示”区域中的a-h端口上;(2)把“单片机系统”区域中的P1.7-P1.0用8芯排线连接到“动态数码显示”区域中的1-8端口上;1.34×4矩阵键盘识别处理电路每个按键有它的行值和列值,行值和列值的组合就是这个按键的码。矩阵的行线和列线分别通过两并行接口和CPU通信。每个按键的状态同样需变成数字量“0”和“1”,开关的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。键盘功能表如图键盘硬件电路如下:如图所示键盘硬件电路,用排线将行的1~4和单片的P0.0~P0.3连起来,列的5~8和单片机的P0.4~P0.7连接。:第二章抢答器的软件设计2.1总体系统流程图如下:2.2模块介绍该计程计价系统的软件设计分为以下几个模块:(1)主程序模块主程序主要完成初始化、检查有无按键按下、计算求答、以及调用显示等等。(主程序如电子版文档所示)(2)键盘扫描及识别子程序键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一旦有按键按下,便转向相应的子程序处理,处理结束再返回。(3)显示子程序采用动态显示,一位一位的轮流显示各显示管。,所以只须用P2口控制段,P1口的低位控制其位。(4)计算程序根据输入的符号采取不同的算法,当然也是本程序的关键所在。对应输入数值,计算出输入量,供显示子程序使用,而对符号量则根据前次和后次的数值计算其结果。(5)报错子程序当系统计算出错时候,控制数码管自动显示“ERROR”,然后系统自动复位。2.2总程序模块#include<reg52.h>#include<intrins.h>#defineLintlongint#defineuintunsignedint#defineucharunsignedcharsbitled=P2^3;sbitSCK_595=P2^0;sbitDS_595=P2^1;sbitRCK_595=P2^2;ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//数码管段码表/****************定义全局变量*******************/Lintstore[2]={0};//存取按键值和结果的数组ucharflag_op=0;//+,-,*,/操作符标志符ucharflag_order=0;//输入数的顺序标志符ucharflag_equal=0;//等于号标志符ucharkey=16;//按键值/*****************延时函数*********************/voiddelay(uintx){uinti,j;for(i=x;i>0;i--)for(j=110;j>0;j--);/*****************595写函数********************/voidwrite_595(ucharwrdat)uchari;SCK_595=0;RCK_595=0;for(i=0;i<8;i++){DS_595=wrdat&0x80;wrdat<<=1;SCK_595=0;_nop_();_nop_();SCK_595=1;_nop_();_nop_();SCK_595=0;}RCK_595=0;_nop_();_nop_();RCK_595=1;_nop_();_nop_();RCK_595=0;}/****************显示函数*********************/voiddisplay(Linttemp){uintbuf1,buf2,i=0;buf1=temp/10000000;if(buf1>=10||temp<-9999999)//数据溢出,显示错误00000000{led=0;P2=(P2&0x0f)|0x80;for(i=0;i<8;i++){write_595(table[14]);P2=P2+0x10;}}elseif(temp<0&&temp>=-99999999)//显示负数{led=1;P2=0x70;do{buf2=temp%10;P2=P2+0x10;write_595(table[buf2]);delay(4);temp=temp/10;}while(temp!=0)switch(flag_op){case1://加法运算store[0]=store[0]+store[1];flag_op=0;flag_order=0;store[1]=0;//输入的第二个数清零break;case2://减法运算store[0]=store[0]-store[1];flag_op=0;flag_order=0;store[1]=0;//输入的第二个数清零break;case3://乘法运算store[0]=store[0]*store[1];flag_op=0;flag_order=0;store[1]=0;//输入的第二个数清零break;case4://除法运算store[0]=store[0]/store[1];//计算结果,存入第一个数flag_op=0;//操作符清零flag_order=0;//输入顺序标识符清零,显示结果store[1]=0;//输入的第二个数清零break;}flag_equal=0;}}/*****************主函数*****************/voidmain(){while(1){key=KeyScan();//键盘扫描if(key>=0&&key<=9)//如果key在0到9之间,证明键盘按下的是数值{if(store[flag_order]<10000000){store[flag_order]=store[flag_order]*10+key;}key=16;}if(key==14)//如果key为14时,证明键盘按下的是CE键{P2=(P2&0x0f)|0x80;write_595(table[0]);store[0]=0;//数据清零store[1]=0;flag_op=0;flag_order=0;flag_equal=0;key=16;}YunSuan();display(store[flag_order]);}}第三章调试结果及分析本设计主要是在编写的程序编译通过后,用下载软件将编写的程序下载到实验开发板上,验证结果是否满足设计要求。主要通过按键部分进行控制,通过数码管和LED灯部分进行观察。经验证,开机启动后,第四位数码管小数点亮,8位数码管的前四位显示前面输入的加数,被减数,被除数,乘数,后四位用于显示后输入的加数,减数,乘数,除数,复位键用于计算器恢复初始化,当输入加数和被加数时,显示器上显示的,只有开始按下数字后才有效,能够准确的对整数进行计算,满足设计要求。参考文献[1]何立民.《MCS-51系列单片机应用系统设计》,北航版,1991年2月[2]谢嘉奎.《电子线路(非线性部分第四版)》,高等教育出版社,2008年6月[3]刘桂敏.单片机系统中复合键和一键多功能的设计[J],辽宁科技大学学报,2011年3月[4]胡汉才.《单片机原理及其接口设计》,清华大学出版社,1997年6月[5]刘杰,梁华国.矩阵式静态编码键盘及其接口电路[J],阜阳师范学院学报(自然科学版),2004年4月[6]张红,于平,程文播.基于单片机控制的LED点阵显示屏系统[J],微计算机信息,2009年6月[7]徐玮.51单片机综合学习系统——1602字符型液晶显示篇[J],电子制作,2008年8月[8]王效华、张咏梅.《单片机原理及应用》,北京交通大学出版社,2007年3月[9]赵亮.单片机从入门到精通系列讲座——矩阵键盘应用[J],电子制作,2008年7月[10]胡花.《单片机原理及应用技术》,江西高校出版社2008年7月[11]彭伟.《单片机C语言程序设计实训100例》,电子工业出版社,2009年2月[12]王东峰,王会良,董冠强.《单片机C语言应用100例》,电子工业出版社,2009年6月[13]陈洪财.《单片机C语言和汇编语言使用开发技术》,哈尔滨工程大学出版社,2008年1月附录一:总体原理图总体原理图如图所示:附录二:总程序#include<reg52.h>#include<intrins.h>#defineLintlongint#defineuintunsignedint#defineucharunsignedcharsbitled=P2^3;sbitSCK_595=P2^0;sbitDS_595=P2^1;sbitRCK_595=P2^2;ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//数码管段码表/****************定义全局变量*******************/Lintstore[2]={0};//存取按键值和结果的数组ucharflag_op=0;//+,-,*,/操作符标志符ucharflag_order=0;//输入数的顺序标志符ucharflag_equal=0;//等于号标志符ucharkey=16;//按键值/*****************延时函数*********************/voiddelay(uintx){uinti,j;for(i=x;i>0;i--)for(j=110;j>0;j--);/*****************595写函数********************/voidwrite_595(ucharwrdat)uchari;SCK_595=0;RCK_595=0;for(i=0;i<8;i++){DS_595=wrdat&0x80;wrdat<<=1;SCK_595=0;_nop_();_nop_();SCK_595=1;_nop_();_nop_();SCK_595=0;}RCK_595=0;_nop_();_nop_();RCK_595=1;_nop_();_nop_();RCK_595=0;}/****************显示函数*********************/voiddisplay(Linttemp){uintbuf1,buf2,i=0;buf1=temp/10000000;if(buf1>=10||temp<-9999999)//数据溢出,显示错误00000000{led=0;P2=(P2&0x0f)|0x80;for(i=0;i<8;i++){write_595(table[14]);P2=P2+0x10;}}elseif(temp<0&&temp>=-99999999)//显示负数{led=1;P2=0x70;do{buf2=temp%10;P2=P2+0x10;write_595(table[buf2]);delay(4);temp=temp/10;}while(temp!=0)switch(flag_op){case1://加法运算store[0]=store[0]+store[1];flag_op=0;flag_order=0;store[1]=0;//输入的第二个数清零break;case2://减法运算store[0]=store[0]-store[1];flag_op=0;flag_order=0;store[1]=0;//输入的第二个数清零break;case3://乘法运算store[0]=store[0]*store[1];flag_op=0;flag_order=0;store[1]=0;//输入的第二个数清零break;case4://除法运算st

温馨提示

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

评论

0/150

提交评论