基于MCS51单片机的简易计算器的设计与实现毕业设计论文

上传人:仙*** 文档编号:35952276 上传时间:2021-10-29 格式:DOC 页数:27 大小:651KB
收藏 版权申诉 举报 下载
基于MCS51单片机的简易计算器的设计与实现毕业设计论文_第1页
第1页 / 共27页
基于MCS51单片机的简易计算器的设计与实现毕业设计论文_第2页
第2页 / 共27页
基于MCS51单片机的简易计算器的设计与实现毕业设计论文_第3页
第3页 / 共27页
资源描述:

《基于MCS51单片机的简易计算器的设计与实现毕业设计论文》由会员分享,可在线阅读,更多相关《基于MCS51单片机的简易计算器的设计与实现毕业设计论文(27页珍藏版)》请在装配图网上搜索。

1、基于MCS-51单片机的简易计算器的设计与实现【摘要】当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,还是娱乐和消遣几乎样样都离不开电子产品,大型复杂的计算能力是人脑所不能胜任的,而且比较容易出错。计算器作为一种快速通用的计算工具方便了用户的使用,可是它还在发展之中,以后必将出现功能更加强大的计算器,所以本次设计是基于51单片机来设计的计算器,实现基本功能加减乘除,采用LCD显示结果数据。【关键词】MCS-51;MM74C922;Protues;矩阵键盘;计算器Design and implementation of a simple calculator

2、based on MCS-51 single chip microcomputer【Abstract】Nowadays, with the continuous improvement of peoples living, electronic products have already walked into each and every family, whether life or learning, or entertainment and recreation almost everything cannot do without the electronic products, c

3、omputing capability of large and complex is the human brain are not competent, and relatively easy to go wrong. The calculator as a fast general-purpose computing tools are easy to use, but it is still in development, later will appear a calculator function more powerful, so this design is to design

4、 based on 51 single chip computer, the realization of the basic functions of add, subtract, multiply and divide, uses LCD to display the results of data.【Keywords】MCS-51;MM74C922;Protues;Matrix keyboard ;calculator目 录第一章 绪论11.1 设计背景11.2 设计内容11.3 设计意义1第二章 设计方案及技术基础12.1 设计方案12.2 方案论证及设计12.3 MCS-51单片机及

5、开发环境介绍22.3.1 MCS-51系列单片简介22.3.2 MM74C922芯片3第三章 硬件设计43.1 硬件电路设计43.1.1 电路设计原理43.1.2 硬件电路设计53.2 时钟电路53.3 复位电路63.4 输入模块:键盘接口电路6第四章 软件设计84.1 主程序设计84.2 外部中断0处理程序84.2.1 键值转化为键盘上按键值程序94.2.2 算术运算程序104.3 LCD显示程序10第五章 开发体会135.1 Keil软件调试135.2 Protues软件仿真14第六章 总结15参考文献16致 谢17附 录18第一章 绪论1.1 设计背景随着社会的发展,科学的进步,人们的生

6、活水平在逐步的提高,尤其是微电子技术的发展,犹如雨后春笋般的变化。电子产品的更新速度快就不足惊奇了, 单片机的应用已经越来越贴近生活。计算器在人们的日常中就是比较的常见的电子产品之一。可是它还在发展之中,以后必将出现功能更加强大的计算器,基于这样的理念,本次设计是用单片机来设计一个简易计算器。1.2 设计内容本次设计是基于MCS-51单片机来设计的计算器。计算器将完成的功能有加,减,乘,除等功能。设计的关键所在,必须非常熟悉单片机的原理与结构,同时还要对整个设计流程有很好的把握,将单片机和其他模块完整的衔接。1.3 设计意义此次论文的价值和核心在于倡导自己把所学知识运用到现实生活,为现实生活服

7、务,把自己的知识转化为实物哪怕是很简单的物件,很简单的功能,但真真切切的让自己感受到创造的快乐,为自己今后的工作做好铺垫,往后通过更多的学习,更多的尝试,把知识的作用真正发挥出来,改变大家的生活。第二章 设计方案及技术基础2.1 设计方案为了满足计算器的基本要求,可以基本的运算(加减乘除),数据归零和出错警告提示,我们采用基于51单片机,结合MM74C922芯片设计一个简易的计算器,用4*4的矩阵键盘实现数据输入,实现基本功能加减乘除,并用LCD显示数据。设计仿真和调试要用到Keil、Protues等软件。2.2 方案论证及设计根据功能与要求,本系统选用MCS-51单片机为主控机。通过扩展必要

8、的外围接口电路,实现对计算器的设计。具体设计如下:(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD 显示数据和结果。(2)另外键盘包括数字键(09)、符号键(+、-、)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算键盘。(3)执行过程:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。(4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大

9、于计算器的表示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD上提示错误。2.3 MCS-51单片机及开发环境介绍2.3.1 MCS-51系列单片简介MCS-51单片机较之前的单片机相比,功能增强许多,就其指令和运行速度而言,超过了Intel8085的CPU和Z80的CPU,成为工业控制系统中较为理想的机种。目前与MCS-51单片机兼容的一些单片机的时钟频率达到40MHz甚至更高。51系列单片机的特点:(1)8位cpu;(2)片内带振荡器,频率范围为1.2MHz12MHz;(3)片内带128M 的数据存储器;(4)片内带4KB的程序存储器;(5)程序存储器的寻址空间为64KB

10、;(6)片外数据存储器的寻址空间为64KB;(7)128个用户位寻址空间;(8)21个字节特殊功能寄存器;(9)4个8位的I/O并行接口:P0、P1、P2、P3;(10)两个16位定时、计数器;(11)两个优先级别的五个中断源;(12)一个全双工的串行I/O接口,可多机通信;(13)111条指令,包含乘法指令和除法指令;(14)片内采用单总线结构;(15)有较强的位处理能力;(16)采用单一+5V电源图2-1 MCS-51结构图2.3.2 MM74C922芯片为了进一步节省单片机I/O口资源,我们在设计中使用了MM74C922芯片。MM74C922是一款4*4键盘扫描IC,它可检测到与之相连的

11、4*4键盘的按键输入,并通过数据输出口将按键相应的编码输出。其引脚图如图2-2所示:图2-2 MM94C922硬件图MM74C922引脚说明:(1) Y1Y4(脚1脚4):4*4键盘第一列至第四。(2) X1X4(脚11、10、8、7):4*4键盘第一行至第四行。(3) DOA DOD(Dataout AD,脚1417):按键之BCD码输出,其中DOA为LSB,DOD为MSB。(4) VCC(脚18):电源脚,+3V+15V。(5) GND(脚9):接地管脚。(6) OSC(Oscillator,脚5):键盘扫描电路之频率所需外加电容的连引脚。(7) KBM(Keyboard Mask,脚6)

12、:内部消除开关弹跳电路所外加电容的引脚。(8) OE(Output Enable,脚13):芯片使能脚,接低电位可使芯片使能。(9) DA(Data Available,脚12):数据有效输出脚。任一按键按下时,此脚位会输出高电位,按键释放后此脚又会恢复为低电位。MM74C922对各按键的响应如下表所示:图2-3 MM74C922对各按键的响应第三章 硬件设计3.1 硬件电路设计3.1.1 电路设计原理单片机采用AT89C51单片机,它能够满足数据的采集、控制和数据处理的需求。结合时钟电路、复位电路、键盘输入完成简易计算器总电路设计。单片机输入模块LCD显示电源电路时钟电路复位电路图3-1 电

13、路设计原理3.1.2 硬件电路设计图3-2 总电路设计3.2 时钟电路时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。在MCS51单片机片内部有一个高增益的反相放大器,它的的输入端为引脚XTAL1,输出端为引脚XTAL2,由该放大器构成的振荡电路和时钟电路一起构成了单片机的时钟方式,晶振频率均为30pF。根据硬件电路的不同,单片机的时钟连接方式可分为内部时钟方式和外部时钟方式。我们采用内部时钟方式。在内部方式时钟电路中,必须在XTAL1和XTAL2引脚两端跨接石英晶体振荡器和两个微调电容构成振荡电路。图3-3 时钟电路连接图3.3 复位电路单片机复位是使CPU和系统中

14、的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。无论是单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。所以,必须弄清楚MCS-51单片机复位的条件、复位电路和复位后的状态。复位信号从单片机的RST引脚输入,高电平有效,其有效电平应维持至少2个机器周期。复位操作有上电自动复位与按键手动复位两种方式,为了方便系统的硬件初始化,我们采用按键手动复位。图3-4 复位电路连接图3.4 输入模块:键盘接口电路计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘

15、的方案。矩阵键盘采用四条I/O 线作为行线,四条I/O线作为列线组成键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4*4个。这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。计算器的键盘布局如图3-5与图3-6所示:一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。图3-5 矩阵键盘布局图图3-6 矩阵键盘内部电路图如下图3-7所示,在本设计中,计算器输入键盘的4条行线、列线分别连接到MM74C922的X1X4、Y1Y4引脚,MM74C922的数据输出口与单片机的P2口相连,MM74C922的DA引脚经过一个非

16、门连接到单片机的/INT0脚,当MM74C922检测到键盘输入时,DA产生高电平,与之相连的/INT0检测到低电平,给单片机一个中断,单片机从P2口的低四位读入键盘上按下的键的值。图3-7 键盘接口电路图第四章 软件设计本设计主要包含主程序、外部中断0程序。4.1 主程序设计开始允许中断初始化键盘接口初始化LCD显示初始化LCD初始化LCD输入数据函数主程序函数表示:允许中断;初始化键盘接口连接、LCD显示、LCD、LCD输入数据函数。图4-1 主程序流程图4.2 外部中断0处理程序有键按下时,单片机响应外部中断0,转入外部中断0中断处理函数,在中断处理函数中完成对按键的判断,以进行下一步的程

17、序处理。其中调用键值转化函数、算术运算函数。键值转化是否为数字键将当前输入值*10+输入值当前输入值是否为第一个算术值y=当前输入值x=当前输入值当前输入值是否超出范围规定LCD显示当前输入值数值溢出是否为清除键数值清0是否为“=”是否为“+”是否为“-”是否为“*”是否为“/”调用运算函数YNNYNYNNNNNYY图4-2 外部中断0函数流程图4.2.1 键值转化为键盘上按键值程序该程序函数的作用是将输入的键值转化为数值或符号。开始输入键值读取键码转化为数值或符号数值送显示缓冲图4-3 键值转化为键盘上按键值流程4.2.2 算术运算程序在外部中断函数对键值进行判断后,进行加、减、乘、除运算,

18、运算后的数值如果超出范围规定,则数值溢出处理。运算符号是否为“+”N开始YY进行加号运算运算后数值是否超出范围规定运算符号是否为“-”进行减号运算运算符号是否为“/”进行乘号运算运算符号是否为“*”YN进行除号运算YLCD显示数值N溢出NY图4-4 算术运算程序4.3 LCD显示程序利用LCD静态显示,通过程序向LCD写指令字或数据使LCD完成不同功能或显示相应数据。/*LCD初始化函数*/void init_LCM()write_com(0x30);write_com(0x30);write_com(0x30);write_com(0x38);write_com(0x08);write_co

19、m(0x01);write_com(0x06);write_com(0x0e);/*LCD写数据函数*/void write_data(char ddata)RS=1; /*写指令*/R_W=0;EN=1; /*使能信号开*/P1=ddata; /*将数据送入p1口*/EN=0; /*使能信号关*/check_BF();/*LCD写指令函数*/void write_com(char command)RS=0; /*写指令*/R_W=0;EN=1; /*使能信号开*/P1=command; /*将数据送入p1口*/EN=0; /*使能信号关*/check_BF();/*LCD检查忙碌函数*/vo

20、id check_BF()char i,x=0x80;P1=0xff;while(x&0x80)RS=0;R_W=1;EN=1;x=P1;EN=0;for (i=0;i10;i+);EN=0; /*关闭使能信号*/*LCD清屏函数*/void clearLCD()write_com(0x01);/*LCD显示函数*/void display(long a)long temp,b,c=-1;int lenth=1,i,j;clearLCD();if(a0;i-)b=1;for(j=0;ji-1;j+)b=b*10;write_data(0x30+a/b);a=a%b;第五章 开发体会5.1 Ke

21、il软件调试1.首先在电脑上正确的下载keil软件。2.在keil 集成开发环境中创建新项目(Project),扩展文件名为.UV2,并为该项目选定合适的单片机CPU器件(本设计采用ATMEL公司下的AT89C51)。3.用keil的文本编辑器编写源文件,可以是汇编语言,也可以为c语言,完成后将该文件添加到项目中去。注意保存的时候如果是c语言编写程序必须在后面加.C。4.通过keil 的相关选择项,配置编译环境、连接定位器以及Debug调试器的功能。5.对项目中的源文件进行编译连接,生成绝对目标代码和可选的HEX文件,如果出现编译连接错误则返回到第2步,根据软件中的错误提示进行修改源文件,切记

22、不要浮躁,一步一步修改直到最后提示没有差错最终生成hex文件。6.对没有语法错误的程序进行仿真调试,调试成功后将HEX文件写入到单片机应用系统的ROM中。5.2 Protues软件仿真1首先在电脑里下载正确的软件,此软件主要是对硬件部分进行模拟。2进入软件后蓝色框内就是工作区域,可以在里面随意选择元器件,移动元器件。正确的进行导线连接。3完成所有连接后,双击单片机把生成的HEX文件进行导入。4最后如果程序和连图都没有问题就可以进行仿真了。图5-1 系统仿真总图第六章 总结通过这次的毕业论文设计我学习到了很多知识,平时在学校觉得自己好像对专业知识还是比较了解的。可是遇到这次设计完全没有思绪,找不

23、到切入点。然后我就通过询问老师与跑图书馆查资料、确定基本设计方案、对所用芯片功能进行查找、调试、上机仿真等,经历了一次次的困难,却积累了很多宝贵的经验。在整个设计的过程中遇到的问题主要有以下三点,第一:基础知识掌握的不牢固,主要表现在一些常用的电路的形式和功能不清楚,对书本上的内容理解不够透彻。第二:对一些常用的应用软件缺少应用,体现在画电路图和系统的仿真的时候,对这些软件的操作不熟练,浪费了很多时间。第三:相关知识掌握的不够全面,缺少系统设计的经验。这次设计进一步端了我的学习态度,学会了实事求是,严谨的作风,对自己要严格要求,不能够一知半解,要力求明明白白。如果省略了那些必要的步骤,急于求成

24、,不仅会浪费时间,还会适得其反。我觉得动手之前,头脑里必须清楚该怎么做,这一点是很重要的。在此次的毕业设计中我最大的体会就是进一步认识到了理论联系实践的重要性。一份耕耘,一份收获。通过这段时间的设计,让我明白科学的思维方法和学习方法是多么重要,只有这样才能够有很高的效率,才能够让自己的工作更完美。总而言之,此次毕业设计让我学到了好多平时在课堂上学不到的东西,增加了我的知识运用能力,增强我的实际操作能力。谢谢老师给我们提供这么好的机会,为我们之后走向社会奠定了一个好的基础。参考文献1 胡 辉.单片机原理与应用.北京中国水利水电出版社.20072 何立.单片机高级教程.北京航空航天大学出版社.20

25、063 赵克林.C语言实例教程.北京人民邮电出版社.20074 张义和,许宏昌,余春长.例说51单片机.人民邮电出版社.20085 康维新.MCS-51 单片机原理与应用.北京中国轻工业出版社.2009.16 陈立周,陈宇.单片机原理及其应用(第2 版).北京机械工业出版社.2008.57 徐爱钧.单片机原理实用教程:基于Protues虚拟仿真.北京电子工业出版社.2009(1) 致 谢起初接触毕业设计的时候,我对于这篇论文完全不知道该怎么着手,可是通过刘老师耐心的给我讲解,同时查阅各类专业书籍,让我对论文有了一个初步构思,知道该怎么去一步步的完成它。在完成初稿时也遇到了很多问题,对于仿真软件

26、运用的陌生,还有就是对于计算器的硬件选择的错误。最后都是在刘老师的帮助下我克服了这些问题,成功的把毕业设计做完了并完成了仿真。我要正式的向刘老师致谢,如果没有刘老师的帮助我是不可能完成毕业设计的,这次毕业设计我所学到的不仅仅是书本上的知识,还有坚持一路向前坚持的精神。这将为我以后的人生道路做好指引,我将受益一生。附 录#include#include#define uchar unsigned char#define uint unsigned intchar translate(int keycode);void arithmetic();void init_LCM();void write

27、_data(char ddata);void write_com(char command);void check_BF();void clearLCD();void display(long a);void dealerror(); void dataoverflow();long x=0,y=0,num=0;int operators,input,iny=0;char key;char error5=error;char overflow8=overflow;sbit EN=P34;sbit R_W=P35;sbit RS=P36;main() EA=1;EX0=1;IT0=1; P2=0

28、xff;display(0);init_LCM();write_data(0x30);while(1)/*键值转化为键盘上按键值函数*/char translate(int keycode)switch(keycode)case 0:return 7;break;case 1:return 4;break;case 2:return 1;break;case 3:return c;break;case 4:return 8;break;case 5:return 5;break;case 6:return 2;break;case 7:return 0;break;case 8:return

29、9;break;case 9:return 6;break;case 10:return 3;break;case 11:return =;break;case 12:return /;break;case 13:return *;break;case 14:return -;break;case 15:return +;break; /*外部中断0处理函数*/void INT_0(void) interrupt 0 using 0key=translate(P2&0x0f);if(key=0) /判断按下的键是否为数值num=num*10+(key-0);if (operators0)y=n

30、um;iny=1;elsex=num;if(num-134217728) /当前数值是否超出限定范围display(num);elsedataoverflow();elseswitch(key)case c:x=0;y=0;num=0;iny=0;operators=0;display(num);break;case =:arithmetic();iny=0;operators=0;num=0;break;case +: if (operators)arithmetic();operators=1;num=0;break;case -: if (operators)arithmetic();o

31、perators=2;num=0;break;case *: if (operators)arithmetic();operators=3;num=0;break;case /:if (operators)arithmetic();operators=4;num=0;break;/*算术运算函数*/void arithmetic()if (iny)switch(operators)case 1:x=x+y;num=x;if(num-134217728)display(num);elsedataoverflow();break;case 2:x=x-y;num=x;if(num-13421772

32、8)display(num);elsedataoverflow();break;case 3:x=x*y;num=x;if(num-134217728)display(num);elsedataoverflow();break; case 4:if (y=0)dealerror();elsex=x/y;num=x; if(num-134217728)display(num);elsedataoverflow();break;y=0;/*LCD初始化函数*/void init_LCM()write_com(0x30);write_com(0x30);write_com(0x30);write_c

33、om(0x38);write_com(0x08);write_com(0x01);write_com(0x06);write_com(0x0e);/*LCD写数据函数*/void write_data(char ddata)RS=1; /*写指令*/R_W=0;EN=1; /*使能信号开*/P1=ddata; /*将数据送入p1口*/EN=0; /*使能信号关*/check_BF();/*LCD写指令函数*/void write_com(char command) RS=0; /*写指令*/R_W=0;EN=1; /*使能信号开*/P1=command; /*将数据送入p1口*/EN=0; /

34、*使能信号关*/check_BF();/*LCD检查忙碌函数*/void check_BF()char i,x=0x80;P1=0xff;while(x&0x80)RS=0;R_W=1;EN=1;x=P1;EN=0;for (i=0;i10;i+);EN=0; /*关闭使能信号*/*LCD清屏函数*/void clearLCD()write_com(0x01);/*LCD显示函数*/void display(long a)long temp,b,c=-1;int lenth=1,i,j;clearLCD();if(a0;i-)b=1;for(j=0;ji-1;j+)b=b*10;write_data(0x30+a/b);a=a%b;/*除数为0处理函数*/void dealerror()int i=0;clearLCD();for(i=0;i5;i+)write_data(errori);/*数值溢出处理函数*/void dataoverflow()int i=0;clearLCD();for(i=0;i8;i+)write_data(overflowi);

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!