基于-AT89C51单片机简易计算器的设计_第1页
基于-AT89C51单片机简易计算器的设计_第2页
基于-AT89C51单片机简易计算器的设计_第3页
基于-AT89C51单片机简易计算器的设计_第4页
基于-AT89C51单片机简易计算器的设计_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、微机原理与单片机课程设计课程设计报告基于51单片机的简易计算器设计、设计目的单片机的出现是计算机制造技术高速发展的产物,它是嵌入式 控制系统的核心,如今,它已广泛的应用到我们生活的各个领域,电 子、科技、通信、汽车、工业等。本设计是基于 51系列单片机来进行 的简单数字计算器设计,可以完成计算器的键盘输入,进行加、减、 乘、除六位整数数范围内的基本四则运算,并在 LEDt显示相应的结 果。软件方面使用CS言编程,并用PROTUES真。二、总体设计及功能介绍根据功能和指标要求,本系统选用 MCS-5保列单片机为主控机, 实现对计算器的设计。具体设计及功能如下:(1)由于要设计的是简单的计算器,可

2、以进行四则运算,为了 得到较好的显示效果,采用LED显示数据和结果。(2)另外键盘包括数字键(09)、符号键(+、-、X、+)、 清除键和等号键,故只需要16个按键即可,设计中采用集成的计算 键盘。(3)执行过程:开机显示零,等待键入数值,当键入数字,通 过LEDS示出来,当键入+、-、*、/运算符,计算器在内部执行数值 转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数 值,按等号就会在LEDk输出运算结果。(4)错误提示:当计算器执行过程中有错误时,会在 LEDt显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示 范围时,计算器会在LEDt显示“CUO,提示溢出。三

3、、系统模块组成框图:输入模块51单片机二、硬件设计(一)、总体硬件设计本设计选用AT89C51单片机为主控单元。显示部分:采用LED动 态显示。按键部分:采用4*4集成计算键盘;总电路图:JTlT DEVICES口二 HLLE丙 HC573 Al&3t BLTTTflN EAP C4P-ELIC CRT51AL KrrPAD-SMALLCAlJC LED BLUE RES RESRATK SCUNMfi 5Ft:ER叵匚匚口回回回回 W 6 B fl b-(1)4X4集成计算键盘集成计算键盘本质上是4X 4矩阵键盘,矩阵键盘采用四条I/O线 作为行线,四条I/O线作为列线组成键盘,在行

4、线和列线的每个交叉 点上设置一个按键。这样键盘上按键的个数就为4X4个。这种行列式 键盘结构能有效地提高单片机系统中I/O 口的利用率。矩阵键盘的工作原理:计算器的键盘布局如图2所示:一般有16个键组成,在单片机中 正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也 最常用。矩阵键盘内部电路图如图所示:(三)、LED显示模块如图pa.o:光P0 1337P0.2430pa.3535FQTB34P0.5733PO.B启32P07s*2aX 3甘匕2SRE5PACK-BTFexIEIpo.o b p口. PCI2 4PU3 $.PCi.4 6P0.5 7 FOB SPO.7 9_U4.

5、PQ 口2PQ 2 qFG.3 g PiT4fiF0.5 7PE3 口 FO.TQ-U374HC573:LELE E-本设计采用LED共阴数码管来显示输出数据。共阴数码管的每一 位都是公共的阴极,只有输入低电平的时候才有可能被点亮, 所以位 选的时候被选中的位必须是低电平。本设计采用两个74HC573锁存器来驱动数码管,引脚如上图所 示。74HC573-1是控制段选的,74HC573-2是控制位选的,P2.6和P2.7 端口是锁存使能位,置高电平时锁存器透明(即输入和输出相同), 置低电平时锁存。74HC573的八个锁存器都是透明的 D型锁存器,当使能(G)为 高时,Q输出将随数据(D)输入而

6、变。当使能为低时,输出将锁存 在已建立的数据电平上。输出控制不影响锁存器的内部工作,即老数 据可以保持,甚至当输出被关闭时,新的数据也可以置入。这种电路 可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总 线,而不需要外接口。特别适用于缓冲寄存器,I/O通道,双向总线 驱动器和工作寄存器。HC573弓卿功能:引脚号 符号名称及功能1 OE3 态输出使能输入(低电平)2-9D0 - D7数据输入12-19 Q0 - Q7 3态锁存输出11 LE锁存使能输入12 GND接地(0V)20VCC电源电压(四)运算模块(51单片机控制)51单片机是在一块芯片中集成了 CPU RAM ROM定时器

7、/计数 器和多功能I/O等一台计算机所需要的基本功能部件。如果按功能划 分,它由如下功能部件组成,即微处理器(CPU、数据存储器(RAM、 程序存储器(ROM/EPROM并行I/O 口、串行口、定时器/计数器、 中断系统及特殊功能寄存器(SFR 。单片机是靠程序运行的,并且可以修改。通过不同的程序实现不 同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程 序可以实现高智能,高效率,以及高可靠性!因此我们采用单片机作为计算器的主要功能部件,可以很快地实现运算功能U1JXTAL1XTAL2RSTPSEN ALE EAP1.0/T2P1.1/T2EXP1.2P1.3Pl.qP1.5P1.B

8、P1,7POO/ADO P0.1/AD1 PO.2ZAD2 PQ3收口3 PD.4/AM PO 5/AD5 P0.8/AD6P0.7ZAD7P2 0/A8 P2,VA9P2.2/A1O P2.3/A11 P2.A12 P2.5/413 P2 e/A14 P2.7/A-15P3 0/RXD P3.1/TXD P3 2JMTO P3.3yiNT1P3.4/T0P3.5/T1P3.6WRP3.7/RtiTaecsG单片机最小系统复位时单片机的初始化操作,只要给 RS引脚加上两个机器周期以上的高电平信号,就可以使STC89C51片机复位。本次采用的是12M 晶振,按钮复位电路。三、软件设计现实生活中人

9、们熟知的计算器,其功能主要如下:1、 键盘输入;2、 数值显示;3、力口、减、乘、除四则运算;针对上述功能,计算器软件程序要完成以下程序的设计:1、 键盘输入检测程序2、 LEDS示程序3、 算术运算程序1、程序流程图系统总流程图LED显示算术运算程序流程图2、程序清单#include<reg52.h>#include<math.h>#define uchar unsigned char#define uint unsigned int#define ulong unsigned longsbit wela=P2” /定义端口sbit dula=P2A6;long in

10、1,in2,out,x;int cnt,i,flag; ucharcodenum尸0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,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)

11、 P0=0xff;wela=1;P0=0xf7;wela=0;dula=1;P0=num12;dula=0;delay(2);P0=0xff;wela=1;P0=0xef;wela=0;dula=1;P0=0x3e;dula=0;delay(2);P0=0xff;wela=1;P0=0xdf;wela=0;dula=1;P0=num0;dula=0;delay(2);return;)w1=x%10;w2=x/10%10;w3=x/100%10;w4=x/1000%10;w5=x/10000%10;w6=x/100000%10; if(f=1|w6)f=1;P0=0xff;wela=1;P0=0

12、xfe;wela=0;dula=1;P0=numw6;dula=0;delay(2);)if(f=1|w5)f=1;P0=0xff;wela=1;P0=0xfd;wela=0;dula=1;P0=numw5;dula=0;delay(2);)if(f=1|w4)f=1;P0=0xff;wela=1;P0=0xfb;wela=0;dula=1;P0=numw4;dula=0;delay(2);)if(f=1|w3)(f=1;P0=0xff;wela=1;P0=0xf7;wela=0;dula=1;P0=numw3;dula=0;delay(2);)if(f=1|w2)(f=1;P0=0xff;w

13、ela=1;P0=0xef;wela=0;dula=1;P0=numw2;dula=0;delay(2);)P0=0xff;wela=1;P0=0xdf;wela=0;dula=1;P0=numw1;dula=0;delay(2);)else(y=labs(x);if(y>=1e5)(P0=0xff;wela=1;P0=0xf7; wela=0; dula=1;P0=num12; dula=0; delay(2);P0=0xff; wela=1;P0=0xef; wela=0; dula=1;P0=0x3e; dula=0; delay(2);P0=0xff; wela=1;P0=0xd

14、f; wela=0; dula=1;P0=num0; dula=0; delay(2);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;P0=0xff;wela=1;P0=0xfd;wela=0;dula=1;P0=numw5;dula=0; delay(2);)if(f=1|w4)(if(f=0)(P0=0xff;wela=1;P0=0xfd;we

15、la=0;dula=1;P0=0x40;dula=0; delay(2);)f=1;P0=0xff;wela=1;P0=0xfb;wela=0; dula=1;P0=numw4;dula=0; delay(2);)if(f=1|w3)(if(f=0)(P0=0xff;wela=1;P0=0xfb;wela=0; dula=1;P0=0x40; dula=0; delay(2);)f=1;P0=0xff; wela=1;P0=0xf7; wela=0; dula=1;P0=numw3; dula=0;delay(2);) if(f=1|w2)if(f=0)P0=0xff;wela=1;P0=0x

16、f7;wela=0;dula=1;P0=0x40;dula=0; delay(2);)f=1;P0=0xff;wela=1;P0=0xef;wela=0;dula=1;P0=numw2;dula=0;delay(2);if(f=0)P0=0xff;wela=1;P0=0xef;wela=0;dula=1;P0=0x40;dula=0;delay(2);P0=0xff;wela=1;P0=0xdf;wela=0;dula=1;P0=numw1;dula=0;delay(2);void keyscan() /键盘扫描函数uchar temp;P1=0xfe;temp=P1;temp=temp&am

17、p;0xf0;if(temp!=0xf0)delay(8);temp=P1;temp=temp&0xf0;if(temp!=0xf0)temp=P1;switch(temp)case 0xee:if(cnt<6)cnt+;if(flag=0)in1=in1*10+7;x=in1;elsein2=in2*10+7;x=in2;break;case 0xde:if(cnt<6)cnt+;if(flag=0)in1=in1*10+8;x=in1;elsein2=in2*10+8;x=in2;break;case 0xbe:if(cnt<6)cnt+;if(flag=0)in

18、1=in1*10+9;x=in1;elsein2=in2*10+9;x=in2;break;case 0x7e:if(cnt!=0&&flag=0)cnt=0;flag=4;break;while(temp!=0xf0)temp=P1;temp=temp&0xf0;P1=0xfd;temp=P1;temp=temp&0xf0;if(temp!=0xf0)delay(8);temp=P1;temp=temp&0xf0;if(temp!=0xf0)temp=P1;switch(temp)case 0xed:if(cnt<6)cnt+;if(flag=0

19、)in1=in1*10+4; x=in1; else in2=in2*10+4; x=in2;break;case 0xdd:if(cnt<6)cnt+;if(flag=0)in1=in1*10+5; x=in1; else in2=in2*10+5; x=in2;break;case 0xbd:if(cnt<6)cnt+;if(flag=0)in1=in1*10+6; x=in1; else in2=in2*10+6; x=in2;break;case 0x7d:if(cnt!=0&&flag=0)cnt=0;flag=3;break;while(temp!=0x

20、f0)temp=P1;temp=temp&0xf0;P1=0xfb;temp=P1;temp=temp&0xf0;if(temp!=0xf0)delay(8); /消除抖动temp=P1;temp=temp&0xf0;if(temp!=0xf0)temp=P1;switch(temp)case 0xeb:if(cnt<6)cnt+;if(flag=0)in1=in1*10+1;x=in1; else in2=in2*10+1;x=in2; break;case 0xdb:if(cnt<6)cnt+;if(flag=0)in1=in1*10+2;x=in1;e

21、lsein2=in2*10+2; x=in2;break;case 0xbb:if(cnt<6)cnt+;if(flag=0)in1=in1*10+3; x=in1;elsein2=in2*10+3; x=in2;break;case 0x7 b:if(cnt!=0&&flag=0)cnt=0;flag=2;break;while(temp!=0xf0)temp=P1;temp=temp&0xf0;P1=0xf7;temp=P1;temp=temp&0xf0;if(temp!=0xf0)delay(8);temp=P1;temp=temp&0xf0

22、;if(temp!=0xf0) /证明有键按下,if 语句是为了让键盘松开temp=P1; switch(temp) case 0xe7:cnt=0;in1=0;in2=0;out=0;flag=0;x=0;break;case 0xd7:if(cnt<6) cnt+;if(flag=0) in1=in1*10+0;x=in1; else in2=in2*10+0;x=in2;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=0;flag=0;break;case 0x77:if(cnt!=0&&flag=0) cnt=0;flag=1;break;while(temp!=0xf0) /temp=P1;temp=temp&

温馨提示

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

评论

0/150

提交评论