《基于单片机的简易计算器(优秀论文).docx》由会员分享,可在线阅读,更多相关《基于单片机的简易计算器(优秀论文).docx(27页珍藏版)》请在课桌文档上搜索。
1、本科毕业论文题目:基于单片机的简易计算器学院:物理与电子信息学院专业:电子信息工程年级:10电子信息工程姓名:覃海洋指导教师:丛梦龙完成日期:2023.4.15目录摘要3Abstract错误!未定义书签。弓I言错误!未定义书签。一、系统总体设计61设计概述61.2系统整体模块图61. 3实现方案6二、硬件系统设计72. 1AT89S52单片机72. 2单片机复位电路82 .3单片机的外接晶振电路93 .44x4矩阵健盘91. 5八段LED数码管92.651单片机最小系统15三、程序调试与系统仿真113. 1程序调试113. 2程序流程图262. 3系统仿真27结语28主要参考文献29致谢23摘
2、要近十年来,随着科学技术的提高,电子行业开展迅速,各种电子产品应运而生,其中基于单片机的各类器件更新尤其显著。在日常的生活中,电子产品无处不在,所涉及的领域十分广泛。计算器是人们日常生活的重要工具,其帮助人们快捷地完成一些繁琐的计算,因此一款好的计算器可以给人们的生活带来极大的便易。根据以上背景,本设计旨在研究一款简单便捷的计算器,方便人们的日常生活。同时,本设计的大致思想为-设计以AT89S52单片机作为主控芯片,采用4x4矩阵键盘做为输入,以4位八段数码管做显示,可以进行无符整数的加、减、乘、除运算,具有清零复位功能,并带有溢出提示。这样的一款计算器可以满足人们日常的计算需求。同时,考虑到
3、时代环境的要求,本设计的所有程序均采用C语言编写,这样不仅可以降低程序的编写难道,而且可以便于日后程序的移植、修改、升级。设计中用以两片8位三态锁存器74HC573D来对数码管的地址和数据进行锁存,同时用蜂鸣器来作为溢出报警提示。单片机的晶振电路和复位电路均采用常规电路。关键词:AT89S52;计算器:矩阵键盘;数码管AbstractOverthepastdecade,withtheimprovementofscienceandtechnology,theelectronicsindustrydevelopedrapidly,avarietyofelectronicroductsemerged
4、,andvarioustypesofmicrocontroller-baseddeviceupdateareparticularlysignificant.Ineole,sdailylife,electronicproductsareinawiderangeofareas.Calculatorisanimportanttoolforpeoplesdailylife,whichhelpspeoplequicklycompleteSometediouscalculations,soHgoodcalculatorCanbringtoeolegreatlyeasy.Thisstudydesigneda
5、simpleandConvenientcalculatortofacilitatepeopledailylife.Meanwhile,thegeneralideaofthisdesignis-AT89S52microcontrollerasthemasterchip,using4x4matrixkeyboardasinputto8eightdigitaltubetodo,itcandoanUnsignedintegeradd,subtract,multiply,anddivideoperation.Inaddition,ithasclearandresetfunction,andwithOve
6、rflowpromptseSuchacalculatorcanmcetpeople,scomputingneeds.Atthesametime,takingintoaccountIheenvironmentalrequirementsofthetimes,allProgramsaredesignedbytheCIanguage9SOitcanreducetheworkofwritingprograms,andcanfacilitatefuturetransplantprocedures,modifications,upgrades.Thecalculatoruseseight-bitetri-
7、state74HC573Dtolatchtheaddressandthedataof(hedigital,andusebuzzerasanoverflowalarm.Single-chipcystaloscillatorcircuitandresetCircuitareusedbytheconventionalcircuit.Keywords:AT89S52;CalCUIator;MatriXkeyboard;8digitaltube引言随着科技的提高,人们对于电子产品的需求日益增强,一款好的电子产品不仅要物美价廉,而且应该简单易懂。生活中,计算无处不在,小到日常的小计算,大到科技尖端的开展。
8、日常生活中计算器的种类繁多,有些计算器的功能过于强大,甚至涉及到按键的复用,这样一来反而不便于老人及小孩的使用,在浪费了资源同时,也有可能给人们带来不舒心的体验。因此,需要一款设计旨在制作一款简单易操作的计算器,能够完成对无符号整数加、减、乘、除计算即可,这样已经可以满足人们在日常生活中对一些简单数据的运算,以方便人们的日常生活,提高其生活质量。同时,要尽可能地运用易得的器件,这也是产品设计的一个出发点,故本设计采用市场上常见的AT89S52单片机作为核心芯片,以4x4矩阵键盘做输入,以8段LED数码管的动态扫描来做输出显示,其中用8位三态锁存器74HC573D来对数码管的地址和数据进行锁存,
9、用蜂鸣器来进行溢出提示,对单片机的外围晶振和复位均采用常规电路。其中,用C语言来完成对程序各个局部的编写,这样不仅可以减小编程的难度,而且易于以后对程序的移植、修改和升级。通过完成此次设计,可以进一步加强对单片机理论的学习,有利于掌握其它电子模块如数码管,矩阵键盘等,而且能够熟悉并掌握单片机开发常用的软件如:PROTEUS,KEIL,STC-ISP等,进一步提高自身的实际动手能力,深化而系统地理解嵌入式的软硬设计思路。这样,有利于日后更高层次的学习,丰富单片机产品的开发经验,能够更加快速的融入这一行业,为以后工作或深造打下良好的根底。一、系统总体设计1. 1设计概述根据毕业设计要求,目的是要设
10、计一款简单易操作的计算器。本设计以大学本科期间所学的AT89S52单片机为核心芯片,采用4x4矩阵键盘输入,以8位八段数码管动态扫描做输出显示,可以进行无符号整数的加、减、乘、除运算,具有清零功能,并带有溢出提示。2. 2系统整体模块图图1系统整体模块图FigurelOverallsystemblockdiagram3. 3实现方案经过综合考虑,最终决定实现方案如下:a)使用AT89S52单片机为主控芯片;b)显示模块使用4位八段数码管;C)输入使用4x4矩阵键盘作为输入模块;d)使用8位三态锁存器74HC573D来对数码管的地址和数据进行锁存;e)用蜂鸣器来做溢出提示;f)其中的晶振电路和复
11、位电路均采使常规电路;二、硬件系统设计2.1 AT89S52单片机(1)芯片简介AT89S52单片机是ATMEL公司生产的是一款CMOS工艺的8位单片机。它带有8KB的可在线编程的Flash存储器,该单片机与80C51系列单片机的指令系统及引脚完全兼容,具有较高的性能价格比,使其在嵌入式开发中仍有着广泛的应用。AT89S52单片机为40引脚芯片,具有PDIP,PLCC和TQFP3钟封装形式。各引脚的功能如下: PO口8位、开漏极、双向I/O口。PO可作为通用I/O口,每个引脚可驱动8个TTL负载;当做输入时,每个端口首先置1。 P1口8位、双向I/O口,内含上拉电阻。Pl口为用户使用的通用I/
12、O口,每个引脚可驱动4个TTL负载。当用做输入时,每个端口首先置1。Pl.0和Pl.1引脚也是定时器2的外部计数输入(PI.0/T2)和触发器输入(Pl.1T2DX) P2口8位、双向I/O口,内部具有上拉电阻。P2口可用做通用I/O,可以驱动4个TTL负载。对P2口各位写入1,可作为输入。每个引脚由外部负载拉为低电平时,经由内部上拉电阻向外输出电流。 P3口8位、双向I/O口,内部含有上拉电阻。P3口可用做通用I/O口,可驱动4个TTL负载。当用做输入时,要先将P3口各位置如外部负载将P3口拉低,那么经过上拉电阻向外输出电流。 RST-单片机复位输入端,当对其连续作用两个机器周期以上高电平时
13、,单片机自动复位。 XTALl和XTAL2-XTALl是片内振荡器反相放大器和时钟发生器的输入端,XTAL2是片内振荡器反相放大器的输出端。(2) AT89S52的PIDP封装引脚排列图及实物图图2AT89S52的PIDP封装引脚排列图及实物图Figure2AT89S52ofPlDPpackagepinoutdiagramandphysicalmap2.2单片机复位电路图3单片机复位电路Figure3 MCUresetcircuit复位电路即是使单片机复位的电路,就是利用它将单片机恢复到其实状态。如图2.2所示,VCC上电时,电容Cl充电,电流从电阻R2流过,在电阻R2上出现高电压,从而使单片
14、机复位。几个毫秒后,Cl充满电,流过R2的电流为零,从而其上的电压也为零,单片机进入工作状态。工作期间,按下按钮,电容Cl放电,松开按钮,电容Cl充电,继而又会在电阻R2上产生高电压,几个毫秒后,单片机再次进入工作状态。注:当AT89S52单片机的复位引脚上有持续两个机器周期以上的高电平时,单片机复位。2.3单片机的外接晶振电路图4单片机的外接晶振电路Figure4 McUexternaIcrystaIoscillatorcircuitAT89S52单片机内部虽然己有震荡电路,但为了提高其时间精准度与稳定度,故采用外接时钟晶振。外接晶体引脚:XTALl是片内振荡器的反相放大器输入端,XTAL2
15、那么是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。1. 44x4矩阵键盘图54x4矩阵键盘电路图Figure54x4matrixkeyboardschematics图6矩阵键盘输入功能图Figure6Matrixkeyboardinputfunctionchart在本设计中我采用了4x4矩阵键盘来作为输入,用单片机的P3口与其对接,实现计算器的输入功能,具体如下:以第一行扫描为例,其余行数以此类推,先给P3.0口一低电平其余全为高电平,即P3口此时为IIIIII10,然后去取出其高四位,通过去判断其高四位的值的变换来得到相应的键入值,如当P3为11101110
16、时那么T被按下;当为11011110时2被按下;当为10111110时3被按下;当为01111110+被按下。以此类推。键盘第一行扫描程序如下:/第一行扫描/P3=0xfellllIllO让P/O输出低tem=P3;temp=tempxfllll0000位与操作屏蔽低四位if(temp!=OxfO)delay(10);延迟来判断是否是干扰ternp=P3;temp=temp&OxfO;ifCtempl=OxfO)temp=P3;switch(temp)caseOxeerkey=I;break;/111011101被按下caseOxde:key=2;break;/110111102*被按下cas
17、eOxbe:key=3;break:/1011IllO3被按下case0x7e:key=10;break;/Ol111110+被按下whiIe(temp!=Oxfe)判断按健是否松开temp=P3;temp=tempxf;display(key);delay(22);2. 5八段LED数码管图7八段LED数码管实物图Figure7EightLEDdigitalphysicalmap图88位八段LED数码管电路图Figure88eightLEDdigitalcircuitdiagram在本设计中,采用8位八段共阴数码管作为输出显示,并利用数码管的动态显示来显示输出,其中用到两片8位三态锁存器74
18、HC573D来对数码管的地址和数据进行锁存,其分别PO口对接,来传输数据,用P26口来控制段选,用P27来控制段选,以此来实现动态扫描。74HC573D其引脚主要功能如下:引脚主要功能引脚主要功能I缓冲输出使能控制输入端11锁存使能控制输入端2数据1输入端12数据输出端,输出相应输入端数据3数据2输入端13数据输出端,输出相应输入端数据4数据3输入端14数据输出端,输出相应输入端数据5数据4输入端15数据输出端,输出相应输入端数据6数据5输入端16数据输出端,输出相应输入端数据7数据6输入端17数据输出端,输出相应输入端数据8数据7输入端18数据输出端,输出相应输入端数据9数据8输入端19数据
19、输出端,输出相应输入端数据10接地端205V电源电压输入端具体实现为,首先进行位选,选择要用于显示的位;然后进行段选,输出相应的数据。其实数码管的动态显示是一个显示扫描的过程,所以我们可以利用余辉现象来实现其连续不闪烁的显示。共阴数码管的编码:ucharcodesz17=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,OXO0;共阴数码管0-9&A-F&不显示字型码。显示个位、十位程序如下:voiddisplay(uintnum)数码管动态显示函数uintg,s,b,q;/g,s,b
20、,q,分别代表个,十,百,千位上的数if(num9999)四位数码管,最大显示为9999Clear0;调用溢出函数elSeq=num1000%10,b=numIoOl10,s=num10%10,g=num%10;通过取余的方式,取出各位上的数,Po=SZg;个位显示DU=1;选段DU=O;Po=OX7f;/选中第一位数码管WE=I;选位WE=O;delay(5);if(num9)大于9时才去翻开第二位数码管,便于省电,以此类推一下情况PO=SZs;十位显示DU=I;DU=O;PO=Oxbf;WE=I;WIi=O;delay(5);2.651单片机最小系统图951单片机最小系统Figure951
21、SCMminimumsystem三、程序调试与系统仿真3.1 程序调试程序调试过程,采用了分块调试的方法。调试与仿真中用到的软件有:Proteus,KeilC51,STC-ISP(1)数码管显示局部的调试对数码管显示局部程序进行人为的赋值,如对其显示变量num赋123,去观察数码管是否能够正确的进行显示123,如假设不能,那么修改显示程序,直至能够正确显示,然后进行下一模块的调试。(2)矩阵键盘输入局部的调试首先不用参加计算程序,直接将矩阵键盘输入程序与数码管显示程序对接,用数码管显示的值去检验矩阵键盘输入程序是否正常,能否得到正确的键入值,如假设不能,修改键入程序,直至能够正确输入,然后进行
22、下一模块的调试(3)整体调试调试时,主要采用局部注释和插入小灯的方法进行调试。当不知道程序运行到哪里时,我们对一些关键位置插入小灯,如果小灯被点亮,说明程序能够运行到此处,如果未被点亮说明程序未能运行到此处,那么应该修改程序,看其是否进入了死循序,或检查判断条件是否写错等。在调试过程中,也可以对局部程序进行注释来找出程序错误的地方。简易计算器的完整程序:ttinclude/AT89S52单片机头文件#includebstv51.h7开发板自带头文件uintnuml=O,num2=0,disbuf;/numl为第一位操作数,num2为第二位操作数,disbuf为显示缓存模块,IICharCord
23、,temp,11ag=lfkey;/cord记录运算符,temp存矩阵键盘高位四位,flag记录第几操作数,key键盘返回值。ucharcodesz17=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,OxTf,OxGf,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00;/0-9&A-F&“不显示字型码,code代表写入rom里voiddelay(uintXmS)延迟函数,延迟XmSuinti,j;for(i=xms;i0;i一)for(j=112;j0;j);voidclearO去除或溢出处理函数numl=0,nu2=0,disbuf=O,
24、flag=lfFM=0;/清零,并翻开蜂鸣器进行提示delay(90);FM=I;关闭蜂鸣器voiddisplay(uintnum)数码管动态显示函数Uintg,s,b,q;/g,s,b,q,分别代表个,十,百,千位上的数if(num9999)四位数码管,最大显示为9999Clear0;调用溢出函数elseq=num1000%10,b=num100%10,s=num10%10,g=numl10;通过取余的方式,取出各位上的数,PO=SZg;个位显示DU=I;选段DU=O;PO=OX7f;选中第一位数码管WE=1;选位WE=O;delay;下情况以此类推一if(num9)大于9时才去翻开第二位数
25、码管,便于省电,PO=SZs;/十位显示DU=I;DU=O;PO=Oxbf;WE=I;WE=O;delay(5);if(num99)P0=szb;百位显示DU=I;DU=O;PO=Oxdf;WE=1;WE=O;delay(5);if(num999)PO=szq;千位显示DU=I;DU=O;PO=Oxef;WE=I;WE=O;delay(5);voidkeyin()键入函数/7第一行扫描/7/P3=0xfejllllHlO让P3.0口输出低tem=P3;tep=temp&xf:/11110000位与操作屏蔽后四位if(temp!=OxfO)delay(10);用延迟来判断是否是误操作temp=P
26、3;temp=temp&OxfO;if(tempI=OxfO)temp=P3;switch(temp)case0xee:/1110HlO1被按下key=1;break;caseOxde:/IlOlIllO2被按下key=2;break;caseOxbe:key=3;break;/IOllHlO3被按下case0x7e:key=10;break;/OlllIllO+被按下while(temp!=OXfo)看按键是否松开temp=P3;temp=tempxf;I/第二行扫描/P3=0xfd11111101让P3.1口输出低temp=P3;tem=temxf;/1110000位与操作屏蔽后四位if(
27、temp!=OxfO)delay(10);ten=P3;temp=temp&OxfO;if(tempi=OxfO)temp=P3;switch(temp)caseOxed:/IllOIlOl4被按下key=4;break;caseOxdd:/HOlIlOl5被按下key=5;break;caseOxbd:/IOllIlOl6被按下key=6;break;case0x7d:/OlllHOl-被按下key=11;break;while(temp!=OxfO)temp=P3;tem=temxf;/第三行扫描/P3=0xfbllllIOll让P3.2口输出低temp=P3;temp=temp&OxfO
28、;/llll0000位与操作屏蔽后四位if(temp!=OxfO)delay(IO);temp=P3;tem=temxf;if(temp!=OxfO)temp=P3;switch(temp)caseOxeb:/HlOIOll7被按下key=7;break;caseOxdb:/HOlIOll8被按下key=8;break;caseOxbb:/IOllIOll9被按下key=9;break;case0x7b:/OlllIOll*被按下key=12;break;while(temp!=OxfO)tem=P3;temp=tempxf;1/第四行扫描/P3=0xf71111Olll让P3.Q口输出低te
29、mp=P3;temp=tepxfll110000位与操作屏蔽后四位if(temp!=OxfO)delay(10);tem=P3;temp=temxf;if(temp!=OxfO)tem=P3;switch(temp)case0xe7:/IllOOlllClear被按下key=13;break;case0xd7:/HOlOlll0被按下key=0;break;case0xb7:/IOllOlll=被按下key=14;break;case0x77:/OlllOlll/被按下key=15;break;while(temp!=OxfO)tem=P3;tem=temxf;voidjs。/运算函数if(f
30、Iag=I)/第一个操作数及运算符处理keyin();/键入第一操作数if(key10)/输入的是数值numl=nunl*10+key;拼接输入操作数disbuf=numl;显示第一操作数key=20;人为给key赋值,准确读下一次键值elseif(key=10)输入是加号cord=+;flag=2;key=20;elseif(key=11)输入使减号cord=;flag=2;key=20;elseif(key=12)输入是乘号cord=*;flag=2;key=20;elseif(key=15)/输入是除号cord=,;flag=2;key=20;elseif(key=13)输入是去除号cl
31、earO;11ag=l:key=20;elseif(flag=2)第二个操作数处理keyin();if(key10)num2=num2*10+key;/拼接第二个操作数disbuf=num2;key=20;elseif(key=13)/输入是去除号clear();fIag=I;key=2O;elseif(key=14)输入等号switch(Cord)判断运算类型case+:disbuf=nu巾l+num2;break;执行加运算case,-,:disbuf=numl-num2;break;执行减运算case*:disbuf=numl*num2;break;/执行乘运算case/:disbuf=
32、numlnum2;break;执行除运算voidmain0主程序bstv51_init();学习板初始化WhiIea)让程序开机后一直运行js();调用计算程序display(disbuf);显示结果3. 2程序流程图:图10程序流程图Figure1()Programflowchart3. 3系统仿真图11仿真电路图Figure 11 Circuitsimulation系统仿真电路图用Proteus进行搭建,4*4矩阵键盘用16个按钮进行搭建,两片74HC573分别控制其中数码管的段选和位选,单片机采用元件库已有的AT89C52,其内核与AT89S52样。下面输入第一位操作数123,仿真结果如
33、图:图12输入第一位操作数123Figure 12 Enterthefirstoperand123然后,按下+号,并输入第二位操作数456,仿真结果如图:图13输入第二位操作数456Figure 13 Enterthesecondoperand456按下二号,显示结果,仿真结果如图:图14计算结果Figure 14 Theresults由此,可以看出,仿真符合设计的功能,满足设计的最初要求,设计完成,其中减法,乘法,除法仿真局部省略。结语在丛老师的指导及自己的努力下,终于完成了自己的毕业设计。通过此次设计,让我学会了科学的设计步骤和完整的设计思路,学会了如何查阅资料,如何借助网上资源来解决自己
34、所遇到的问题。在编写程序方面,学会了如何去调试编译一个程序,学会了去设置断点以及单步运行。在解决程序出错时,学到了用局部注释的方法去检查程序的错误之处,也可以通过插入小灯的方法去检验程序是否运行了当处,调试时可以通过分块调试的方法来检验程序的正确性,这些收获让我受益匪浅。与此同时,让我对51单片机有了深层次了解,学会了单片机开发所需的常用软件,对嵌入式的软硬设计思路也有了进一步的了解,使我对这一行业产生了浓厚的兴趣。通过此次设计也让我认识到了自身的专业素养匮乏,专业知识不扎实,动手能力不强,这些将成为我以后改正的目标。主要参考文献1马淑华王凤山张美金单片机原理与接口技术(第2版)M.北京:北京
35、邮电大学出版社,2005.2童诗白华成英.模拟电子技术根底(第四版)M.北京:高等教育出版社,2003.3闫石.数字电子技术(第五版)M.北京:高等教育出版社,2006.4谭浩强.C语言程序设计教程(第三版)M.北京:高等教育出版社,2023.5王玮.感悟设计:电子设计的经验与哲理M.北京:北京航空航天大学出版社,2023.致谢本设计是在丛梦龙老师悉心地指导下完成的,老师严谨的治学态度、广博的学识、开阔的思路和强烈的敬业精神将使我受益终生,在这几周里,丛老师平易近人,时常与我保持交流,关心我的设计进度和细节,及时地提供全面而细致的帮助,对此我表示由衷的感谢。同时我还要感谢我的舍友,在此期间他们给与了我极大的支持,为我毕业设计的完成提供了极大地便利。最后,还要感谢我的亲人,是他们对我一如既往的支持与信任,才有了今天的我,无论是在求学路上,还是生活中,他们的鼓励是我不停向前的动力,我会一直努力下去,不辜负他们对我的期望。个人简介姓名:覃海洋性别:男民族:汉族出生日期:1992年4月13日籍贯:重庆市合川区学院:内蒙古民族大学物理与电子信息学院班级:2023级电子信息工程本科)
链接地址:https://www.desk33.com/p-845522.html