基于AT89C51单片机简易计算器的设计说明.doc

上传人:scccc 文档编号:12061390 上传时间:2021-12-01 格式:DOC 页数:38 大小:1.22MB
返回 下载 相关 举报
基于AT89C51单片机简易计算器的设计说明.doc_第1页
第1页 / 共38页
基于AT89C51单片机简易计算器的设计说明.doc_第2页
第2页 / 共38页
基于AT89C51单片机简易计算器的设计说明.doc_第3页
第3页 / 共38页
基于AT89C51单片机简易计算器的设计说明.doc_第4页
第4页 / 共38页
基于AT89C51单片机简易计算器的设计说明.doc_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《基于AT89C51单片机简易计算器的设计说明.doc》由会员分享,可在线阅读,更多相关《基于AT89C51单片机简易计算器的设计说明.doc(38页珍藏版)》请在三一文库上搜索。

1、广東诲译大学微机原理与单片机课程设计课程设计报告基于51单片机的简易计算器设计学生姓名卓国焕(13432891614)专业电子信息工程所在班级1141学号201411611136指导老师欧触灵日期2016.10.312016.11.4、设计目的单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系 统的核心,如今,它已广泛的应用到我们生活的各个领域,电子、科技、通 信、汽车、工业等。本设计是基于51系列单片机来进行的简单数字计算器设计,可以完成计算器的键盘输入,进行加、减、乘、除六位整数数范围内的基本四则运算,并在LED上显示相应的结 果。软件方面使用C语言编程,并用PROTUES仿真。

2、二、总体设计及功能介绍 根据功能和指标要求,本系统选用MCS-51系列单 片机为主控机,实现对计算器的设计。具体设计及功能如下:(1 )由于要设计的是简单的计算器,可以进行四则运算,为了得到 较好的显示效果,采用LED显示数据和结果。(2)另外键盘包括数字键(09)、符号键(+、-、X、+)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算键盘。(3 )执行过程:开机显示零,等待键入数值,当键入数字,通过LED显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存 储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会 在LED上输出运算结果。(4)错误提示

3、:当计算器执行过程中有错误时,会在LED±显示相 应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时, 计算器会在LED上显示“ CUO 5,,提示溢出。三、系统模块组成框图:51单片机输入模块二、硬件设计(一)、总体硬件设计本设计选用AT89C51单片机为主控单元。显示部分:采用LED动态显示。按键部分:采用4*4集成计算键盘;总电路图:I月E氏心viMbuBUTIQN UP W4LEC RYEnU ID LED- £LLE乳峙 AE5®¥O £ EDIHUH Sre>FEFII(1) 4 x 4集成计算键盘集成计算键盘本

4、质上是4 x 4矩阵键盘,矩阵键盘采用四条I/O 条I/O线作为列线组成键盘,在行线和列线的每个线作为行线,四交叉点上设置一个按键。这样键盘上按键的个数就为4X4个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。矩阵键盘的工作原理:计算器的键盘布局如图2所示:一般有16个键组成,在单片机中正好可以用一个P 口实现16个按键功能,这种形式在单片机系统中也最常用。矩阵键盘内部电路图如图所示:厂入-ft。 厂S _Q 屣 P 厂。鼻* 严Q 亠 O1 flj卜。M。一°厂。 <J.GiV£RT(三)、LED显示模块 如图ABCDEFG DP1 "4

5、58F?P1口 i力RF«PACk.«XX4-±33P0.1/437P0.243ftP0.335B34P0.5 r33P0.6B32P0.7939 PO.O 2pojo 23DOQ?252iD213 DO13VbTP06 oP0.7PSCMs5N1iD414咗13 D612 D774HC573<TEXT>LE OEDOP1D2>3D4P .O 2QCM 3叩24P 46 讥7 =>0.6 合0.7 9DSDO>7AO 12034Q5Q6719 BO17 B2M即,lii"LEO£本设计采用LED共阴数码管来显示输出

6、数据。共阴数码管的每一位都是公共的阴极,只有输入低电平的时候才有可能被点亮,所以位选的时候被选中的位必须是低电平o本设计采用两个74HC573锁存器来驱动数码管,引脚如上图所示。74HC573-1是控制段选的,74HC573-2是控制位选的,P2. 6和P2. 7端口是锁存使能位,置高电平时锁存器透明(即输入和输出相 同),置低电平时锁存。74HC573的八个锁存器都是透明的D型锁存器,当使能(G)为高时,Q输出将随数据(D )输入而变。当使能为低时,输出将锁 存在已建立的数据电平上。输出控制不影响锁存器的内部工作,即老数 据可以保持,甚至当输出被关闭时,新的数据也可以置入。这种电路可以 驱动

7、大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需 要外接口。特别适用于缓冲寄存器,I/O通道,双向总线驱动器和工作寄存器HC573引脚功能:引脚号符号名称及功能10E3态输出使能输入(低电平)2-9D0 - D7数据输入12-19Q0 - Q73态锁存输出11LE锁存使能输入10GND接地(0V)20VCC电源电压四)运算模块(51单片机控制)51单片机是在一块芯片中集成了 CPU、RAM、ROM、定时器/计数 器和多功能I/O等一台计算机所需要的基本功能部件。如果按功能划分, 它由如下功能部件组成,即微处理器(CPU )、数据存储器(RAM )、程 序存储器(ROM/EPROM

8、)、并行I/O 口、串行口、定时器/计数器、中 断系统及特殊功能寄存器(SFR )。单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以 实现高智能,高效率,以及高可靠性!因此我们采用单片机作为计算器的主要功能部件,可以很快地实现运算功能U1X1AL1XTAL2RS7FOJO/ADO |D.d/ADd P0.2/AD2P0A/AD3P0.4AAD4 P0A/AD5 po.e/AteP0.7/AD7P2.0/ASF2.1/A9PS.2ZA1OPSBNALE EAP2.SM.11P2.AA12P2.5aA13F2,6XA14P2

9、 7/AWP価T2P3.O/RXDP1J/T2EXP3.1/TXDP1.ZPS .S/INIDP3.3/1 fJ TP1.41P1 5R3,4fTPl.fiDPI.7P5.5/T1zAT«9C5Z单片机最小系统Cl1nF <TEXT>C21nF*TEj 1119 Ir_xCRYSTALg IXTALZ10b复位时单片机的初始化操作,只要给RST引脚加上两个机器周期以上的高电平信号,就可以使STC89C51单片机复位。本次采用的是12M晶振,按钮复位电路。三、软件设计现实生活中人们熟知的计算器,其功能主要如下:1、键盘输入;2、数值显示;3、力口、减、乘、除四则运算;针对上

10、述功能,计算器软件程序要完成以下程序的设计:1 、键盘输入检测程序2、LED显示程序3、算术运算程序1 程序流程图系统总流程图LED显示算术运算程序流程图2、程序清单#in clude<reg52.h>#in clude<math.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int#defi ne ulong un sig ned long sbit wela=P2A7; / 定义d需口sbit dula=P2A6;long in1 ,in2,out,x;int ent,i,flag;codeucha

11、rnum=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,Ox 5e,0x79,0x71;/LED 显示字模,共阴void delay(uint xms) / 延时函数uint j;for(i=xms;i>0;i-)for(j=114;j>0;j-);void display() /显示函数声明uchar w1 ,w2,w3,w4,w5,w6,f=0;long y;if(x>=0) /显示六位计时数if(x>=1e6)PO=Oxff;wela=1;P0=0xf7;wela=0;dula=1

12、;P0=num12;dula=0;delay ;PO=Oxff;wela=1;PO=Oxef;wela=0;dula=1;P0=0x3e;dula=0;delay ;PO=Oxff;wela=1;PO=Oxdf;wela=0;dula=1;P0=num0;dula=0;return;w1 =x%10;w2=x/10%10;w3=x/100%10;w4=x/1000%10;w5=x/10000%10;w6=x/100000%10;delay(2); if(f=1|w6)f=1;PO=Oxff; wela=1;PO=Oxfe; wela=O; dula=1;P0=numw6; dula=O; de

13、lay ;if(f=1|w5)f=1;PO=Oxff; wela=1;PO=Oxfd; wela=O; dula=1;P0=numw5; dula=O; delay ;if(f=1|w4)f=1;PO=Oxff; wela=1;PO=Oxfb; wela=O; dula=1;P0=numw4; dula=O;delay ;if(f=1 |w3)f=1 ; PO=Oxff; wela=1; P0=0xf7; wela=O; dula=1;P0=numw3; dula=O; delay(2);if(f=1|w2)f=1 ; PO=Oxff; wela=1; PO=Oxef; wela=O; dul

14、a=1;P0=numw2; dula=O; delay(2);PO=Oxff;wela=1;PO=Oxdf;wela=O;dula=1; P0=numw1; dula=O;delay ;elsey=labs(x);if(y>=1e5)wela=1;P0=0xf7; wela=O; dula=1;P0=num12; dula=O; delay ;PO=Oxff; wela=1; PO=Oxef; wela=O; dula=1; P0=0x3e; dula=O; delay ;PO=Oxff; wela=1; PO=Oxdf; wela=O; dula=1; PO=numO; dula=O;

15、 delay ;return;w1 =y%10;w2=y/10%10;w3=y/100%10;w4=y/1000%10;w5=y/10000%10;if(f=1|w5)if(f=0)P0=0xff; wela=1;P0=0xfe; wela=0; dula=1;P0=0x40; dula=0;delay(2);f=1;PO=Oxff; wela=1;PO=Oxfd; wela=O; dula=1; P0=numw5; dula=O; delay(2);if(f=1|w4)<if(f=O)PO=Oxff; wela=1;PO=Oxfd; wela=O; dula=1; P0=0x40; d

16、ula=O; delay(2);f=1; PO=Oxff; wela=1;PO=Oxfb; wela=O; dula=1; P0=numw4; dula=O; delay(2);if(f=1|w3)if(f=O)wela=1; PO=Oxfb; wela=O;dula=1;P0=0x40; dula=O; delay ;f=1; PO=Oxff; wela=1;P0=0xf7; wela=O; dula=1; P0=numw3; dula=O; delay(2);if(f=1|w2)if(f=O)PO=Oxff; wela=1;P0=0xf7; wela=O; dula=1;P0=0x40;

17、dula=O; delay(2);f=1;PO=Oxff; wela=1;PO=Oxef; wela=O; dula=1;P0=numw2; dula=O;delay ;if(f=O)PO=Oxff; wela=1; PO=Oxef; wela=O; dula=1: P0=0x40; dula=O; delay ;PO=Oxff; wela=1; PO=Oxdf; wela=O; dula=1; P0=numw1; dula=O; delay ;void keyscan() /键盘扫描函数uchar temp;P1=Oxfe; temp=P1;temp=temp&OxfO; if(te

18、mp!=OxfO)delay(8); temp=P1; temp=temp&OxfO; if(temp!=OxfO) <temp=P1; switch(temp) case Oxee: if(cnt<6) < cnt+;if(flag=O) in1=in1*10+7;x=in1;elsein2=in2*10+7;x=in2;break;case Oxde:if(cnt<6)cn t+;if(flag=O) <in1=in1*10+8; x=in1;elsein2=in2*10+8; x=in2;break;case Oxbe:if(cnt<6)cn

19、t+;if(flag=O)<in1=in1*10+9;x=in1;elsein2=in2*10+9; x=in2;break;case 0x7e:if(cnt!=O&&flag=O)cnt=O; flag=4;break;while(temp!=OxfO)temp=P1; temp=temp&OxfO;P1=0xfd; temp=P1; temp=temp&0 xfO; if(temp!=OxfO)delay(8);temp=P1; temp=temp&OxfO;if(temp!=OxfO)(temp=P1;switch(temp)case Oxe

20、d: if(cnt<6) <cnt+; if(flag=O) <in1=in1*10+4; x=in1;JelseHn2=in2*10+4;x=in2;break;case Oxdd:if(cnt<6)cnt+; if(flag=O) Hn1=in1*10+5; x=in1;else<in2=in2*10+5; x=in2;break;case Oxbd:if(cnt<6)cnt+; if(flag=O) Hn1=in1 *10+6; x=in1;else<in2=in2*10+6;x=in2;break;case 0x7d: if(cnt!=0&am

21、p;&flag=O) tcnt=O; flag=3;break;while(temp!=OxfO)temp=P1; temp=temp&OxfO;P1=0xfb;temp=P1; temp=temp&OxfO;if(temp!=OxfO)delay(8); / 消除抖动 temp=P1;temp=temp&OxfO; if(temp!=OxfO)(temp=P1;switch(temp)(case Oxeb: if(cnt<6) <cnt+; if(flag=O) Hn1=in1*1O+1; x=in1;elsein2=in2*10+1;x=in2;

22、 break; case Oxdb: if(cnt<6)cnt+; if(flag=O) in1=in1*10+2;x=in1;)else Hn2=in2*10+2; x=in2;break; case Oxbb: if(cnt<6) <cnt+; if(flag=O) <in1 =in1 *10+3; x=in1;elsein2=in2*10+3; x=in2; break; case 0x7b: if(cnt!=O&&flag=O)cnt=O; flag=2;break;while(temp!=OxfO)temp=P1; temp=temp&

23、OxfO;P1=0xf7; temp=P1;temp=temp&OxfO; if(temp!=OxfO) delay(8); temp=P1; temp=temp&OxfO;if(temp!=OxfO) /证明有键按下,if语句是为了让键盘松开 temp=P1; switch(temp) <case 0xe7: cnt=O; in1=0; in2=0; out=0; flag=O;x=0; break;case 0xd7: if(cnt<6) <cnt+; if(flag=O) Hn1=in1*10+0; x=in1;JelseHn2=in2*10+0;x=i

24、n2;break; case 0xb7: / 如果得到符号位 switch(flag)case 1: out=in1+in2; / 加 break; case 2: out=in1-in2;break;减case 3:乘out=in1*in2; break; case 4: if(in2)out=in1/in2;break;除x=out;in1=0;in2=0;cnt=O;flag=O;break; case0x77:if(cnt!=0&&flag=0) cnt=0; flag=1;break;while(temp!=0xf0)/等待按键松开temp=P1; temp=temp

25、&0xf0;void main()主函数while(1)keysca n(); display();四、设计总结1、软件调试在软件调试的过程中,一开始没有做数值溢出方面的控制,导致LED 显示的输入数据或计算结果与实际不相符。通过多次调试,软件能够正常 运行,基本实现与其功能,通过矩阵键盘输入第一个数据后,按下所需运 算符号后,再次通过矩阵键盘输入第二个数据,最后按下等号,能够正确 显示计算结果。如需继续计算,继续按照上述步骤输入数据即可。2、硬件调试(略)3、总结课程设计是培养我们综合运用所学知识,发现' 提出、分析和 解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能

26、力的具 体训练和考察过程。随着科学技术发展的日新日异,单片机已经成为当今 计算机应用中空前活跃的领域,在生活中可以说得是无处不在。因此作为 计算机专业的学生来说掌握单片机的开发技术是十分重要的。设计基于单片机设计简易计算器,对于我这个实践中的新手来说,这 是一次考验。这次课程设计我学到很多很多的东西,学会了怎么在遇到问题 时去解决问题。不仅巩固了以前所学过的知识,而且学到了很多在书本上 所没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编 程。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理 论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从而提 高自己的实际动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,还要断学习单片机的相关知识。附录1、加法15+4结果2、减法17-71C34O53、乘法15*44、除法 100/10I00PSCOCFG CF153-*355、显错 33333*44433333PBCDEFG CF1 £34-351-«-|

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

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


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