简易计算器课程设计报告.doc

上传人:doc321 文档编号:12908789 上传时间:2021-12-07 格式:DOC 页数:19 大小:433KB
返回 下载 相关 举报
简易计算器课程设计报告.doc_第1页
第1页 / 共19页
简易计算器课程设计报告.doc_第2页
第2页 / 共19页
简易计算器课程设计报告.doc_第3页
第3页 / 共19页
简易计算器课程设计报告.doc_第4页
第4页 / 共19页
简易计算器课程设计报告.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《简易计算器课程设计报告.doc》由会员分享,可在线阅读,更多相关《简易计算器课程设计报告.doc(19页珍藏版)》请在三一文库上搜索。

1、单片机与接口技术课程设计报告课题名称简易计算器的设计学院自动控制与机械工程学院专业机械设计制造及其自动化班级姓名学号时间2013.1.7-2013.1.18目录一课程设计的目的和要求31设计目的32设计任务及要求3二设计步骤及思路31、设计的步骤32设计思路3三硬件电路设计41总体设计42单元电路的设计4四软件设计9五调试说明121未启动仿真时,初始状态122开启仿真以后123计算过程演示12六设计体会14七参考文献15八、附录15附录一15附录二15一课程设计的目的和要求1设计目的单片机课程作为独立的教学环节,是自动化及相关专业集中实践性环节系列之一,是学习完单片机与接口技术课程后,并在进行

2、相关课程设计基础上进行的一次综合练习。单片机课程设计过程中,我们通过查阅资料,接口设计、程序设计、安装调试等环节,完成一个基于MCS-51系列单片机,涉及多种资源应用,并具有综合应用功能的小应用课程设计,使我们不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路电子元件等方面的知识进一步加深认识,同时在软件编程调试相关仪器设备和相关软件的使用技能等方面得到较全面的锻炼和提高。课程设计以学生认知为主体,充分调动学生的积极性,重视学生自学能力的培养,根据具体课题安排时间确定课题的设计、编程和调试内容,分团队开展课程设计活动,按时完成每部分工作。坚持独立完成,实现课题规定的各项指标,

3、并写出设计报告。要求学生自己查阅资料和充分利用所学知识,根据所要设计系统所要达到的功能,划分软硬件功能、选择器件、编写相关程序,用Proteus 在计算机上绘图并用Keil进行程序编写进行防真,再对整个系统做调试运行,有问题再进一步调试修改,直至达到设计的要求和取得满意的效果,最后编写系统说明书,其内容包括系统的功能介绍,使用范围,主要性能指标,使用方法,注意事项等。2设计任务及要求基于MCS51系列单片机 AT89C51,设计一个简单的电子计算器。1)通过4×4的矩阵键盘输入数字及运算符;2)可以进行4位十进制数以内的加法运算,如果计算结果超过4位十进制数,则屏幕显示E;3)可以进

4、行加法以外的计算(乘、除、减);4)其他功能。二设计步骤及思路1、设计的步骤(1)制定相应的设计方案;(2)硬件的初步设计;(3)选择设计所用元器件和参数;(4)在Proteus 7.5中设计和连接电路图;(5)软件的初步设计;(6)编写程序实现其功能;(7)在keil_v4中进行调试运行;(8)硬件和软件联合调试。2设计思路根据功能和要求,本系统选用MCS-51系列单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。具体设计如下:(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD 显示数据和结果。(2)另外键盘包括数字键(09)、符号键(+、-

5、、×、÷)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算键盘。(3)执行过程:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。(4)错误提示:当除数为0计算得到的结果小于0或大于计算器的表示范围时,计算器会在LCD上显示E。三硬件电路设计 1总体设计本设计选用AT89C52单片机为主控单元。显示部分采用LCD液晶显示,按键部分采用4*4键盘。图1 线路原理框图2单元电路的设计1) AT89C52单片机AT

6、89C52具有以下标准功能:8K字节Flash,256字节RAM,32位I/O口线,3个16位定时器/计数器,一个响应2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89C52可降至0HZ静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。AT89C52单片机为很多嵌入式控制系统提供了一种灵活性高且廉价的方案。故此选用AT89C52单片机图2 AT89C52芯片管脚说明: P0口:P0口为一个8位漏级开路双向I/O口,也即

7、地址/数据总线复用口。作为输出口用时,能驱动8个TTL逻辑门电路。对端口写“1”时,被定义为高阻输入。 在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。P1口:P1口是一个带内部上拉电阻的8位双向I/O口,P1口的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(I)。P1接收低8位地址,

8、部分端口还有第二功能,如表1所示:表1 P1口部分引脚第二功能端口引脚第二功能P1.5MOSI(用于ISP编程)P1.6MISO(用于ISP编程)P1.7SCK (用于ISP编程)P2口:P2口是一个带有内部上拉电阻的8位双向I/O口, P2口的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(I)。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVXDPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据寄存器(例如

9、执行MOVXRi指令)时,P2口线上的内容(也即特殊功能寄存器(SFR)区中P2寄存器的内容),在整个访问期间不改变。在Flash编程或校验时,P2亦接收高位地址和其它控制信号。P3口: P3口是一个带有内部上拉电阻的双向8位I/O口, P3口的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写“1”时,它们被内部的上拉电阻拉高并可作为输入端口。作输入口使用时,被外部信号拉低的P3口将用上拉电阻输出电流(I)。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如表2所示:表2 P3口引脚第二功能端口引脚第二功能P3.0RXD (串行输入口)P3.1TXD (串行输出

10、口)P3.2 (外中断0)P3.3 (外中断1)P3.4T0 (定时/计数器0)P3.5T1 (定时/计数器1)P3.6 (外部数据存储器写选通)P3.7 (外部数据存储器读选通)RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上的高电平时间将使单片机复位。WDT溢出将使该引脚输出高电平,设置SFR AUXR的DISRTO位(地址8EH)可打开或关闭该功能。 DISRTO位缺省为RESET输出高电平打开状态。 ALE/:当访问外部存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部寄存器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,

11、因此它可对外输出时钟或用于定时目的。值得注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对Flash存储器编程期间,该引脚还用于输入编程脉冲()。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置复位后,只要一条MOVX和MOVC指令才会激活ALE。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。:程序存储允许()输出是外部程序存储器的读选通信号,当AT89C51由外部程序存储器取指令(或数据)时,每个机器周期两次有效,即输出两个脉冲。当访问外部数据存储器时,没有两次有效的信号。EA/VPP:外部访问允许。欲使CPU仅访问

12、外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需要注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端保持高电平(接VCC端),CPU则执行内部程序存储器中的指令。Flash存储器编程期间,该引脚用于施加+12V编程电压(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入端。XTAL2:反向振荡放大器器的输出端。2)时钟电路时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊的一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。常用的时钟电路有两种方式:一种是内部时

13、钟方式,另一种为外部时钟方式。本处用的是内部时钟方式。电路如图3。图3 内部时钟电路3)复位电路MCS-51单片机的复位是由外部的复位电路来实现的。上电复位:上电复位电路是种简单的复位电路,只要在RST复位引脚接一个电容到VCC,接一个电阻到地就可以了。上电复位是指在给系统上电时,复位电路通过电容加到RST复位引脚一个短暂的高电平信号,这个复位信号随着VCC对电容的充电过程而回落,所以RST引脚复位的高电平维持时间取决于电容的充电时间。为了保证系统安全可靠的复位,RST引脚的高电平信号必须维持足够长的时间。电路如图4。 图4 复位电路4)LCD显示模块本设计采用LCD液晶显示器来显示输出数据。

14、通过D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应数据。LCD功能以及控制命令:表3LCD模块控制端LCD基本操作RSR/WE001写命令:用于初始化、清屏、光标定位等011读状态:读忙标志,当忙标志为“1”时,表明LCD正在进行内部操作,此时不能进行其他三类操作;当忙标志位为“0”时,表示LCD内部操作完成,可以对其他三类操作,一般使用查询方式。101写数据:写入要显示的数据111读数据:将显示存储区中的数据反读出来,一般比较少用。图5 LCD显示图5)键盘接口电路计算器所需按键有:数字键:1,2,3,4,5,6,7,8,9,0;功能键:+,-,*,/,=,C(清零

15、)。 共计16个按键,采用4*4矩阵键盘,键盘的行和列之间都有公共端相连,四行和四列的8个公共端分别接P1.0P1.7。采用“扫描法”确定矩阵式键盘上何键被按下。(1)判断是否有键按下单片机控制系统首先把I/O口P1.0P1.3设置成输出口,把P1.4P1.7 设置成输入口,接着把全“0”送到P1.0P1.3,这样就可以在所有行线上得到低电平,然后读取列线上的列值就可以判断是否有键按下。若无键按下,则所读列值必全为“1”;若有键按下,则所读列值必因所按键的行、列线接通而不全为“1”。由此即可判别是否有键按下。(2)识别按键位置在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线

16、置为低电平,即在置某根行线为低电平时其它行线为高电平。在确认某根行线为低电平后,再逐行检测各列线的电平状态。若某列为低电平,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。(3)键值的计算设键盘为KH×KL矩阵键盘,其中,KH为行数,KL为列数。如果由扫描法得按下按键的行号和列号分别为m和n,则所按下按键的键值为:m×KLn。图6 4*4矩阵键盘布局图四软件设计现实生活中人们熟知的计算器,其功能主要如下:键盘输入;数值显示;加减乘除四则运算;对错误的控制及提示。针对上述功能,计算器软件程序要完成以下模块的设计:LCD显示设计键盘设计算术运算程序设计。编程语言当中,汇编

17、语言比较接近底层,编程效率高;C语言则比较灵活,在编写算法中要方便一些,因此在本设计中我选用C语言。总体设计流程图如图7。图7 总程序流程图LCD显示模块键盘模块计算模块流程图分别如图8图9图10。图8 LCD显示流程图图9 键盘识别程序流程图图10 运算程序流程图五调试说明仿真结果和分析:1未启动仿真时,初始状态;图112开启仿真以后图12 3计算过程演示1)、4位十进制以内加法运算:1234+5678=6192; 图13 5555+6666=12221,计算结果超过4位数,LCD显示E。 图142)、减法运算:789-456=333 图15 减法运算结果小于0,456-789= -333,

18、LCD显示E 图163)、除法运算:56/8=7 图17 除数为0,258/0,LCD显示E 图184)、乘法运算:25*69=1725 图19 运算结果超过4位数:1000*100=100000,LCD显示E 图20 操作说明:本计算器能实现4位十进制以内的加减乘除运算,其中除法运算能保留一位小数;按下数值键,显示按下的数字,按运算符,再按第2个操作数,显示,再按“=”键显示运算结果;按“清零”键清除运算结果,可重新开始计算。当出现除数为0运算结果超出4位数或小于0时显示E。六设计体会在课本上了解到单片机具有体积小可靠性高性价比高等优点,主要应用于工业检测与控制智能仪器仪表家用电器和机电一体

19、化产品等领域。虽然知道单片机具有这些优点和应用范围,却不知道怎样去设计和应用,通过这两周的课程设计,加深了我对单片机小应用系统设计的认识,熟悉了单片机在控制系统中的运用。将所学的理论知识与实际应用结合起来,对自己如何使用已有知识及获取相关资料方面的能力又有了提高。但本次课程设计体会最深的是单片机学的不够扎实。根据老师的参考电路设计完硬件电路后就感觉无从下手了,从图书馆和网上查阅了很多相关资料,但由于自己基础知识不够扎实,不能举一反三,软件设计部分还是感觉很困难;看着有同学运行出来自己就急了,找一些看着差不多的程序盲目去运行,结果当然是什么都没有还浪费了一些时间,最后只有静下心来认真看找的资料,

20、相互对比看看与自己的有何不同,别人的显示键盘扫面是怎么设计的,才有所明白。在选用编程语言方面一开始还在汇编语言和C语言间徘徊,后来经老师提示及建议选用了C语言,因为C语言比较灵活,在编写算法中要方便一些。程序要尽量做到由各个子程序组成,有些程序后面最好加上注释这样在程序出错的检测过程中可以更容易查找到,也更简洁,更明白易懂。设计过程中最重要的是自己动手,虽然会遇到许多问题,但只有自己动手才能去发现问题解决问题,这也是课程设计的一个目的。这次的单片机课程设计重点是理论与实际相结合。该设计从头到尾都是自己动手,熟悉了整个设计过程,更充分的锻炼了自己。在此要感谢老师对我的指导及同学对我的帮助,在整个

21、设计过程中我懂得了很多东西,相信这将会对我以后的学习工作生活有一定的影响。虽然这次设计还不是很完善,例如:输入超过4位数没有提示只是不能再输入,不能进行连续运算。但在设计中所学到的东西是这次设计最大的收获,在以后的学习中我会更加努力,争取做的更好。七参考文献(1)吴亦锋,陈德为.单片机原理与接口技术M.北京:电子工业出版社,2010.(2)周润景,袁伟亭,景晓松.Proteus在MCS-51&ARM7系统中的应用百例M.北京:电子工业出版社,2006.(3)张义和,王敏男,许宏昌,余春长.例说51单片机(C语言版)M.北京:人民邮电出版社,2008.八、附录附录一图21 系统硬件电路原

22、理图 附录二程序清单:#include"reg51.h"#include"absacc.h"#include"intrins.h"#define com XBYTE0x0000/LCD送命令#define dat XBYTE0x0002/LCD送数据unsigned char code tab="0123456789."unsigned char w,yi,yd,suan,d,h;unsigned long z1,pd;float z3,z2;void ys()unsigned char i,j;for(i=0;i

23、<10;i+)for(j=0;j<100;j+);/*/*LCD初始化*/*/void INIT()com=0x3c;ys();com=0x0c;ys();com=0x01;ys();com=0x04;ys();com=0x8f;ys();/*/*显示程序*/*/void sip()unsigned char qq,q;if(yd<=3)INIT();pd=z1;yd+;if(d=1)&(pd<10)dat=tabpd;ys();dat=tab10;ys();dat='0'd=0;else if(yd=1)qq=pd%10;dat=tabqq;e

24、lse for(q=0;q<yd;q+)qq=pd%10;if(q=1)&(d=1)dat=tab10;ys();d=0;dat=tabqq;pd=pd/10; else if(yd=100)INIT();dat='0'yd=0; else if(yd=101) INIT();/超出范围显示E com=0x06;ys();com=0x8f;ys();dat='E'yd=101;/*/*运算结果*/*/void fruit()unsigned char j;z3=(float)z1;switch(suan)case '+':z1=(u

25、nsigned long)z2+z3;break;case '-':z1=(unsigned long)z2-z3;break;case '*':z1=(unsigned long)z2*z3;break;case '/':z1=(unsigned long)z2/z3*10;j=z1%10;if(j=0)z1/=10;else d=1;break;if(z1>=0)&(z1<10)yd=0;/数值范围else if(z1>=10)&(z1<100)yd=1;else if(z1>=100)&

26、(z1<1000)yd=2;else if(z1>=1000)&(z1<10000)yd=3;else yd=101; /超出范围/*/*键值定义*/*/void split() switch(pd) /数字键 case 0:pd=7;if(h=1)h=0;z1=0;if(z1<1000)z1=z1*10+pd;break;case 1:pd=8;if(h=1)h=0;z1=0;if(z1<1000)z1=z1*10+pd;break;case 2:pd=9;if(h=1)h=0;z1=0;if(z1<1000)z1=z1*10+pd;break;c

27、ase 4:pd=4;if(h=1)h=0;z1=0;if(z1<1000)z1=z1*10+pd;break;case 5:pd=5;if(h=1)h=0;z1=0;if(z1<1000)z1=z1*10+pd;break;case 6:pd=6;if(h=1)h=0;z1=0;if(z1<1000)z1=z1*10+pd;break;case 8:pd=1;if(h=1)h=0;z1=0;if(z1<1000)z1=z1*10+pd;break;case 9:pd=2;if(h=1)h=0;z1=0;if(z1<1000)z1=z1*10+pd;break;c

28、ase 10:pd=3;if(h=1)h=0;z1=0;if(z1<1000)z1=z1*10+pd;break;case 13:pd=0;if(h=1)h=0;z1=0;if(z1<1000)z1=z1*10+pd;break;/功能键case 3:suan='/'z2=z1;h=1;yd=100;break;case 7:suan='*'z2=z1;h=1;yd=100;break;case 11:suan='-'z2=z1;h=1;yd=100;break;case 12:pd=0;yd=100;z1=0;h=1;d=0;bre

29、ak;case 14:fruit();break;case 15:suan='+'z2=z1;h=1;yd=100;break;sip();/*/*判断按键*/*/void key()ys();w=P1&0xf0;while(w!=0xf0)switch(w)case 0xe0:pd=yi*4+0;break;case 0xd0:pd=yi*4+1;break;case 0xb0:pd=yi*4+2;break;case 0x70:pd=yi*4+3;break;split();while(w!=0xf0)w=P1&0xf0;void main()INIT();dat='0'while(1)for(yi=0;yi<4;yi+)P1=_crol_(0xfe,yi);w=P1&0xf0;if(w!=0xf0)key();ys();19 / 19文档可自由编辑打印

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1