基于AT89C52单片机的计算器设计与仿真

news2024/11/27 4:34:59

点击链接获取Keil源码与Project Backups仿真图:
https://download.csdn.net/download/qq_64505944/88637995?spm=1001.2014.3001.5503
在这里插入图片描述
源码获取
B 源码+仿真图+课程设计+51
在这里插入图片描述

摘 要

计算器一般是指“电子计算器”,能进行数学运算的手持机器,拥有集成电路芯片,结构简单,功能较弱,但由于它使用方便、操作简单、价格低廉,因而广泛运用于商业交易中,也是必备的办公用品。
近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。因此,单片机的应用已经越来越贴近生活,用单片机来实现一些电子设计也变得容易起来。计算器在人们的日常中是比较的常见的电子产品之一。可是它还在发展之中,以后必将出现功能更加强大的计算器,基于这样的理念,本次设计是用单片机来设计的计算器。该设计系统是以 AT89S52 为单片机, P1 口作为输入端,外接 4X4 的键盘。通过键盘扫描来对输入数的控制,在 P0 口、P2 口接了驱动电路,用来保证 LCD 的工作正常。计算器将完成的功能有加,减,乘,除等功能。

关键词:计算器;单片机;LCD;矩阵键盘

ABSTRACT

Calculator generally refers to the electronic calculator, and the term is introduced to China by the Japanese. The calculator with the IC chip, simple structure, and weak function is able to perform mathematical operations on handheld machine. But it is easy using, simple operation and low price. So it is widely used in commercial transactions, and is also an essential office supplies.
With the rapid development of science and technology in recent years, the application of SCM is the deepening and promote the traditional controlling detection technologies that are increasingly updated. In real-time detection and automatic control of microcomputer application system, the microcontroller is often used as a core component to use, but only the knowledge of the microcontroller is not enough, and should be based on the specific hardware architecture, hardware and software combination to make it perfect. So the application of SCM is more and more close to life, so using of single chip to achieve some electronic designs also become easy. In the people daily life the calculator is one of the common electronic products. But it is still in development, it will become more powerful calculator in the future. According to such idea, the design is that SCM design calculator. The design system is based on AT89S52 microcontroller, P0 port as input, external 4X4 keyboard. In P1, P2mouth is connected with the drive circuit to ensure the normal work of LED. The calculator will complete add, subtract, multiply, divide and other function.

Keywords: calculator, MCU, LCD, Matrix keyboard

前 言

计算器(calculator;counter)一般是指“电子计算器”,能进行数学运算的手持机器,拥有集成电路芯片,结构简单,功能较弱,但由于它使用方便、操作简单、价格低廉,因而广泛运用于商业交易中,也是必备的办公用品之一。计算器一般由运算器、控制器、存储器、键盘、显示器、电源和一些可选外围设备及电子配件通过人工或机器设备组成。随着科学技术的不断发展及计算器应用的普及,人们发现在工业控制中,有很多时候需要在恶劣的环境中进行各种数据的采集、运算和控制。本设计是由单片机实现的模拟计算器,它不仅能实现数据的加减乘除运算,而且还能使数据及其计算结果在数码管上显示出来,能够实现0-256的数字四则运算。本设计是用单片机AT89S52来控制,采用LCD1602液晶显示读取数据,软件部分是由C语言来编写的。利用键盘和LCD1602设计一个简单的数学计算器,可以完成简单的如加,减,乘,除的四则运算,并将运算结果在LCD1602上显示出来。

目 录

第一章 绪论 1
1.1研究背景 1
1.1.1单片机发展现状 1
1.1.2计算器系统现状 2
1.1.3选题意义及现状 2
第二章 总体方案及设计 3
2.1设计目的 3
2.2设计任务 3
2.3设计思路 3
2.3.1方案构思 3
2.3.2 方案比较与选择 4
2.3.3系统总体模块图 4
第三章 系统硬件设计 5
3.1 主控模块设计 5
3.2键盘输入模块设计 11
3.3 LCD显示模块设计 12
3.3.1 LCD1602主要技术参数 13
3.3.2引脚功能说明 13
3.4清零、音乐开关、开方和多次方运算功能模块设计 14
3.5电源模块设计 15
3.6 运算模块(单片机控制) 16
第四章 软件设计 17
4.1显示程序设计 17
4.2键扫程序设计 17
4.3清零程序设计 19
4.4声音开关程序设计 20
4.5总体设计 21
第五章 系统仿真 23
5.1 Proteus仿真 23
第六章 系统调试 27
6.1问题与分析 27
6.1.1硬件常见故障 27
6.1.2软件调试 27
第七章 总结与展望 30
7.1总结 30
7.2展望 30
致谢…35
参考文献 32
附录 33
程序清单 33
中英文文献对照翻译 54

第1章绪论

1.1研究背景

1.1.1单片机发展现状
单片机进一步改变CPU的性能,加快指令运算的速度和提高系统控制的可靠性。采用精简指令集(RISC)结构和流水线技术,可以大幅度提高运行速度。现指令速度最高者已达100MIPS(Million Instruction Per Seconds,即兆指令每秒),单片机的发展现状:使用寿命长;低电压与低功耗化;发展速度越来越快;从 8 位、16 位到 32 位,数不胜数,应有尽有,部分与主流C51系列兼容,部分与之不兼容,它们各具特色,互补互成。纵观单片机的发展历史,其有如下发展趋势:
1、大容量、高性能
以往单片机内的ROM为1KB~4KB,RAM 为64~128B。但在需要复杂控制的场合,该存储容量是不够的,必须进行外接扩充。为了适应这种领域的要求,须运用新的工艺,使片内存储器大容量化。目前,单片机内ROM 最大可达64KB,RAM 最大为2KB。另外并加强了位处理、中断和定时控制功能。这类单片机的运算速度比标准的单片机高出10 倍以上。由于这类单片机有极高的指令速度,可以使用软件模拟其I/O 功能,由此引入了虚拟外设的新概念。
2、串行扩展技术
在很长一段时间里,通用型单片机通过三总线结构扩展外围器件成为单片机应用的主流结构。随着低价位OTP(One Time Programble)及各种特殊类型片内程序存储器的发展,加之处围接口不断进入片内,推动了单片机“单片”应用结构的发展。特别是I2C、SPI 等串行总线的引入,可以使单片机的引脚设计得更少,单片机系统结构更加简化及规范化。

3、低功耗CMOS化
MCS-51系列的8031推出时的功耗达630mW,而现在的单片机普遍都在100mW左右,随着对单片机功耗要求越来越低,现在的各个单片机制造商基本都采用了CMOS(互补金属氧化物半导体工艺)。80C51就采用了HMOS(即高密度金属氧化物半导体工艺)和CHMOS(互补高密度金属氧化物半导体工艺)。CMOS虽然功耗较低,但由于其物理特征决定其工作速度不够高,而CHMOS则具备了高速和低功耗的特点,这些特征,更适合于在要求低功耗,电池供电的应用场合。所以这种工艺将是今后一段时期单片机发展的主要途径。
4、微型单片化
现在常规的单片机普遍都是将中央处理器(CPU)、随机存取数据存储(RAM)等集成在一块单一的芯片上,增强型的单片机集成了如A/D转换器、PMW(脉宽调制电路)等都集成在单一的芯片上,这样单片机包含的单元电路就更多,功能就越强大。甚至单片机厂商还可以根据用户的要求量身定做,制造出具有自己特色的单片机芯片。 此外,现在的产品普遍要求体积小、重量轻,这就要求单片机除了功能强和功耗低外,还要求其体积要小。现在的许多单片机都具有多种封装形式,其中SMD(表面封装)越来越受欢迎,使得由单片机构成的系统正朝微型化方向发展。
1.1.2计算器系统现状
计算器一般由存储器、键盘和机器设备等组成。键盘是计算器的输入部件,一般采用接触式或传感式。为减小计算器的尺寸,一键常常有多种功能。显示器是计算器的输出部件,有发光二极管显示器或液晶显示器等。除显示计算结果外,还常有溢出指示、错误指示等。计算器电源采用交流转换器或电池,电池可用交流转换器或太阳能转换器再充电。为节省电能,计算器都采用CMOS工艺制作的大规模集成电路,并在内部装有定时不操作自动断电电路。
1.1.3选题意义及现状
计算器(calculator;counter)一般是指“电子计算器”,该名词由日文传入中国。计算器是能进行数学运算的手持机器,拥有集成电路芯片,结构简单,功能较弱,但由于它使用方便、操作简单、价格低廉,因而广泛运用于商业交易中,也是必备的办公用品之一。随着科学技术的不断发展及计算器应用的普及,人们发现在工业控制中,有很多时候需要在恶劣的环境中进行各种数据的采集、运算和控制。

第二章 总体方案及设计

2.1设计目的

通过本次毕业设计,应用《单片机应用基础》《计算机应用基础》等所学相关知识及查阅资料,完成简易计算器的设计,以达到理论与实践更好的结合、进一步综合运用所学知识设计的能力的目的。
通过本次设计的训练,可以使我在基本思路和基本方法上对基于MCS-51单片机的嵌入式系统设计有一个比较感性的认识,并具备一定程度的设计能力。

2.2设计任务

1.了解单片机的基本原理。
2.学习电子计算机制作基本原理及方法。
3.熟练掌握PROTUES软件。
4.会用KEIL编程,具有一定的编程能力。
5.设计制作电子计算器硬件及软件系统。
6.撰写毕业论文。

2.3设计思路

2.3.1方案构思
本设计可以采用两种方案,一种是以FPGA为核心处理芯片,配备相应的外设;另外一种是以AT89S52处理器,配备相应的外设。
1、方案一:采用FPGA控制
FPGA是一种高密度的可编程逻辑器件,自从Xilinx公司1985年推出第一片FPGA以来,FPGA的集成密度和性能提高很快,其集成密度最高达500万门/片以上,系统性能可达200MHz。由于FPGA器件集成度高,方便易用,开发和上市周期短,在数字设计和电子生产中得到迅速普及和应用,并一度在高密度的可编程逻辑器件领域中独占鳌头。
但是而基于 SRAM编程的FPGA,其编程信息需存放在外部存储器上 ,需外部存储器芯片 ,且使用方法复杂 ,保密性差,而其对于一个简单的计算器而言,实用FPGA有点大材小用,成本太高。
2、方案二:采用AT89S52
单片机是单片微型机的简称,故又称为微控制器MCU(Micro Control Unit)。通常由单块集成电路芯片组成,内部包含有计算机的基本功能部件:中央处理器CPU,存储器和I/O接口电路等。因此,单片机只要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。单片机广泛用于智能产品,智能仪表,测控技术,智能接口等,具有操作简单,实用方便,价格便宜等优点,而其中AT89S52以MCS-51为内核,是单片机中最典型的代表,应用于各种控制领域。
2.3.2方案比较与选择
通过以上两种方案论证和比较,从设计的实用性,方便性和成本出发,选择了以AT89S52单片机作为中央处理单元进行计算器的设计,这样设计能够实现对六位浮点数的加减和三位浮点数的乘除运算。系统采用以下方案:
(1)采用AT89S52作为主控芯片;
(2)显示模块使用LCD1602液晶显示屏;
(3)输入模块使用4*4矩阵键盘;
(4)AC清零按键使用独立按键并接入单片机外部中断引脚;
(5)声音提示开关按键使用独立按键并接入单片机外部中断引脚;
(6)平方和开方按键由开发板上的独立按键实现;
(7)电源采用LM7805稳压电路。
2.3.3系统总体模块图

图2-1总体模块图
整个系统由电源给51单片机和LCD液晶显示提供电源使其工作,当外接按键输入有效数值和运算模式时,通过主控芯片实现整个系统的功能。

第三章 系统硬件设计
3.1 主控模块设计
1、主要性能:
(1) • 8031 CPU与MCS-51 兼容
  • 8K字节可编程FLASH存储器(寿命:1000写/擦循环)
  • 全静态工作:0Hz-33MHz
  • 三级加密程序存储器
  • 128*8位内部RAM
  • 32条可编程I/O线
  • 三个16位定时器/计数器
  • 八个中断源
  • 全双工UART串行通道
• 低功耗的闲置和掉电模式
• 掉电后中断可唤醒
• 看门狗定时器
• 双数据指针
• 掉电标识符
• 片内振荡器和时钟电路
(2) 管脚说明:
   VCC:供电电压。
GND:接地。
2、AT89S52的功能特性描述
AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非 易失性存储器技术制造,与工业80C51 产品指令和引脚完 全兼容。片上Flash允许程序存储器在系统可编程,亦适于 常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统 可编程Flash,使得AT89S52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。
AT89S52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路。
此外, AT89S52 可降至0Hz 静态逻 辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。8 位微控制器 8K 字节在系统可编程 Flash。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。
3、AT89S52引脚功能
AT89S52 单片机为40 引脚芯片见图3-1。

图3-1 AT89S52引脚
(1)口线:P0、P1、P2、P3 共四个八位口。
P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
  当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0不具有内部上拉电阻。
在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。

P1口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
  此外,P1.0和P1.1分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。
  在flash编程和校验时,P1口接收低8位地址字节。
  引脚号第二功能:
  P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出
  P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)
  P1.5 MOSI(在系统编程用)
  P1.6 MISO(在系统编程用)
  P1.7 SCK(在系统编程用)

P2口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @DPTR) 时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。
在使用8位地址(如MOVX @RI)访问外部数据存储器时,P2口输出P2锁存器的内容。
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。

P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p3 输出缓冲器能驱动4 个TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
P3口亦作为AT89S52特殊功能(第二功能)使用,如表3-1所示。
表3-1 P3口管脚 备选功能:
端口引脚 第二功能
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 /INT0(外部中断0)
P3.3 /INT1(外部中断1)
P3.4 T0(记时器0外部输入)
P3.5 T1(记时器1外部输入)
P3.6 /WR(外部数据存储器写选通)
P3.7 /RD(外部数据存储器读选通)
  
(2)其他引脚说明:
RST:复位输入。晶振工作时,RST脚持续2 个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出96 个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。

ALE/PROG——当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。
  对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。

PSEN——程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。
 EA/VPP——外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。
  如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。
  FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。
  XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz-24MHz内选择,在本设计电路中选用了12MHz。电容取20PF左右。机器周期=12×时间周期,如12MHz的机器周期为1微秒。
(3)控制或复位引脚
RESET 此脚为高电平时(约2个机器周期)可将单片机复位。
RST/VPD——当出现两个机器周期高电平时,单片机复位。复位后,P0~P3输出高电平;SP寄存器为07H;其它寄存器全部清0;不影响RAM状态。如图3-2所示。

图3-2 按键电平复位

AT89SXX系列单片机实现了ISP下载功能,故而取代了89CXX系列的下载方式,也是因为这样,ATMEL公司已经停止生产89CXX系列的单片机,现在市面上的AT89CXX多是停产前的库存产品。
4、AT89S52的编程方法
编程前,须按编程模式表设置好地址、数据及控制信号;顺序如下:
① 在地址线上加上要编程单元的地址信号。
② 在数据线上加上要写入的数据字节。
③ 激活相应的控制信号。
④ 将EA/Vpp端加上+12V编程电压。
⑤ 每对Flash存储阵列写入一个字节或每写入一个程序机密位,加上一个ALE/PROG编程脉冲。每个字节写入周期是自身定时的,大多数约为50us。改变编程单元的地址和写入的数据,重复①—⑤步骤,直到全部文件编程结束。
单片机的现状及发展方向:
单片机是为了工业控制需要满足而诞生的,是自动控制系统的核心部件,因而也主要用于工业控制、智能化仪器仪表、家用电器中。它具有体积小,功能多、价格低、使用方便、系统设计灵活等优点,应用领域不断扩大,除了工业控制,智能化仪表,通讯,家用电器外,在智能化高档电子玩具产品中也大量采用单片机芯片作为核心控制部件。
由于单片机主要面向工业控制,工作环境比较恶劣,入高温,强电磁干扰,甚至含有腐蚀性气体,在太空中工作的单片机控制系统,还必须具有抗辐射能力,这决定了单片机CPU于通用微机CPU具有不同的技术特征和发展方向:
(1) 可靠性高;
(2) 控制功能往往很强,数值计算交叉;
(3) 指令系统比通用微处理器慢的多;
(4) X系列芯片取代;
(5) 抗干扰性强,工作温度范围宽。
单片机的最小系统设计如图3-3所示:
在这里插入图片描述

图3-3 单片机最小系统

3.2键盘输入模块设计

计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。计算器将通过按键输入数字和运算符利用单片机不断扫描键盘。矩阵键盘采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。P1口:作为输入口,与键盘连接,实现数据的输入.
矩阵键盘的设计如图3-4所示:
在这里插入图片描述

3.3 LCD显示模块设计

LCD1602,工业字符型液晶,能够同时显示16x02即32个字符(16列2行),故简称1602。1602LCD 液晶具有功耗低、显示内容丰富、清晰,显示信息量大,显示速度较快,界面友好等而得到广泛应用,因此使用1602液晶显示屏,可以方便的显示多种字符,特别适用于单片机计算器的双行显示。通过D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应的数据。P0口作为液晶显示的数据端口,与D0-D7连接。P2.1-P2.3口作为其控制端口,控制LCD液晶显示屏显示输出数据,与RS,RW,E,连接 。

液晶显示模块的设计如图3-5所示:
在这里插入图片描述

图3-5 液晶显示模块
3.3.1 LCD1602主要技术参数
显示容量:16×2个字符
芯片工作电压:4.5—5.5V
工作电流:2.0mA(5.0V)
模块最佳工作电压:5.0V
字符尺寸:2.95×4.35(W×H)mm
3.3.2引脚功能说明
LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表3-3所示。

表3-3引脚接口说明表
编号 符号 引脚说明 编号 符号 引脚说明
1 GND 电源地 9 D2 数据
2 VCC 电源正极 10 D3 数据
3 V0 液晶显示偏压 11 D4 数据
4 RS 数据/命令选择 12 D5 数据
5 R/W 读/写选择 13 D6 数据
6 E 使能信号 14 D7 数据
7 D0 数据 15 BLA 背光源正极
8 D1 数据 16 BLK 背光源负极
第1脚:GND为地电源。
第2脚:VCC接5V正电源。
第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:RS为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器。
第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。
第15脚:背光源正极。
第16脚:背光源负极。

3.4清零、音乐开关、开方和多次方运算功能模块设计

本设计要求在任何时候按下AC清零键,都必须退出当前操作,数据清零,准备下一次的运算,故应采用独立键盘产生下降沿输入给单片机外部中断处理。
对于声音开关按键,由于要求随时关闭或打开声音提示,本设计也采用独立按键产生下降沿输入给单片机的外部中断处理。
而开方或多次方运算,则可与矩阵键盘一起检测,也当做一个运算符处理。具体功能按键设计如图3-6所示:

在这里插入图片描述

                       图3-6功能按键设

图中,AC为清零按键、KeyBeep为声音开关按键、KeySqrt为开方按键、KeyPow为多次方按键。

3.5电源模块设计

由于AT89S52和LCD1602都是采用5V供电,而且其他模块功能也采用5V电平,本系统采用LM7805作为稳压芯片,经过初级和次级的电容滤波,最终得到稳定的5V电压供给系统使用。

     图3-7电源

3.6 运算模块(单片机控制)

AT89S52单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O 口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是一些特殊的功能,通过使用单片机编写的程序可以实现高智能、高效率以及高可靠性!因此我们采用单片机作为计算器的主要功能部件,可以很快地实现运算功能。单片机通过按键来实现输入数据和操作方式的控制,在运算过程中,先确定选用的是哪一个运算符,若是+或*,则要判断结果是否会溢出,溢出则显示错误提示,没有益处显示运算结果。若是/,判断除数是否为零,为零时显示错误提示,不是零显示运算结果。

第四章 软件设计

4.1显示程序设计

LCD1602在上电以后,应该先等待50毫秒左右,让其内部芯片初始化后再对其进行操作。在对其操作时,应参考其时序图,先把命令写入其内部寄存器设置它的工作方式和状态。要显示数据的时候,先设置好显示坐标,再往里面写入要显示的ASCII码,LCD则通过刷新和替换来显示新的数据。其程序流程图如图4-1所示:

                     图4-1显示程序流程图

其程序位于后面附录

4.2键扫程序设计

由于矩阵键盘采用4行4列的结构,每一行每一列各对应一个I/O口,故程序应该逐行查询,一旦查询到有某一行的按键被按下了,则根据读取到的I/O总线口的数据即可查询到是哪一列的按键被按下了,最后对应行列返回一个按键值回主函数。

其程序流程图如图4-2所示:

                        否

                                    否

                                                   否

                                                                  否









图4-2 矩阵键盘程序流程图

其程序位于后面附录

4.3清零程序设计

根据系统要求以及硬件结构,AC按键直接接入单片机外部中段0,则程序应使用中断来清除各数据存储变量达到清零的目的,并把清零标志位至1,在主程序中不断查询标志位,若为1,则清零后。其程序框图如图4-3所示:

                 图4-3清零程序流程图

其程序如下:

/***清零中断程序******/
void EX0_int() interrupt 0
{
	if(beepflag==1)	//若开声音则每一次按键均鸣叫
	{
		beep=0;
		delayms(100);
		beep=1;
	}
	lcdwrite_com(0x01); //显示清屏
	lcd_setxy(0,0);
	lcdwrite_data('0');
	lcd_setxy(0,0);
	num='N';			  //数字初始化
	keynum1=0,keynum2=0,sign=0;
    ans1=0,ans2=0,ans=0,point=0;
	conflag=0,newcalc=0;
	ac=1;
}

4.4声音开关程序设计

根据要求,声音开关使用外部中断1来处理,当按下声音开关时,触发单片机进入外部中断1,在中断程序里,通过对声音开关标志位取反,在按键扫描过程中,加入对声音标志位的判断,若为1,则发出声音,即可实现声音提示功能。其程序框图如图4-4:

                                       否






                       图4-4声音开关程序流程图

其程序如下:


```c
/***声音中断程序******/
void EX1_int() interrupt 2
{
	beepflag=~beepflag;
	if(beepflag==1)  //若开声音则每一次按键均鸣叫
		{
		beep=0;
		delayms(100);
		beep=1;
	}
}

4.5总体设计

整体程序包括:电子计算器.C、lcd1602.C和lcd1602_8.h
本系统采用大小循环嵌套方式的软件设计思想,大循环则一直在运行,使计算器一直处于工作状态,并不断扫描按键,小循环用于识别数字是否输入完,一旦检测到输入的是运算符,则转换输入数值并储存起来,最后按下等于号以后则根据运算符计算两个数值的大小,并通过LCD显示。
软件系统总框图如图4-5所示:

图4-5 软件系统总框图

其程序位于后面附录

第五章 系统仿真

5.1 Proteus仿真

系统仿真图见图5-1所示:
在这里插入图片描述

                         图5-1系统仿真图

在这里插入图片描述

                         图5-2加法运算

在这里插入图片描述

                         图5-3减法运算

在这里插入图片描述

                         图5-4乘法运算

在这里插入图片描述

                         图5-5除法运算

在这里插入图片描述

                       图5-6开根号运算

第六章 系统调试

6.1问题与分析
6.1.1硬件常见故障
1、逻辑错误:它是由设计错误或加工过程中的工艺性错误所造成的。这类错误包括错线、开路、短路等。
2、元器件失效:有两方面的原因:一是器件本身已损坏或性能不符合要求;二是组装错误造成元件失效,如电解电容、集成电路安装方向错误等。
3、可靠性差:因其可靠性差的原因很多,如金属化孔、接插件接触不良会造成系统时好时坏,经不起振动;走线和布局不合理也会引起系统可靠性差。
4、电源故障:若样机由电源故障,则加电后很容易造成器件损坏。电源故障包括电压值不符合设计要求,电源引线和插座不对,功率不足,负载能力差等。
6.1.2软件调试
软件调试一般分为以下四个阶段:
1、编写程序并查错;
2、在 C 语言的编译系统中编译源程序
3、对程序进行编译连接,并及时发现程序中存在的错误;
4、改正错误。
在本次调试中出现的问题有:
1、在程序中有的函数名未定义;
2、在抄录程序时,少录入一些字符,如: ”“{”“-”“;、 、等符号,而出现错误;
3、有一些函数名录入时少写一个字母或顺序颠倒;
4、没有注意函数名的调用及定义;
5、芯片引脚定义出错而导致没有实验现象。
各项功能测试:
表6-1功能测试
加法测试 减法测试

                         表6-2功能测试

乘法测试 除法测试

                          表6-3功能测试

开方测试 多次方运算测试

                          表6-4功能测试

错误提示测试1 错误提示测试2

由以上测试结果可知,计算器的各项功能正常,基本能达到设计要求。下面将进行多次测试,以检验计算器的性能指标。
本次对计算器的功能进行多次测量,其测试结果如下表:
表6-5功能多次测量
次数 第一运算数 运算符号 第二运算数 运算结果 实际结果
1 524 + 5624.563 6148.5629882 6148.563
2 55914 - 264.51 55649.4882811 55649.49
3 562 * 2 1124 1124
4 67 / 7.5 8.933334 8.93333333
5 8 (无输入) 2.828427 2.28427125
6 9 ^ 2 81 81
7 (无输入) + 19 100 100
8 (无输入) (无输入) 10 10
9 42 / 0 math error 错误
10 -64 (无输入) math error 错误

结果分析:对比运算结果和实际结果可知,进行一般的整形运算计算器能准确无误计算出来,但是当进行浮点运算时候,会产生精度丢失或者是有尾数产生,这是因为单片机对的浮点运算功能差,而且在keil开发环境中,float型和double型浮点数的精度都是一样的,其小数点的有效数字位数都是6~7位,这就决定了本设计的计算器的浮点数精度有限,只能通过小数点补偿来减少浮点数运算误差。另外,由连续运算、新一轮运算测试、错误提示测试的结果以及运算过程中的AC清零、声音开关设置可见,本设计的计算器的功能基本能实现。但是,由实际操作可发现本设计存在以下不足:
(1)某些按键不够灵敏,导致需要按很多次才能输入;
(2)当运算式子超过屏幕范围时,不能通过移动屏幕来完全显示式子;
(3)当连续出现错误操作时,如连续输入减号,程序不能自动复位,会产生连续错误;
(4)没有删除输入功能,当输入出错时,只能通过清零后重新输入;
(5)没有数据溢出提示功能。

第七章 总结与展望

7.1总结
经过多次测量与调试,本计算器基本能实现设计要求中的功能。在设计的过程中,也遇到了不少的困难,例如在LCD上显示任意位整数,显示任意位小数,在输入小数的时候小数点的处理问题,连续运算的结果保存与清空问题等等。最后通过不断的查阅资料,请教别人,修改程序,下载调试等过程,终于把遇到的问题逐一解决了。虽然某些问题解决得不够完美,但是都是经过自己的思考和努力解决的,在此过程自己也学到了很多东西,例如学会了矩阵键盘的扫描技术、LCD接口技术、LCD的显示技术、中断技术等等,这些技术对熟练单片机的使用以及单片机项目开发是非常有帮助的。在设计的过程中的思考解决问题的思路和方法对以后的工作和生活都是非常有帮助的。
7.2展望
单片机程序运行可靠,并且可以修改,通过不同的程序实现不同的功能,尤其是一些独特的功能。通过使用单片机编写的程序实现高智能、高效率和更高的可靠性。
本设计是由单片机实现的模拟计算器,它不仅能实现数据的加减乘除运算,而且还能使数据及其计算结果在数码管上显示出来,能够实现0-256的数字四则运算。本设计是用单片机AT89C51来控制,采用LCD1602液晶显示读取数据,软件部分是由C语言来编写的。利用键盘和LCD1602设计一个简单的数学计算器,可以完成简单的如加,减,乘,除的四则运算,并将运算结果在LCD1602上显示出来。

致 谢

本课题是在武传艳导师的直接关怀和耐心指导下完成的。在整个设计期间,武老师严谨的治学态度、一丝不苟的工作作风、无私的奉献品德、高度的责任感和实干的精神对我影响至深,使我受益终生,在此向武老师表示崇高的敬意和衷心的感谢。
在论文完成之时,再次感谢导师在诸多学术上的指导和生活上的关怀,我会终生铭记导师的教诲,学习恩师的品格,在今后的人生道路上再接再厉,无愧于恩师的栽培,还要向在实验和论文完成过程中给予我帮助的同学们表示衷心的感谢!
最后,向帮助过我的各位老师和同学表示深深的谢意!

参考文献

[1]马忠梅等编著.单片机的C语言应用程序设计,北京:北京航空航天大学出版社,2007
[2]李云刚等编著.单片机原理与应用系统设计,北京:中国水利水电出社,2008
[3]张军编著.AVR单片机应用系统开发典型实例,西安:中国电力出版社,2005
[4]李建忠编著.单片机原理及应用,西安:西安电子科技大学出版社,2011
[5] 吴宁.80X86/Pentium 微型计算机原理及应用[M], 北京:电子社,2004
[6] 蔡美琴.MCS-51系列单片机系统及其应用[M],北京:高等教社,2003
[7] 肖金球.单片机原理与接口技术[M],北京: 清华大学出版社2004
[8] 郭天祥.新概念51单片机C语言教程:入门、提高、开发、拓展全攻 略,北京:电子工业出版社,2009
[9] 谭浩强.从语言程序设计,第三版,北京:清华大学出版社,2005
[10]徐爱钧.智能化测量控制仪表原理与设计,第二版,北京:北京航天航空大学出版社,2004.9
[11]孙育才等.MCS-51 系列单片微型计算机及其应用,第四版:东南大学出版社,2004.3
[12]李萍等.智能仪器实验指导书,大连:大连交通大学,2007.9
[13]单片机应用技术(C 语言):中国劳动社会保障出版社,2006.6
[14]朱定华著.单片机原理与接口技术:电子工业出版社,2001.4
[15]王宜怀.刘晓升等著,嵌入式应用技术基础教程,北京:清华大学出版社,2005.7
[16]王威著.HCS12 微控制器原理及应用,北京:北京航空航天大学出版社,2007.10
[17]周立功.单片机实验与实践,北京:北京航空航天大学出版社,2004.3.26
[18]孙育才等.MCS-51系列单片微型计算机及其应用,第四版:东南大学出版社.2004.3

附录
程序清单
1、电子计算器.C

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Qt图书管理系统】4.系统设计与详细设计

文章目录 核心流程图软件架构设计流程图软件开发类图及功能点 核心流程图 用户登录图书查询图书借阅图书归还账户管理 软件架构设计 流程图 软件开发类图及功能点 Dlg_Login 登录界面 Cell_Main 主窗体 Cell_MyBook 我的书籍 Cell_BookMgr 书籍管理 Cell_RecoredMgr 借阅记录…

ASP.NET MVC实战之权限拦截Authorize使用

1&#xff0c;具体的实现方法代码如下 public class CustomAuthorizeAttribute : FilterAttribute, IAuthorizationFilter{/// <summary>/// 如果需要验证权限的时候&#xff0c;就执行进来/// </summary>/// <param name"filterContext"></par…

C# WPF上位机开发(知识产权ip保护)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 上位机软件如果是和硬件模块搭配开发&#xff0c;这个时候大部分上位机基本上都是白送的&#xff0c;不会收取相关的费用。但是&#xff0c;如果上…

气候灾害组织:全球红外降水站数据

气候灾害组织红外降水站数据-Prelim (CHIRPS-Prelim) 气候灾害中心红外降水站数据 Prelim (CHIRPS-Prelim) 融合了 CHIRPS 数据与原位降水数据&#xff0c;以消除数据偏差并提高其准确性。生成 CHIRPS-Prelim 的过程与 CHIRPS 过程类似&#xff0c;主要区别在于它仅依赖于近实…

【Unity自动寻路】使用Navigation系统实现物体自动寻路绕开障碍物

知识点流程图 自动导航Navigation系统 我们在游戏场景中经常会有一些障碍物、墙壁、树木等等&#xff0c;如果我想要让角色或者怪物去墙的另一边&#xff0c;我直接在墙另一边点击左键&#xff0c;我希望角色自动跑过去&#xff0c;但是他不能直接穿透墙&#xff0c;他需要“智…

【具身智能评估3】具身视觉语言规划(EVLP)度量标准汇总

参考论文&#xff1a;Core Challenges in Embodied Vision-Language Planning 论文作者&#xff1a;Jonathan Francis, Nariaki Kitamura, Felix Labelle, Xiaopeng Lu, Ingrid Navarro, Jean Oh 论文原文&#xff1a;https://arxiv.org/abs/2106.13948 论文出处&#xff1a;Jo…

华媒舍:怎样利用旅游业发展媒体套餐宣传推广分析7个经典案例

1.分析经典案例在旅游业发展中&#xff0c;依靠媒体套餐开展宣传推广成为了一种常见的方法。下面将详细介绍7个经典案例&#xff0c;从这当中我们可以得出一些宝贵经验。 案例一&#xff1a;目标市场定位成功宣传推广一定要明确市场定位&#xff0c;针对不同的受众群体制定合理…

力扣刷题-二叉树-找树左下角的值

513 找树左下角的值 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1&#xff1a; 示例 2&#xff1a; 思路 层序遍历 直接层序遍历&#xff0c;因为题目说了是最底层&#xff0c;最左边的值&a…

MATLAB图像处理技巧

MATLAB图片处理------动态绘图 1. 动态绘图2. XXXXX 1. 动态绘图 主要用到四个函数&#xff0c;分别为getframe、frame2im、rgb2ind以及imwrite&#xff1a; 1.getframe&#xff1a;获取当前绘图窗口的图片作为影片帧&#xff1b; 2.frame2im&#xff1a;从单个影片帧 F 返回索…

【JavaEE】多线程(5) -- 阻塞队列

目录 1.阻塞队列是什么? 2.生产者消费者模型 3.标准库中的阻塞队列 4.阻塞队列的实现 1.阻塞队列是什么? 阻塞队列是⼀种特殊的队列. 也遵守 "先进先出" 的原则 阻塞队列能是⼀种线程安全的数据结构, 并且具有以下特性: 当队列满的时候, 继续⼊队列就会阻塞, …

MATLAB break语句||MATLAB continue语句

MATLAB break语句 MATLAB中 break 语句用于终止 for 或 while 循环的执行&#xff0c;当在循环体内执行到该语句的时候&#xff0c;程序将会跳出循环&#xff0c;继续执行循环语句的下一语句。 注意&#xff1a;在嵌套循环中&#xff0c;break 退出只能在循环发生&#xff0c;后…

Mybatis 动态SQL插入操作②

结合上个博客一起看哦 上篇博客我们说.用户在表中插入数据的时候,有的数据可能不想插入,我们就需要设置,当用户插入这个字段的数据的时候就显示,不插入的话就为null,比如性别不想插入,那么 XML 代码如下 <?xml version"1.0" encoding"UTF-8"?> &…

mysql复习笔记04(小滴课堂)

mysql的存储引擎介绍 基于表的。 查看数据库支持的引擎&#xff1a; 查看支持的版本&#xff1a; 查看表的引擎&#xff1a; 查看所有表的存储引擎&#xff1a; 也可以修改默认引擎。 这有一张数据量庞大的表。 表是通过执行shell脚本快速创建的. 创建的表. 执行成功后会有个s…

Redis设计与实现之事务

一、事务 Redis 通过 MULTI 、DISCARD 、EXEC 和 WATCH 四个命令来实现事务功能&#xff0c;本章首先讨 论使用 MULTI 、DISCARD 和 EXEC 三个命令实现的一般事务&#xff0c;然后再来讨论带有 WATCH 的事务的实现。 因为事务的安全性也非常重要&#xff0c;所以本章最后通过…

华为组播配置案例

igmp-snooping主要用于生成二层组播表项&#xff0c;防止交换机全部接口都发组播报文 PC端配置&#xff1a; 组播源配置&#xff1a; R1 interface GigabitEthernet0/0/0 ip address 10.0.0.1 255.255.255.0 pim dm interface GigabitEthernet0/0/1 ip address 192.168.0…

面向未来的数据安全策略

人工智能&#xff08;AI&#xff09;已经成为一项突破性技术&#xff0c;可以彻底改变各个领域&#xff0c;并引发就业市场的强烈焦虑。毫不奇怪&#xff0c;它对技术和运营的变革性影响为提高效率、准确性和决策提供了巨大的可能性。 它还为黑客提供了巨大的机会。网络犯罪分…

C++学习笔记(十二)------is_a关系(继承关系)

你好&#xff0c;这里是争做图书馆扫地僧的小白。 个人主页&#xff1a;争做图书馆扫地僧的小白_-CSDN博客 目标&#xff1a;希望通过学习技术&#xff0c;期待着改变世界。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 文章目录 前言 一、继承关系…

带PWM 调光的线性降压 LED 恒流驱动器

一、基本概述 TX6410B是一种带 PWM 调光功能的线性降压 LED 恒流驱动器&#xff0c;仅需外接一个电阻就可以构成一个完整的 LED 恒流驱动电路&#xff0c;调节该外接电阻可调节输出电流&#xff0c;输出电流范围为 10~2000mA。TX6410B内置 30V 50 毫欧 MOS。TX6410B内置过热保…

【微服务】Spring Aop原理深入解析

目录 一、前言 二、aop概述 2.1 什么是AOP 2.2 AOP中的一些概念 2.2.1 aop通知类型 2.3 AOP实现原理 2.3.1 aop中的代理实现 2.4 静态代理与动态代理 2.4.1 静态代理实现 三、 jdk动态代理与cglib代理 3.1 jdk动态代理 3.1.1 jdk代理示例 3.1.2 jdk动态代理模拟实现…

医疗智能化革命:AI技术引领医疗领域的创新进程

一、“AI”医疗的崛起 随着人工智能&#xff08;AI&#xff09;技术的崛起&#xff0c;"AI"医疗正在以惊人的速度改变着医疗行业的面貌。AI作为一种强大的工具&#xff0c;正在为医疗领域带来前所未有的创新和突破。它不仅在医学影像诊断、病理学分析和基因组学研究等…