1.1 系统开发背景
随着社会的发展,科学的进步,人们的生活水平逐渐提高,尤其是微电子技术的发展,更是如雨后春笋般日新月异。 难怪电子产品更新换代如此之快。 计算器是人们日常生活中最常见的电子产品之一。 如何让计算器技术更加成熟,充分利用现有软硬件条件,设计出更好的计算器,更好地服务于各行业,已经成为当今电子领域的重要研究课题。
1.2 系统开发的意义
如今,人们的日常生活已经离不开计算器。 它们遍布于社会的各个角落,比如商店、办公室、学校……因此,设计一款简单实用的计算器将具有很大的现实意义。
1.3 设计目的
本设计旨在进一步掌握单片机的理论知识,了解嵌入式单片机系统的软硬件设计,加强设计实际应用系统的能力。 通过本项目的学习,我掌握了单片机编程和微机接口应用的基本方法,能够综合运用本科阶段所学的软硬件知识来分析实际问题,提高毕业时解决实际问题的能力。项目,为单片机应用和开发提供支持。 打下良好的基础。
1、清楚了解字符液晶模块的初始化、清屏、显示、调用及外部特性等工作原理,并能使用LCD(液晶显示模块)显示计算结果; 掌握液晶模块的驱动和编程,设计液晶显示屏与单片机之间的接口电路,并利用单片机驱动和操作液晶模块;
2、充分分析内部逻辑概念,进行软件和调试,学会使用,能够以它为平台,设计具有四种算术运算能力的简单计算器的硬件电路和软件程序。
第二章 方案论证
2.1 规划概念
本设计可以采用两种方案。 一是采用FPGA作为核心处理芯片,并配备相应的外设; 另一种是采用AT89S52处理器并配备相应的外设。
1、方案一:使用FPGA控制
FPGA是一种高密度可编程逻辑器件。 自1985年Xilinx推出第一款FPGA以来,FPGA的集成密度和性能得到了迅速提升。 其集成密度可达500万门/芯片以上,系统性能可达200MHz。 由于其集成度高、方便易用、开发和上市周期短等特点,FPGA器件在数字设计和电子生产中得到了迅速普及和应用,并一度在高密度可编程逻辑领域占据主导地位。设备。
然而,对于基于SRAM编程的FPGA,编程信息需要存储在外部存储器中,需要外部存储芯片,使用方法复杂,保密性差。 对于一个简单的计算器来说,实用的FPGA是大材小用,成本太高。 。
2. 方案2:使用AT89S52
单片机是单片机的简称,因此也称为微控制器MCU(Micro Control Unit)。 它通常由单个集成电路芯片组成,其中包含计算机的基本功能部件:中央处理单元(CPU)、存储器和I/O接口电路等。因此,只要将微控制器与适当的软件结合起来即可与外部设备连接,即可成为单片机控制系统。 微控制器广泛应用于智能产品、智能仪器、测控技术、智能接口等领域,具有操作简单、实用方便、价格低廉等优点。 其中以MCS-51为核心的AT89S52是微控制器最典型的代表,应用于各种应用领域。 控制范围。
2.2 方案比选
通过对以上两种方案的论证和比较,从设计的实用性、便利性和成本出发,我们选择采用AT89S52单片机作为中央处理单元来设计计算器。 这样设计就可以实现四位数的加减乘除。 小数算术。
第三章系统硬件设计及说明
3.1 系统组成及总体框图
图3.1 系统组成及总体框图
3.2 组件介绍
3.2.1 AT89S52 特点
一、主要性能:
(2) 引脚说明:
VCC:电源电压。
GND:接地。
2、AT89S52功能特点说明
AT89S52 是一款低功耗、高性能 CMOS 8 位微控制器,具有 8K 系统内可编程闪存。 它采用 Atmel 的高密度非易失性存储器技术制造,与工业 80C51 产品在指令和引脚上完全兼容。 片上闪存允许程序存储器在系统中进行编程,也适用于传统编程器。 在单芯片上,它具有智能 8 位 CPU 和系统内可编程闪存,使 AT89S52 成为许多嵌入式控制应用系统的高度灵活和超有效的解决方案。
AT89S52 具有以下标准功能:8k 字节 Flash、256 字节 RAM、32 位 I/O 线、看门狗定时器、2 个数据指针、3 个 16 位定时器/计数器、1 个 6 向量 2 级中断结构、完整的-双工串口、片内晶振和时钟电路。
此外,AT89S52 可以在低至 0Hz 的静态逻辑下运行,并支持 2 种软件可选的省电模式。 在空闲模式下,CPU 停止工作,允许 RAM、定时器/计数器、串口和中断继续工作。 在掉电保护模式下,RAM内容被保存,振荡器被冻结,微控制器的所有工作停止,直到下一次中断或硬件复位。 8 位微控制器,具有 8K 字节的系统内可编程闪存。 同时,该芯片还具有PDIP、TQFP和PLCC三种封装形式,以适应不同产品的需求。
3、AT89S52引脚功能
AT89S52单片机是一款40引脚的芯片,如图3.2.1-2所示。
(1)端口线:P0、P1、P2、P3,共四个八位端口。
P0 端口:P0 端口是一个 8 位开漏双向 I/O 端口。 作为输出端口,每一位可以驱动8个TTL逻辑电平。
当向P0口写“1”时,该引脚作为高阻输入。
当访问外部程序和数据存储器时,端口0也用作低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),如图下表。
在闪存编程和验证期间,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 发送地址的高 8 位。 在此应用中,端口 P2 使用强内部上拉来发送 1。
当使用8位地址(如MOVX @RI)访问外部数据存储器时,P2端口输出P2锁存器的内容。
在闪存编程和验证期间,端口P2还接收高8位地址字节和一些控制信号。
P3 端口:P3 端口是一个 8 位双向 I/O 端口,内部有上拉电阻。 p3输出缓冲器可以驱动4个TTL逻辑电平。 当向P3端口写入“1”时,内部上拉电阻将该端口拉高,可作为输入端口使用。 当用作输入时,外部拉低的引脚将由于内阻而输出电流(IIL)。
P3口还用作AT89S52的特殊功能(第二功能),如表3.2.1所示。
表3.2.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(外部数据存储器读选通)
在Flash编程和验证过程中,P3端口还接收一些控制信号。
另外,P3口还接收一些控制信号,用于FLASH闪存编程和程序验证。
(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连接到石英晶体振荡器。 外部晶振引脚图如图3.2.1-3所示。
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.1-4所示。
AT89SXX系列单片机实现了ISP下载功能,从而取代了89CXX系列的下载方式。 因此,ATMEL 已停止生产 89CXX 系列微控制器。 目前市场上销售的AT89CXX大部分都是停产前的库存产品。
4、AT89S52的编程方法
编程前必须根据编程模式表设置地址、数据和控制信号; 顺序如下:
① 在地址线上添加待编程单元的地址信号。
② 将要写入的数据字节添加到数据线上。
③ 激活相应的控制信号。
④ 将+12V编程电压加到EA/Vpp端。
⑤ 为每对写入一个字节或每次写入程序机密位的闪存阵列添加一个 ALE/PROG 编程脉冲。 每个字节写周期是自定时的,最多在50us左右。 更改烧写单元的地址和写入的数据,重复步骤①-⑤,直至所有文件烧写完成。
单片机的现状及发展方向:
微控制器是为了满足工业控制的需要而诞生的。 它是自动控制系统的核心部件,主要应用于工业控制、智能仪器仪表、家用电器等领域。 具有体积小、功能多、价格低、使用方便、系统设计灵活等优点。 其应用领域不断扩大。 除工业控制、智能仪表、通讯、家用电器外,还广泛应用于智能高端电子玩具产品。 微控制器芯片作为核心控制部件。
由于单片机主要用于工业控制,工作环境比较恶劣,有高温、强电磁干扰,甚至有腐蚀性气体。 在太空工作的单片机控制系统还必须具有抗辐射能力,这决定了单片机CPU优于通用微机CPU。 具有不同的技术特点和发展方向:
(1)可靠性高;
(2)控制功能往往很强,数值计算交叉;
(3)指令集比通用微处理器慢得多;
(4)X系列芯片更换;
(5)抗干扰性能强,工作温度范围宽。
3.2.2 LCD1602液晶显示
1. 应用介绍
该模块有自己的字符生成存储器(CGROM)。 字符包括:阿拉伯数字、大小写英文字母、常用符号以及日文假名等,每个字符都有固定的代码,如大写英文字母“A”的代码为(41H)。 显示时,模块向LCD模块发送代码41H,我们可以在LCD上看到字母“A”。
1602液晶模块内部的控制器共有11条控制指令。 丰富的指令可以完成LCD的时序控制、工作模式设置和数据显示。
所使用的LCD1602液晶模块为标准16针插座,接口电路如图3.2.3所示: LCD1602详细信息参见表3.2.3-1和表3.2.3-2。
表 3.2.3-1 LCD1602 引脚说明
第一脚
VSS为地电源
第二次踢球
VDD接5V正电源
第三次踢球
V0是液晶显示器的对比度调节端。 连接正极电源时对比度最弱,连接接地电源时对比度最高。 当对比度太高时,就会出现“重影”。 使用时可以通过10K电位器调节对比度。
实际电路中,使用2K电阻接地较为理想。
第四次踢球
RS为寄存器选择,高电平选择数据寄存器,低电平选择指令寄存器。
第5次踢球
RW为读写信号线。 当电平为高时,进行读操作,当电平为低时,进行写操作。
当RS和RW都为低(00)时,可以写入指令或显示地址;
当RS为低电平,RW为高电平(01)时,可读取忙信号;
当 RS 为高电平且 RW 为低电平 (10) 时,可以写入数据。
脚6
E端子为使能端子。 当E端从高电平跳变到低电平时,液晶模块执行命令。
7 至 14 英尺
D0~D7为8位双向数据线。
脚 15-16
背光阳极和背光阴极。
表 3.2.3-2 LCD1602 命令列表
说明1
清除显示指令码01H,并将光标复位到地址00H;
说明2
光标复位指令代码02H,光标返回到地址00H;
命令3
光标和显示模式设置
I/D位→光标移动方向,高电平右移,低电平左移;
S位→屏幕上所有文字是否向左或向右移动,高电平有效,低电平无效;
指令 4
显示开关控制
D位→控制整体显示的开启和关闭,高电平表示打开显示,低电平表示关闭显示;
C位→控制光标的开关,高电平表示有光标,低电平表示无光标;
Bit B → 控制光标是否闪烁,高电平闪烁,低电平不闪烁;
指令 5
光标或显示移动
S/C位→电平高时移动显示文本,电平低时移动光标。
指令 6
功能命令设置
DL位—高电平时4位数据总线,低电平时8位总线;
N位为低电平时为单行显示,为高电平时为双行显示;
F位为低电平时,显示5×7点阵字符,为高电平时,显示5×10点阵字符;
指令 7
字符发生器 RAM 地址设置
指令 8
显存地址设置
指令 9
读取忙信号和光标地址
BF位→为忙标志位,高电平表示忙,此时模块无法接收命令或数据
指令 10
写入数据
指令 11
读取数据
2、液晶屏的特点:
(1)低压微功耗;
(2)扁平结构;
(3)被动显示型(无眩光,对人眼无刺激,不会造成眼睛疲劳);
(4)显示信息量大(因为像素可以做得很小);
(5) 易于着色(可以在色谱图上非常准确地再现);
(6)无电磁辐射(对人体安全,有利于信息保密);
(7)寿命长(这种器件几乎没有退化问题,因此具有极长的寿命,但液晶背光源的寿命有限,但背光源部分可以更换)。
第四章设计原理分析
4.1设计方案的确定
该设计需要使用 LCD 显示器和编码键盘。 因此选择静态显示和编码键盘。 使用LCD显示屏显示计算结果。
主程序初始化,其他程序选择模块化的方式。 首先,调试各个模块。 当各模块调试成功后,将它们一一添加到主程序中,最终完成整个软件部分的设计。
4.2 计算器硬件方案及硬件资源分配
4.2.1 硬件资源分配
主要使用硬件:AT89S52 LCD液晶显示编码键盘
硬件配置:
1、P1、P3端口:作为输出端口,控制液晶屏上数据显示的结果。
2、P2口:作为输入口,连接键盘,实现数据输入。
3.液晶显示输出。
4.2.2 系统硬件设计
为了更好地实现系统的功能,硬件电路的设计应遵循以下原则:
1.优化硬件电路
采用软件设计和硬件设计相结合的方法; 虽然当使用软件来实现硬件系统的功能时,响应时间可能比单纯使用硬件更长,并且还占用微处理器(MCU)时间。 然而,用软件来实现硬件的功能可以简化硬件结构,提高电路的可靠性。 因此,在设计本系统时,在满足可靠性和实时性的前提下,应尽可能通过软件来实现硬件功能。
2、可靠性和抗干扰设计
根据可靠性设计理论,系统中使用的芯片越少,系统的平均无故障时间就越长。 此外,使用的芯片越少,电路板上的地址和数据总线受到干扰的可能性就越小。 因此,系统的设计思路是在满足功能的情况下力求使用更少的芯片数量。
3、灵活的功能扩展
功能扩展的灵活性是衡量一个系统好坏的重要指标。 一次性设计往往无法充分考虑系统的各个方面,系统需要不断完善和功能升级。 进行功能扩展时,应在原有设计的基础上,通过修改软件程序和少量硬件来完成。 对于本系统,要求在系统硬件不变的情况下,可以通过修改软件程序来完成功能的升级和扩展。
根据第一章提出的系统设计方案,结合上述三个原则,确定了系统硬件的设计。 该计算器主要由以下功能模块组成:非编码键盘模块、LCD液晶显示模块等。
系统的硬件设计采用模块化设计方法。 AT89S52单片机和LCD显示电路是整个电路的核心,实现了系统的功能要求。
简易计算器主要包括:键盘电路和显示电路。
下图为整体硬件结构图。 (图4.2.2为整个系统示意图)
图4.2.2 计算器原理图
前面已经描述了系统的设计描述。 本系统采用了较为简单的设计方案,因此不会对系统的硬件设计总外围电路造成太大的干扰。 下面分别介绍系统的外围电路。 键盘部分采用编码键盘,显示部分采用液晶显示屏,完全可以满足显示要求。
4.2.3 键盘电路设计
键盘可分为两类:编码键盘和非编码键盘。 编码键盘是由大量按键(20个以上)和专用驱动芯片组合而成。 当按键按下时,可以处理按键抖动、连续点击等问题,并直接输出按键的代码,无需系统软件干预。 通用计算机使用的标准键盘是编码键盘。 在智能仪器中,可用并行接口芯片8279或串行接口芯片HD7279组成编码键盘。 同时还可以兼顾数码管的显示驱动。 相关接口电路和接口软件可在芯片资料中获取。 当系统功能复杂、按键数量较多时,使用编码键盘可以简化软件设计。 非编码键盘成本低廉。
从成本角度考虑,本设计采用非编码键盘。 如图4.2.3所示
4.2.4 显示电路设计
当系统需要显示少量数据时,采用LCD显示器是一种经济实用的方法。 P0口作为液晶显示器的数据口,P3.5-P3.7口作为其控制口,控制液晶显示器显示输出数据。
最终电路如图4.2.4所示:
第五章计算器软件设计
5.1 计算器软件规划
简单计算器程序主要包括以下功能模块:
1、预定按键查找模块分为按键读取程序、按键判断程序段、操作子程序等;
2、基于液晶屏的显示模块;
3、主要模块是系统的初始化。
5.2 键盘扫描编程
键盘扫描子程序首先读取P1端口的低四位,然后读取P1端口的高四位。 然后键值并显示缓存。 然后将按键的值转换为ASCII码,然后软件就可以设置硬件按键的每个按键所代表的内容。
按键读取程序采用反转法来读取按键。 无论键盘矩阵有多大,按键都会被读取两次。 第一次,所有行线输出低电平,全部读取键盘信息(列信息); 第二次,所有列线输出低电平,从所有行线读取键盘信息(行信息)。
按数字键将相应的数字发送到缓冲区,按功能键将执行相应的程序。
5.3 显示模块编程
显示模块程序首先要初始化显示模块; 然后控制光标的位置; 定义液晶显示器的控制端口,由SBIT指令完成; 然后设置屏幕清除、关闭显示、主页、打开显示、显示位置首地址等。
显示模块流程图如图5.3所示:
信息包括:
如果需要完整资料,可以加入我的粉丝圈,里面有资源压缩包的百度网盘下载地址和提取码。
据说用微信点击打开就可以了。 请原谅我的复杂过程。
您也可以扫描二维码。
传闻圈二维码
您也可以扫描二维码直接购买。 文末有百度网盘下载地址和提取码。