欢迎来到沃文网! | 帮助中心 分享知识,传播智慧!
沃文网
全部分类
  • 教学课件>
  • 医学资料>
  • 技术资料>
  • 学术论文>
  • 资格考试>
  • 建筑施工>
  • 实用文档>
  • 其他资料>
  • ImageVerifierCode 换一换
    首页 沃文网 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    简易计算器的设计.doc

    • 资源ID:856936       资源大小:483.97KB        全文页数:22页
    • 资源格式: DOC        下载积分:20积分
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录 微博登录
    二维码
    微信扫一扫登录
    下载资源需要20积分
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,下载更划算!
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    简易计算器的设计.doc

    1、摘要:近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。计算机在人们的日常生活中是比较常见的电子产品之一。可是它还在发展之中,以后必将出现功能更加强大的计算机,基于这样的理念,本次设计是用AT89C51单片机、LED显示器、控制按键为元件来设计的计算器。利用此设计熟悉单片机微控制器及C语言编程,对其片资源及各个I/O端口的功能和基本用途的了解。关键词:51单片机;LED ;控制按键目 录1方案选择1 1.1题目

    2、要求1 1.2设计方案1 1.3 方案原理 12硬件原理电路图的设计与分析12.1 各部分电路的设计思路12.2各部分电路的功能特性52.3 原理电路图63程序设计与分析63.1 各模块程序的设计73.2完整的程序框图84系统仿真图94.1 计算机硬件连线图94.2仿真结果94.3 PCB图115系统评价126心得体会12参考文献12附录131. 方案选择1.1 题目要求(1)通过小键盘实现数据的输入,并在LED数码管上显示(2)实现+、-、*、/ (3)在LED数码管上显示结果(4)并有清零,退出功能1.2设计方案(1) 键盘部分要求实现+、-、*、/四种运算。另外包括数字键(09)、清除键

    3、和等号键,共需要16个键,故采用16 个按键即可。 (2) 对于输入的数据可以选择在LCD上显示也可以选择在LED数码管显示。由于要设计的是简单的计算器,可以进行简单的四则运算,对数字的大小范围要求不高,故我们采用可以进行六位数字的运算,选用6 个LED 数码管显示数据和结果。(3)在LED上显示数据时,利用AT89C51的引脚来控制驱动电路从而实现位选。(4)在选择主控机时本设计选用AT89C51。由于AT89C51不但继承了MCS-51的原有功能,而且AT89C51单片机内的4KB Flash存储器可在线编程或使用编程器重复编程,且价钱较低,故选用AT89C51单片机作为主控机。1.3 方

    4、案原理计算器一般由运算器、控制器、存储器、键盘、显示器、电源和一些可选外围设备及电子组成。该系统通过AT89C51单片机控制,实现对4*4键盘扫描进行实时的按键检测,并把检测数据存储下来,并显示在LED数码管上。键盘是计算器的输入部件,显示器是计算器的输出部件。整个计算器系统的工作过程为:首先存储单元初始化,显示初始值和键盘扫描,判断按键位置,查表得出按键值,单片机则对数据进行储存与相应处理转换,之后送入数码管显示。2硬件原理电路图的设计与分析2.1 各部分电路的设计思路 2.1.1 系统模块图:2.1.2 输入模块键盘扫描计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在

    5、这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式。为此,我们引入了矩阵键盘的应用,采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为44个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。计算器的键盘布局如图2 所示:一般有16 个键组成,在单片机中正好可以用一个P 口实现16 个按键功能,这种形式在单片机系统中也最常用。 图2、矩阵键盘布局图 图3、矩阵键盘内部电路图2.1.2 单片机模块AT89C51 单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计

    6、数器和多功能I/O等一台计算机所需要的基本功能部件。如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O 口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!因此我们采用单片机作为计算器的主要功能部件,可以进行很快地实现运算功能。2.1.3 运算模块 用LED显示数据时分为位选和段选。此模块用P1.0P1.3四个P1口引脚来控制位选,用P0口来控制数码管的

    7、段选。由于选用的是六位数的LED所以有六个位选,而在用P1引脚时只有4个引脚可供用,所以选用74HC138译码器来控制6个位选。用74HC245锁存器来储存数据。2.1.4 显示模块通常的数码显示器是由7 段条形的LED 组成,点亮适当的字段,就可显示出不同的数字。我们采用8 段数码管,其中位于显示器右下角的LED 作小数点用。LED 显示器有两种不同的形式:共阴极和共阳极。本次设计采用共阳极接法。数字09的共阳极字形代码如下表:显示字型gfedcba段码001111110c0h100001100f9h210110110a4h310011110b0h4110011099h5110110192h

    8、6111110182h700001110f8h8111111180h9110111190h2.2各部分电路的功能特性 2.2.1 输入模块功能 本设计采用P2口控制键盘。当无按键闭合时,P2.0P2.3 与P2.4P2.7 之间开路。当有键闭合时,与闭合键相连的两条I/O 口线之间短路。确定按键编号的方法:第一步,置列线P2.4P2.7 为输入状态,从行线P2.0P2.3 输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。第二步,行线轮流输出低电平,从列线P2.4P2.7 读入数据,若有某一列为低电平,则对应行线上有键按下。综合一二两步的结果,可确定按键编号。判断有无按键按下的

    9、方法是:当有键按下时蜂鸣器会发出声音,没有按下时则不会有声音。但是键闭合一次只能进行一次键功能操作,因此须等到按键释放后,再进行键功能操作,否则按一次键,有可能会连续多次进行同样的键操作。2.2.2 单片机模块功能AT89C51是整个设计的核心模块。利用AT89C51的P0口控制数码管的段选,从而实现数字09的显示,P2口控制按键,用P1口的前三个引脚与74HC138译码器相连,从而实现对数码管位选的控制。2.2.3 运算模块的功能选用74HC138译码器来控制位选。这样可以节约P1口,在写程序时不至于发生混乱,简单明了。2.2.4 显示模块的功能LED 显示发光二极管LED 是单片机应用系统

    10、中的一宗简单而常用的输出设备,其在系统中的主要作用是显示单片机的输出数据、状态等。因而作为典型的外围器件,LED 显示单元是反映系统输出和操作输入的有效器件。LED 具备数字接口可以方便的和系统连接;它的优点是价格低,寿命长,对电压电流的要求低及容易实现多路等。2.3 原理电路图3程序设计与分析在程序设计方法上,模块化程序设计是单片机应用中最常用的程序设计方法。设计的中心思想是把一个复杂应用程序按整体功能划分成若干相对独立的程序模块,各模块可以单独设计、编程和调试,然后组合起来。这种方法便于设计和调试,容易实现多个程序共存,但各个模块之间的连接有一定的难度。根据需要我们可以采用自上而下的程序设

    11、计方法,此方法先从主程序开始设计,然后再编制各从属程序和子程序,层层细化逐步求精,最终完成一个复杂程序的设计。3.1 各模块程序的设计3.1.1 按键扫描 在C语言的基础上,采用P2口控制键盘。当无按键闭合时,P2.0P2.3 与P2.4P2.7 之间开路。当有键闭合时,与闭合键相连的两条I/O 口线之间短路。确定按键编号的方法:第一步,置列线P2.4P2.7 为输入状态,从行线P2.0P2.3 输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。第二步,行线轮流输出低电平,从列线P2.4P2.7 读入数据,若有某一列为低电平,则对应行线上有键按下。综合一二两步的结果,可确定按键

    12、编号。3.1.2 验证数据的有效性 由于选用的是六位的数码管,可达到的最大数据为99999,当输入的数据或计算出的数据结果大于99999时,会出错。具体用如下语句来实现:bit check_num(float f_num) if (f_num = 100000)return 1;return 0;3.1.3 数码管显示 数码管有段选和位选,不同的数据控制不同的位,因此采用C语言中的选择语句来实现对数码管显示的程序控制。3.1.4 计算程序 简单的计算器有加、减、乘、除四种运算。此部分程序框图如下:数值送缓冲显示错误信息送缓冲显示 除数为0?运算溢出?减除乘加运算符是?开 始 Y Y N N3.

    13、2完整的程序框图开 始 初始化参数初始化LED显示有按键入?读取按键 Y数字键?读取数值 N Y N清零键?数值送显示缓冲状态清零 Y N功能键? N LED显示等待数值输入结果送显示缓冲执行本次功能键根据上次功能键和输入的数据计算结果数值送显示缓冲 Y 4系统仿真图4.1 系统仿真连线图4.2仿真结果 4.2.1 加法4.2.2 减法4.2.3 乘法4.2.4 除法4.3 PCB图5 系统评价 本设计实现了简单计算器的数据输入以及加、减、乘、除、清零等功能。对于简单的数据可以进行运算,比较方便简洁。在硬件设计方面所用到的器件相对较少,但主控元件引脚较多,想要完全掌握有点困难,而且在选择端口的

    14、时候有点复杂。在软件方面,实现了设计的要求,程序语句简单,但是代码比较多,容易记错。由于是简单的计算器所以最大值能达到99999,适合做简单数字较小的运算,精确读可达到0.0001,对要求严格的数字精确度不是太高。针对以上问题,在熟悉更多器件的情况下,可以利用更换元器件来改进。6心得体会通过该计算器的设计我深入学习数码管扫描和键盘控制,提高了对51系列单片机的实际应用能力。同时也掌握应用程序控制51系列单片机进行简单的数学运算。提高了对51系列单片机的编程能力。这门课是最能理论联系实际的课,我们的目的是做出东西,为了这我们需要学关于这方面的各种知识,从被动性的接受知识变成了主动性的寻找知识。在

    15、此制作过程中使我们在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。同时,也深刻认识到要做出来一个东西真的不是一件容易的事,它需要将各个方面的知识都记起来再加以运用,因此这就需要我们有很好的知识基础。参考文献1张毅刚,彭喜元等.单片机原理及应用(第2版).北京.高等教育出版社,20102孙育才等.MCS-51系列单片微型计算机及其应用(第4版)上海.东南大学出版社,20043单片机应用技术(C语言).北京.中国劳动社会保障出版社,20064武庆生,仇梅等著.单片机原理与应用.北京.电子科技大学出版,19

    16、98 5朱定华著.单片机原理与接口技术.西安.电子工业出版社,20016龚运新著.单片机C语言开发技术.北京.北京清华大学出版社,2006 7周立功.单片机实验与实践.北京.北京航空航天大学出版社,2004附录: 程序代码:20 #include typedef unsigned char uint8;typedef unsigned int uint16;typedef unsigned long uint32;typedef char int8; typedef int int16;typedef long int32;sbit KeyIn1 = P24; / P2.4引脚控制KeyIn1

    17、;sbit KeyIn2 = P25; / 用P2.5引脚控制KeyIn2sbit KeyIn3 = P26; / 用P2.6引脚控制KeyIn3sbit KeyIn4 = P27; / 用P2.7引脚控制KeyIn4sbit KeyOut1 = P23; / 用P2.3引脚控制KeyOut1 sbit KeyOut2 = P22; / 用P2.2引脚控制KeyOut2sbit KeyOut3 = P21; / 用P2.1引脚控制KeyOut3sbit KeyOut4 = P20; / 用P2.0引脚控制KeyOut4sbit ADDR0 = P10; /P1.0引脚控制74HC138译码器的

    18、A引脚sbit ADDR1 = P11; /P1.1引脚控制74HC138译码器的B引脚sbit ADDR2 = P12; /P1.2引脚控制74HC138译码器的C引脚sbit ADDR3 = P13; /P1.3引脚控制74HC138译码器的E1引脚sbit ENLED = P14; /P1.4引脚控制74HC138译码器的E2 E3引脚sbit BUZZ = P16; /用P1.6引脚控制蜂鸣器;#define FADD10 /给FADD赋值为10#define FSUB11 /给FSUB赋值为11#define FMUL12 /给FMUL赋值为12 #define FDIV13 /给F

    19、DIV赋值为13#define FRES14 /给FRES赋值为14#define FEQU15 /给FEQU赋值为15 #define KEY_DELAY 300/按键延时赋值300#define BUZ_DELAY 80/蜂鸣器延时赋值80code uint8 Ledcode13=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf,0x86; /数字09以及-,E的共阳极字形代码uint8 Led_n=0;uint8 Led_buf6;float Tmp1=0, Tmp2=0; /给Tmp1、Tmp2赋初值为0int8 C

    20、_flag=0;/* 延时*/void delay(uint16 n)while (n-);/* 蜂鸣器发声*/void buzzer_sound(void)uint16 i;for (i=0; i 0)buzzer_sound();return val;/* 验证数据有效性*/bit check_num(float f_num) /最大输入数为99999if (f_num = 100000)return 1;return 0;/* 制作数码管错误标志*/void make_led_error(void)int8 i;for (i=0; i5; i+)Led_bufi = Ledcode10;

    21、/不显示任何数字Led_buf5 = Ledcode12;/错误标志E送到显示缓冲/* 制作数码管整数数据*/void make_led_inumber(int32 i_num)bit s_flag=0; /定义负数标志位int16 sit;int8 i;if (i_num =1; i-, sit/=10)if (i_num = sit)break;Led_bufi = Ledcode10;i_num -= i_num/sit*sit;for (;i=1; i-, sit/=10)Led_bufi = Ledcodei_num/sit;i_num -= i_num/sit*sit;Led_bu

    22、f0 = Ledcodei_num & 0x7F;/最后一位显示小数点if (s_flag)Led_buf5 = Ledcode11;elseLed_buf5 = Ledcode10;ET0 = 1; /允许T0中断/* 制作数码管浮点数据*/void make_led_fnumber(float f_num)bit s_flag=0;int32 num;int16 sit;int8 i, decimal, dot_sit=0;if (f_num 0; decimal-)if (num % 10 != 0)break;num /= 10;dot_sit = decimal;if (f_num

    23、= 10000)dot_sit = 0;else if (f_num = 1000)if (decimal = 1)dot_sit = 1;else if (f_num = 100)if (decimal = 2)dot_sit = 2;else if (f_num = 10)if (decimal = 3)dot_sit = 3;for (i=0; i=1; i-, sit/=10)if (num = sit)break;if (i = dot_sit)break;Led_bufi = Ledcode10;num -= num/sit*sit;for (;i=1; i-, sit/=10)L

    24、ed_bufi = Ledcodenum/sit;num -= num/sit*sit;Led_buf0 = Ledcodenum;Led_bufdot_sit &= 0x7F;/显示小数点if (s_flag)Led_buf5 = Ledcode11;elseLed_buf5 = Ledcode10;ET0 = 1;/*数码管显示*/void show_num(uint8 *buf)ENLED = 1; /74HC138译码器的E2 、E3无效switch (Led_n)case 0: /位选为0,则P1.0、P1.1、P1.2都为0,译码器Y0有效ADDR0 = 0;ADDR1 = 0;A

    25、DDR2 = 0;P0 = buf0;break;case 1: /位选为1,则P1.0为1,P1.1、P1.2都为0,译码器Y1有效ADDR0 = 1;ADDR1 = 0;ADDR2 = 0;P0 = buf1;break;case 2: /位选为2,则P1.2为1,P1.,0、P1.2都为0,译码器Y2有效ADDR0 = 0;ADDR1 = 1;ADDR2 = 0;P0 = buf2;break;case 3: /位选为3,则P1.3为0,P1.,0、P1.2都为1,译码器Y3有效ADDR0 = 1;ADDR1 = 1;ADDR2 = 0;P0 = buf3;break;case 4: A

    26、DDR0 = 0;ADDR1 = 0;ADDR2 = 1;P0 = buf4;break;case 5: ADDR0 = 1;ADDR1 = 0;ADDR2 = 1;P0 = buf5;break;ENLED = 0;if (Led_n = 5)Led_n = 0;elseLed_n+;/* 计算程序*/void calculate(int8 key_val)float ans;bit err=0;if (key_val = FADD) & (key_val = FDIV)C_flag = key_val;else if (key_val = FEQU)switch (C_flag)case

    27、FADD: ans = Tmp1-Tmp2; break;case FSUB: ans = Tmp1*Tmp2; break;case FMUL:if (Tmp2 = 0)err = 1;break;elseans = Tmp1/Tmp2; break;case FDIV: ans = Tmp1+Tmp2; break;if (check_num(ans)err = 1;if (err)make_led_error();elsemake_led_fnumber(ans);C_flag = 0;Tmp1 = 0;Tmp2 = 0;else if (key_val = FRES)make_led_

    28、fnumber(0);C_flag = 0;Tmp1 = 0;Tmp2 = 0;elseif (C_flag = 0)ans = Tmp1;ans *= 10;ans += key_val;if (check_num(ans)return;elseTmp1 = ans;make_led_inumber(Tmp1);elseans = Tmp2;ans *= 10;ans += key_val;if (check_num(ans)return;elseTmp2 = ans;make_led_inumber(Tmp2);main()int8 key_val;ADDR3 = 1; /使得74HC13

    29、8的E1有效 ENLED = 0;make_led_inumber(0); TMOD = 0x01; /设计T0为方式1定时 TH0 = 0xF8; /装入计数初值的高8位 TL0 = 0xCC; /装入计数初值的低8位 TR0 = 1; /接通T0ET0 = 1; /允许T0中断 EA = 1; /总中断允许while (1)key_val = scan_key(); /按键扫描程序if (key_val = -1)continue;calculate(key_val); /计算程序void time0() interrupt 1TR0 = 0;TH0 = 0xF8;TL0 = 0xCC;show_num(Led_buf); /数字显示TR0 = 1;


    注意事项

    本文(简易计算器的设计.doc)为本站会员(精***)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服点击这里,给沃文网发消息,QQ:2622162128 - 联系我们

    版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

    Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1

    陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922