基于51单片机的多功能计算器全套设计

通过本次课题设计,应用《单片机应用基础》、《数据结构》等所学相关知识及查阅资料,完成实用计算器的设计,以达到理论与实践更好的结合、进一步提高综合运用所学知识和设计的能力的目的。

通过本次设计的训练,可以使我在基本思路和基本方法上对基于MCS-51单片机的嵌入式系统设计有一个比较感性的认识,并具备一定程度的设计能力。

1.1.2 设计要求

在本次课程设计中,主要完成如下方面的设计要求:

1、掌握MCS-51系列某种产品(例如8051)的最小电路及外围扩展电路的设计方法;

2、计算器能实现加、减、乘、除、平方、开方、N次方、开N次方、正弦函数、                                  余弦函数、正切函数、反正弦、反余弦、反正切、对数运算、阶乘(N<=34)、排列、                 组合、累加等十九种功能。

3、支持浮点数运算;

4、较为友好的界面显示,对输入实时显示,对计算结果输出显示;

5、能够具备比较完善的报错系统

1.2 方案论证及选择

基于设计要求,笨设计考虑了两种设计方案,他们均可以实现计算器的功能,但基于设计目的及微控制器的广泛运用,比较两种方案的优劣,最终选择基于51单片机的计算器设计。

1.2.1 方案一 采用FPGA控制

FPGA是一种高密度的可编程逻辑器件,自从Xilinx公司1985年推出第一片FPGA以来,FPGA的集成密度和性能提高很快,其集成密度最高达500万门/片以上,系统性能可达200MHz。由于FPGA器件集成度高,方便易用,开发和上市周期短,在数字设计和电子生产中得到迅速普及和应用,并一度在高密度的可编程逻辑器件领域中独占鳌头。
但是而基于 SRAM编程的FPGA,其编程信息需存放在外部存储器上 ,需外部存储器芯片 ,且使用方法复杂 ,保密性差,而其对于一个简单的计算器而言,实用FPGA有点大材小用,成本太高。


1.2.2 方案二 采用STC89C52

单片机是单片微型机的简称,故又称为微控制器MCU(Micro Control Unit)。通常由单块集成电路芯片组成,内部包含有计算机的基本功能部件:中央处理器CPU,存储器和I/O接口电路等。因此,单片机只要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。单片机广泛用于智能产品,智能仪表,测控技术,智能接口等,具有操作简单,实用方便,价格便宜等优点,而其中AT89S52以MCS-51为内核,是单片机中最典型的代表,应用于各种控制领域。

1.2.3 方案比较及选择

通过以上两种方案论证和比较,从设计的实用性,方便性和成本出发,选择了以STC89C52单片机作为中央处理单元进行计算器的设计,这样设计能够实现对六位浮点数的加减和三位浮点数的乘除运算。



2  单元电路设计

2.1  工作原理

利用矩阵键盘进行按键的输入,通过对矩阵键盘的扫描,获取用户的输入,并实时的显示在1602液晶上,每次获取到输入时,根据软件设计的相应方法对输入进行处理、运算,输入结束后(以“=“为标志),将最终的运算结果输出的液晶上。

系统组成及整体框图如图2.1所示。

图2.1 系统组成及总体框图(见附件)



2.2  硬件电路设计
2.2.1  单片机电路设计

为使单片机正常工作,除电源供电部分外,还需提供晶振电路和复位电路。具体电路如下:

图2.2 单片机工作电路

由图2.2可知,9脚外接的是按键复位电路,18,19脚外接的是晶振电路,这样,就构成了单片机正常工作的必备电路。同时,为使P0口正常工作,并增加其带负载能力,P0口需接了上拉电阻。图中EA为外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。在这里,STC89C52单片机8k的程序存储器已经够本设计使用,无需外部程序储存器,故EA直接接高电平。


2.2.2  键盘模块电路

图2.3是键盘电路,共20个按键,用来实现人机交互和运算表达式的输入,S0~S3、S5~S8、S10~S13、S15~S18共16个按键组成一组4*4的矩阵键盘,行线第一行到第四行分别接在P3.0~P3.3口,列线第一列到第四列分别接在P3.4~P3.7口,这样P3口就完成了对4*4的矩阵键盘的接线。同时,注意到按键数量还达不到要求,故增加了四个独立按键S4,S9,S14,S19。他们依次接在P20~P23口。可见,矩阵键盘相对来讲更节省I/O口,但本着学习的目的,加之本设计并不需要太多的I/O口,故为充分学习和利用资源,在这里也设计了4个这样的独立按键。

图2.3  键盘模块电路

2.2.3  蜂鸣器提示电路

蜂鸣器主要用于按键时发出声音,提示当前的按键操作,电路如图2.5所示,三极管主要用于驱动蜂鸣器,因为单片机I/O的驱动能力有限。同时单片机I/O口还在这里还起到开关作用,为‘0’时打开蜂鸣器通道,使蜂鸣器发声。

图2.4  蜂鸣器提示电路

2.2.4  液晶显示电路

LCD也是本次设计的重要组成部分之一,主要用于显示输入和输出。电路如图2.5所示,LCD数据端与单片机P0口相连,控制端与P24~P26连接,电位器用于调节对比度。

图2.5  LCD显示电路

至此,整个电容测量仪的硬件设计部分就基本设计完成,接下来,需要的就是与之相匹配的软件支持了。


2.3 软件设计

软件编程平台选择最常用的keil软件。由于该程序并未涉及到底层的驱动问题,因此选择方便快捷的C语言编程。在编程中,将该程序分为四个模块:延时模块、1602显示模块、用于处理计算表达式的对战模块及主函数模块。采用模块化设计,方便调试与理解。具体程序见附录二。在这里重点介绍软件核心的表达式处理程序算法。

2.3.1 键盘扫描

独立键盘很好实现,只需不停的检测即可,出现低电平即出现按键,在经过一定的延时消抖,再确认判断即可。

矩阵键盘扫描程序,首先读出P3的低四位,然后读出P3口的高四位。然后确定键值并显示缓存,最终将按键的值通过一个预先定义好的数组转换为相应的ASCII码值送给LCD显示和与表达式相应的堆栈进行处理,读键程序使用的是反转法读键,不管键盘矩阵的规模大小,均进行两次读键。第一次所有行线均输出高电平,从P3口的值读入键盘信息(行信息);第二次所有列线均输出高电平,从P3口的值读入键盘信息(列信息)。

2.3.2 表达式的处理

表达式包含加、减、乘、除、括号等,必须按照相应的优先级运算,才可能得出正确的结果。在这儿采用栈结构,可以有效的进行表达式的处理。

栈结构具有“后进先出”的固有属性,借助这个属性我们可以随时对刚输入的元素进行操作,从而实现边输入边计算。

为了实现算符优先算法。可以使用两个工作栈。一个称为OPTR,用以寄存运算符,另一个称做OPND,用以寄存操作数或运算结果。

1.首先置操作数栈为空栈,表达式起始符”#”为运算符栈的栈底元素;

2.依次读入表达式,若是操作符即进OPND栈,若是运算符则和OPTR栈的栈顶运算符比较优先权后作相应的操作,直至整个表达式求值完毕(即OPTR栈的栈顶元素和当前读入的字符均为”#”)。

在这里,相应的处理指的是,如果当前符号的优先级比栈顶优先级低,则将该符号继续压入堆栈,不做其它操作;如果当前符号的优先级比栈顶优先级高,则依次取出操作数栈的栈顶两个数据和符号栈的栈顶符号进行这两个数的运算,运算结果数据再压入操作数栈中。若优先级相等,则弹出符号栈栈顶符号。算符间的优先关系如下(‘#‘表示开始和结束):

+

-

*

/

(

)

#

+

>

<

<

<

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/689146.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker命令 docker ps -l (latest)命令在 Docker 中用于列出最近一次创建的容器

文章目录 12345 1 docker ps -l 命令在 Docker 中用于列出最近一次创建的容器。具体来说&#xff1a; docker ps&#xff1a;这个命令用于列出当前正在运行的容器。-l 或 --latest&#xff1a;这个选项告诉 docker ps 命令只显示最近一次创建的容器&#xff0c;不论该容器当前…

【YOLOv10】使用 TensorRT C++ API 调用GPU加速部署 YOLOv10 实现 500FPS 推理速度——快到飞起!

NVIDIA TensorRT ™ 是一款用于高性能深度学习推理的 SDK&#xff0c;包含深度学习推理优化器和运行时&#xff0c;可为推理应用程序提供低延迟和高吞吐量。YOLOv10是清华大学研究人员近期提出的一种实时目标检测方法&#xff0c;通过消除NMS、优化模型架构和引入创新模块等策…

什么是 target 和 currentTarget ?

1、event.target 发生事件的元素或触发事件的元素 <div onclick"clickFunc(event)" style"text-align: center;margin:15px; border:1px solid red;border-radius:3px;"><div style"margin: 25px; border:1px solid royalblue;border-radi…

Java Web学习笔记14——BOM对象

BOM&#xff1a; 概念&#xff1a;浏览器对象模型&#xff08;Browser Object Model&#xff09;&#xff0c;允许JavaScript与浏览器对话&#xff0c;JavaScript将浏览器的各个组成部分封装为对象。 组成&#xff1a; Window&#xff1a;浏览器窗口对象 介绍&#xff1a;浏览…

解决CentOS 7无法识别ntfs的问题

解决CentOS 7无法识别ntfs的问题 方式一&#xff1a; Centos默认不支持ntfs文件格式&#xff0c;直接在Centos7上插U盘或移动硬盘无法识别&#xff0c;安装 ntfs-3g即可&#xff1a; # yum install epel-release -y # yum install ntfs-3g -y[rootbogon ~]# rpm -qa | grep nt…

世净超声波清洗机怎么样?美的、希亦、世净超声波清洗机谁更值得买?

在日常生活和专业领域中&#xff0c;清洁工作往往是既重要又烦琐的任务。特别是对于那些难以手工得尤为重要。关键是现在超声波清洗机已经不是从前的超声波清洗机了&#xff0c;不是只在工业领域上清洗一些重大零件了&#xff0c;已经逐渐开始能够清洗日常物品&#xff0c;像眼…

RFID测温技术在电力行业的革命性应用

随着科技的快速发展, RFID技术在各个领域的应用越来越广泛&#xff0c;而其中的一个重要领域就是电力行业。这一无线测温技术以其非接触、实时、高精度的特点&#xff0c;为电力设备的温度监测带来了革命性的改变。电力行业作为国家基础设施建设的重要支柱&#xff0c;设备的安…

静态IP代理服务对比:哪些提供商值得信赖?静态ip代理哪家好用?

当涉及选择静态IP代理时&#xff0c;许多人可能会感到困惑&#xff0c;因为市场上存在着各种各样的选项。本文旨在为您提供一些关键指导&#xff0c;帮助您确定哪种静态IP代理是最适合您需求的。在这个过程中&#xff0c;我们将介绍一个备受推崇的解决方案——太阳HTTP。 1.高速…

论文阅读 Explainable Image Similarity Integrating Siamese Networks and Grad-CAM

给出论文&#xff08;Explainable Image Similarity Integrating Siamese Networks and Grad-CAM&#xff09;的内容解读、代码运行说明 论文链接&#xff1a;J. Imaging | Free Full-Text | Explainable Image Similarity: Integrating Siamese Networks and Grad-CAM (mdpi.c…

大数据开发统计数据的详细口径是什么

在进行开发数据需求之前&#xff0c;我们先要明确数据统计的详细口径是什么。 需求1&#xff1a;&#xff08;不明确的示例&#xff09; 统计商品的销售数量。 存在的问题&#xff1a; 这个需求表述过于简单&#xff0c;未明确指出统计商品销售数量的时间范围、商品类型等关键…

算法:前缀和题目练习

目录 题目一&#xff1a;一维前缀和[模版] 题目二&#xff1a;二维前缀和[模版] 题目三&#xff1a;寻找数组的中心下标 题目四&#xff1a;除自身以外数组的乘积 题目五&#xff1a;和为K的子数组 题目六&#xff1a;和可被K整除的子数组 题目七&#xff1a;连续数组 题…

LIUNX系统编程:信号(3)

目录 3.信号的处理 3.1信号是什么时候被处理的 read系统调用 3.2信号是怎样被处理的 内核态和用户态 3.3操作系统是如何运行处理信号的呢&#xff1f; 中断技术 什么让操作系统运行起来的 3.4捕捉信号的其他方式 ​编辑 demo代码 3.信号的处理 3.1信号是什么时候被处…

当C++的static遇上了继承

比如我们想要统计下当前类被实例化了多少次&#xff0c;我们通常会这么写 class A { public:A() { Count_; }~A() { Count_--; }int GetCount() { return Count_; }private:static int Count_; };class B { public:B() { Count_; }~B() { Count_--; }int GetCount() { return …

谷歌的AI大变革:商业模式转型

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

数字模拟EDA研发环境搭建

中小企业数字模拟EDA研发环境部署、集群搭建、网络配置、硬件咨询、数据备份、技术指导、环境生命周期维护等&#xff0c;Cadence、Synopsys、Mentor、Keysight、ANSYS&#xff0c;MATLAB、Xilinx等厂商软件工具安装调试。 EDA研发环境搭建经验交流&#xff0c;请加V

数据泄露防护(DLP)系统有哪些?2024年数据泄露防护系统TOP5排名

数据泄露防护&#xff08;DLP&#xff09;系统是企业为确保敏感信息不被非法访问、使用或泄露而采用的重要安全策略。以下是一些常见的数据泄露防护系统&#xff0c;以及它们的功能和优点。 1、安企神 DLP 安企神 DLP是一款为企业研发的数据防泄漏系统&#xff0c;以强大的功能…

超过20W个高质量组件的开源PCB库

项目介绍 Celestial Altium Library是由Altium行业专家Mark Harris创建的一个庞大的免费开源数据库库&#xff0c;专为Altium Designer而设计&#xff0c;库中包含超过20万个优质组件 . 特点 高质量数据&#xff1a;Celestial Altium Library注重数据的质量&#xff0c;用户可…

AIGC之Stable Diffusion Web Ui 初体验

前言 Stable Diffusion辣么火&#xff0c;同学你确定不尝试一下嘛&#xff1f; 纯代码学习版本搞啦&#xff0c;Web Ui 也得试试咧 网上有很多安装Stable Diffusion Web Ui 的介绍了&#xff0c;我在这说一下我的踩坑记录 想安装的同学&#xff0c;看这个链接 万字长文&#x…

采用JWT令牌和Filter进行登录拦截认证

原理描述&#xff1a; 1、第一次登录的时候&#xff0c;生成JWT令牌&#xff0c;并JWT令牌存放在localStorage。 localStorage.setItem(token, token); 2、每次通过axios发送请求的时候&#xff0c;都将这个令牌获取&#xff0c;并放于header中发送。 也就是JWT令牌只在登录…

【Linux】Centos7升级内核的方法:yum更新(ELRepo)

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…