基于51单片机的四则运算器的设计.

上传人:最**** 文档编号:116686763 上传时间:2019-11-17 格式:DOC 页数:13 大小:268.77KB
返回 下载 相关 举报
基于51单片机的四则运算器的设计._第1页
第1页 / 共13页
基于51单片机的四则运算器的设计._第2页
第2页 / 共13页
基于51单片机的四则运算器的设计._第3页
第3页 / 共13页
基于51单片机的四则运算器的设计._第4页
第4页 / 共13页
基于51单片机的四则运算器的设计._第5页
第5页 / 共13页
点击查看更多>>
资源描述

《基于51单片机的四则运算器的设计.》由会员分享,可在线阅读,更多相关《基于51单片机的四则运算器的设计.(13页珍藏版)》请在金锄头文库上搜索。

1、单片机设计论文 乔雨轩摘要当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,还是娱乐和消遣几乎样样都离不开电子产品,大型复杂的计算能力是人脑所不能胜任的,而且比较容易出错。计算器作为一种快速通用的计算工具方便了用户的使用。计算器可谓是我们最亲密的电子伙伴之一。本设计着重在于分析计算器软件和开发过程中的环节和步骤,并从实践经验出发对计算器设计做了详细的分析和研究。单片机由于其微小的体积和极低的成本,广泛的应用于家用电器、工业控制等领域中。在工业生产中。单片微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片微型计算机简称单片机,特别适用于控制领域,故

2、又称为微控制器。本系统采用AT89C52设计计算器控制器,实现了能根据实际输入值显示,简单运算的功能。关键词:电子;微控制器;AT89C52单片机;四则运算器;正文一、设计目的和要求课程设计是单片机课程教学的最后一个环节,是对学生进行全面的系统的训练。进行课程设计可以让学生把学过的比较零碎的知识系统化,真正的能够把学过的知识落到实处,能够开发简单的系统,也进一步激发了学生再深一步学习的热情,因此课程设计是必不少的,是非常必要的。本次课程设计是设计一个简易的四则运算计算器,四则运算器设计要求:用AT89C51单片机设计一个简易的一位四则运算器,扩展44个键,分别表示为09、+、-、RESULT、

3、CLEAR,并连接两个数码管。具体要求如下:(1)按CLEAR,数码管显示“0”,表示系统清零;(2)分别按数字键、运算符键、数字键、RESULT键后,在数码管上显示其运算结果。二、系统总体设计方案本次设计的简易的四则运算器,其只限于两位数的数值运算,并在数码管上实现了显示,可以显示两次输入的数值,输入计算符则数码管清除,无法显示小数,无法显示负数值。图1.单片机功能示意图三、单片机的概述:系统采用AT89C51单片机,该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,所以是一种高效微控制器。

4、 主要有以下特性:1、与MCS-51 兼容,2、4K字节可编程FLASH存储器,3、全静态工作:0Hz-24MHz,4、1288位内部RAM, 5、32可编程I/O线, 6、两个16位定时器/计数器, 7、5个中断源, 8、片内振荡器和时钟电路。 各管脚说明如下:VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:

5、P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内

6、部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的

7、频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不

8、管是否有内部程序存储器。RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。管脚示意图电源电路部分在各种电子设备中,直流稳压电源是必不可少的组成部分,它是电子设备唯一能量来源,它的设计思路是根据我们以前学过的模电电子技术,要想得到我们所要的+6V输出电压,就需将交流220V的电压经过变压器、整流电路、滤波电路和稳压电路四个部分。按键模块计算器输入数字和其他功能按键要用到很多按键,为此,我们引入了矩阵44键盘的应用,采用四条I/O线作

9、为行线,四条I/O线作为列线组成键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为44个。这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。当无按键闭合时,P10P13与P14P17之间开路。当有键闭合时,与闭合键相连的两条I/O口线之间短路。判断有无按键按下的方法是:第一步,置列线P14P17为输入状态,从行线P10P13输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。第二步,行线轮流输出低电平,从列线P14P17读入数据,若有某一列为低电平,则对应行线上有键按下。综合一二两步的结果,可确定按键编号。但是键闭合一次只能进行一次键功能操作,因此须

10、等到按键释放后,再进行键功能操作,否则按一次键,有可能会连续多次进行同样的键操作。键盘电路示意图显示模块数码管是显示屏其中一类, 通过对其不同的管脚输入相对的电流,会使其发亮,从而显示出数字,由于它的价格便宜,使用简单所以本次设计采用数码管来进行显示。数字09的共阳极字形代码如下表:五、软件流程图数码管显示求值结果结果赋值给key数码管清理显示0判断键值add=sub=mul=div=0;延时消抖键盘按下开始Key1=key;数字赋值给key,并在数码管上显示YY判断是否重复数字键按下加法时:add=1;减法时:sub=1;乘法时:mul=1;乘法时:div=1;数字赋值给key,并在数码管上

11、显示N运算符 数字键判断add,sub, mul,div的值是否等于1清零键add=1时,作加法运算;sub=1时,作减法运算;mul=1时,作乘法运算;div=1时,作除法运算;求值符号6、 源程序#include#include#define uchar unsigned char#define uint unsigned intuchar seg=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /数码管共阳极段码int flag,add=0,sub=0,mul=0,div=0,clean=0;float key1;sbit P23=P

12、23;sbit P22=P22;uchar key,kcode; /初始化/延时函数void delay() uchar i; for(i=0;i255;i+);/键盘扫描void key_saomiao()P1=0xfe;if(P1&0xf0)!=0xf0)delay(); if(P1&0xf0)!=0xf0) kcode=P1; switch(kcode)case 0xee:key=7;flag=0;break;case 0xde:key=8;flag=0;break;case 0xbe:key=9;flag=0;break; /如果是数字键,flag标记为0case 0x7e:flag=

13、1;break; /如果是计算功能键,flag标记为其他/扫描第一行P1=0xfd;if(P1&0xf0)!=0xf0)delay();if(P1&0xf0)!=0xf0) kcode=P1; switch(kcode)case 0xed:key=4;flag=0;break;case 0xdd:key=5;flag=0;break;case 0xbd:key=6;flag=0;break;case 0x7d:flag=2;break; /扫描第二行 P1=0xfb; if(P1&0xf0)!=0xf0)delay(); if(P1&0xf0)!=0xf0) kcode=P1; switch(

14、kcode)case 0xeb:key=1;flag=0;break;case 0xdb:key=2;flag=0;break;case 0xbb:key=3;flag=0;break;case 0x7b:flag=3;break; /扫描第三行P1=0xf7; if(P1&0xf0)!=0xf0)delay(); if(P1&0xf0)!=0xf0) kcode=P1; switch(kcode)case 0xe7:flag=4;break;case 0xd7:key=0;flag=0;break;case 0xb7:flag=5;break;case 0x77:flag=6;break; /扫描第四行 void seg_xs(uchar keyno)int nu

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号