电子DIY、Arduino、51单片机、STM32单片机、FPGA……
电子百科、开发技术、职业经验、趣味知识、科技头条、设备拆机……
http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect
-----------------------------------------------------------------------------------------------------------------------------
本设计采用AT89S52单片机作为主控芯片,利用数字式温度传感器DS18B20作为温度采集装置采集温度,将温度信号传送给单片机后通过一片液晶显示屏显示出来。
系统工作的温度可以通过电路板上的按键自主进行设定。
系统采用了一个继电器,用单片机为主的控制系统控制继电器触电的吸合,来控制交流电加热电路,达到以弱电控制强电的目的。
系统必须设置温度报警系统,即达到设定温度的上限时扬声器报警,系统自动断电,当温度恢复时,系统重新恢复工作。
系统主要实现功能
系统主要功能如下:
1)测量热水器内的温度,并通过显示屏实时显示温度值,显示范围为0℃~70℃。
2)正常状态下显示系统时钟。
3)可手动设定时钟时间即对时钟进行校准。
4)可以人工设定热水器内的烧水温度,范围在20℃~70℃之间,也可以无需设定,打开后自动烧水,温度上限为70℃。
5)具备定时功能,限定烧水时间。
6)可以立即开机或在24小时内任意设定开机时间。
7)当热水器内没有水时,有报警提示,并开关自动关闭,即有防止干烧功能。
8)要求热水器有一定的抗干扰的功能。
系统整体设计方案
电热水器控制系统的整体设计方案包括硬件设计与软件设计方案,硬件方案主要是指以单片机为核心,包括外接的温度采集电路,实时时钟电路,键盘,热水器加热开关,液晶显示电路,报警电路以及复位电路。具体硬件框图如图2.1所示
方案论证
按照前面的课题要求,我们首先确定运用单片机AT89S52作为本次设计的核心部件。
在温度采集方面有多种选择,常见的温度传感器分为以下几种:热敏电阻式温度传感器、热电阻式温度传感器、热电偶式温度传感器、模拟集成温度传感器、智能温度传感器。本次设计原本选择的是pt1000铂电阻温度传感器,其作为高精度的温度敏感元件,具有测温范围大,测温精度高,稳定性好,示值复现性高与耐氧化等特点,常被用作0℃~926℃温度区间内的标准温度计,其特性曲线为:-200°C~0°C时,Rt=R0[1+At+Bt2+c(t-100)t3];0°C~650°C时,Rt=R0[1+At+Bt2]。(Rt为温度为t°C时热电阻的阻值,R0为0°C时的阻值,A、B、C为实验测定的常数,A=3.90802×10-2,B=5.802×10-7,C=-4.22×10-7)本系统使用的R0为1000Ω。而要将pt1000作为本次设计的元件,还需要语气配套的传感器测量电路与放大电路两部分,具体电路如图2.2所示。[12]
但是在实际购买时发现pt1000电阻由于价格过高,所以在最终设计中并没有采用pt1000作为测温元件来使用,同时,在同组同学推荐下采用了另一种集成式温度传感器DS18B20作为测温元件,DS18B20虽然测温范围比pt1000小,但是在满足本设计要求的基础上,其价格不到pt1000的一半,并且其硬件电路由于舍去了普通传感器所需附带的A/D电路的设计,所以其硬件电路的设计更加简单,所以采用了DS18B20作为最终设计中的测温元件。[11]
本次设计的要求是选择51单片机作为核心的处理器,但是市场上做51单片机的厂商有很多家,其中比较著名的有STC公司、MICROCHIP公司、德州仪器公司、Intel公司、ATMEL公司、Philips公司、Siemens公司。[9]
其中STC公司的STC单片机主要是基于8051内核,是新一代增强型单片机,指令代码完全兼容传统8051,速度快8~12倍,带ADC,4路PWM,双串口,有全球唯一ID号,加密性好,抗干扰强。
还有MICROCHIP公司的PIC单片机,其突出的特点是体积小,功耗低,精简指令集,抗干扰性好,可靠性高,有较强的模拟接口,代码保密性好,大部分芯片有其兼容的FLASH程序存储器的芯片.
PHILIPS公司的PHLIPIS 51LPC系列单片机是基于80C51内核的单片机,嵌入了掉电检测、模拟以及片内RC振荡器等功能,这使51LPC在高集成度、低成本、低功耗的应用设计中可以满足多方面的性能要求。
ATMEl公司的8位单片机有AT89、AT90两个系列,AT89系列是8位Flash单片机,与8051系列单片机相兼容,静态时钟模式;AT90系列单片机是增强RISC结构、全静态工作方式、内载在线可编程Flash的单片机,也叫AVR单片机。
而作为第一次使用单片机做独立设计,我选用的是ATMEL公司的AT89S52单片机,AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 储存器。使用Atmel 公司高密度非易失性储存器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序编程器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。
众所周知,单片机的程序写入过程不是一帆风顺的,其常常需要多次的写入与调试的过程,这里采用AT89S52的优点就是AT89S52额外添加了8k在系统可编程(即ISP)Flash存储器,特意设计为方便在线编程,使得其下载线电路简单,且可实现并行和或者串行模式的在线编程,使得每一次的程序下载与调试不必将单片机从PCB板上拔下,这样不仅使程序调试变得更加方便,其次还会大大延长单片机与PCB板的寿命。
由于本次设计需要有定时开关机的功能,而单片机其内部时钟只能作为其内部程序运行的基准而不能满足设计的要求,所以外接了一个时钟芯片来满足本次设计的要求。[10]
市面上的主流的时钟芯片有DS1302、 DS1307、PCF8485、SB2068等等。这些芯片结构简单,价格低廉,而实时时钟电路DS1302是DALLAS公司的一种具有涓细电流充电能力的电路,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768kHz晶振。
在显示方面采用一个液晶显示屏来显示主要的参数,液晶显示屏相对于LED数码管虽然编程方面更加繁琐,但是相对的其还具有更多的优点,其除了可以顺利的显示数字之外,还可以对显示的数字进行简单的注释,使得人机操作界面变得更加友好,其次在有关网站上也可以顺利的查找到有关DS1302的信号显示程序,本次显示界面除了有温度的显示还需要有时间的显示,定时操作信号的显示,采用LCD显示屏使操作显得更加方便。[6]
在键盘的选择上,有两种选择:一是采用独立式按键键盘,第二种是采用矩阵式键盘。矩阵式一般键盘采用4*4式键盘,而本次设计中并不需要如此多的功能按键,所以本次设计,选择了独立式按键,本次总共使用了6个按键。其中按键1的功能是系统的复位,按键2的功能是实现实时时钟的时间校准功能,按键3实现的功能是实现烧水温度的设置功能,按键4实现的功能是烧水定时功能的设置,按键5与按键6分别是“+”“—”功能键。
然后本次设计中还加入了一个发光二极管与蜂鸣器。
发光二极管用来显示继电器的闭合状况,使得加热电路的通断能够被更直接的观察。
而加入蜂鸣器的作用是在进行某项操作时进行指示作用,还有在达到烧水温度或者定时时间到的时候起到报警作用。
单片机系统模块介绍
AT89S52是一种低功耗、高性能CMOS 8位微控制器,具有8K在线可编程Flash 存储器,使用Atmel公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在线可编程,亦适于常规编程器。在一个芯片上,拥有灵巧的8 位CPU 和在线可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。[1]
AT89S52具有以下标准功能:8K字节的Flash,256字节的RAM,32 位I/O 口,看门狗定时器,2个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件,可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作;掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
3.1.1 AT89S52单片机的主要性能
与MCS-51单片机产品兼容
8K字节在系统可编程Flash存储器
1000次擦写周期
全静态操作:0Hz~33Hz
三级加密程序存储器
32个可编程I/O口线
三个16位定时器/计数器
八个中断源
全双工UART串行通道
低功耗空闲和掉电模式
掉电后中断可唤醒
看门狗定时器
双数据指针
掉电标识符
3.1.2 AT89S52管脚功能说明
VCC :电源
GND : 接地
P0口: P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用,在这种模式下,P0具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节,在程序校验时,输出指令字节。程序校验时,P0口需要外部上拉电阻。
P1口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,P1 输出缓冲器能驱动4个TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如表3.1所示。在flash编程和校验时,P1口接收低8位地址字节。
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.2所示。在flash编程和校验时,P3口也接收一些控制信号。
表3.2 P3口第二功能
RST:复位输入。晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出96个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。
ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8 位地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。这一位置 “1”,ALE 仅在执行MOVX 或MOVC指令时有效。否则,ALE 将被微弱拉高。这个ALE 使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。
PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。
EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH的外部程序存储器读取指令,EA必须接GND.为了执行内部程序指令,EA应该接VCC。在flash编程期间,EA也接收12V的VPP电压。
XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:振荡器反相放大器的输出端。[7]
3.1.3单片机的最小系统
单片机的最小系统是指运用最少的元件使单片机运行的系统,一般包括一下的几个部分:晶振电路、复位电路、电源电路和串口电路。
晶振是电路中常用用的时钟元件,全称是叫晶体震荡器,在单片机系统里晶振的作用非常大,他结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个基础上的,晶振的提供的时钟频率越高,那单片机的运行速度也就越快。[2]
晶振的作用是为系统提供基本的时钟信号。通常一个系统共用一个晶振,便于各部分保持同步。有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。
而晶振由于会与单片机的XTAL1与XTAL2脚构成的振荡电路中会产生谐波,从而降低电路时钟振荡器的稳定性,所以一般会匹配两个30pf的电容来消减谐波对于电路稳定性的影响。
晶振电路如图3.2所示:,XTAL1 和XTAL2 分别是放大器的输入、输出端
系统复位有两种方式:上电复位与手动复位。[3]
上电复位:上电瞬间,电容充电电流最大,电容相当于短路,RST端为高电平,自动复位;电容两端的电压达到电源电压时,电容充电电流为零,电容相当于开路,RST端为低电平,程序正常运行。
高电平形成复位,同时电解电容被短路放电;按键松开时,VCC对电容充电,充电电流在电阻上,RST依然为高电平,仍然是复位,充电完成后,电容相当于开路,RST为低电平,正常工作。[5]
一般采用手动复位,其对于上电复位方式更加方便,不需要切断电源便可对系统进行复位,复位电路如图3.3所示
3.2温度检测模块
3.2.1 DS18B20的主要功能及特点
DS18B20温度传感器是美国达拉斯(DALLAS)半导体公司推出的应用单总线技术的数字温度传感器。该器件将半导体温敏器件、A/D转换器、存储器等做在一个很小的集成电路芯片上。它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,可直接将温度转化成串行数字信号供处理器处理。[8]
DS18B20具有以下特性:
独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线。
每个设备都有一个唯一的64位序列码,存储在ROM中。
简单的多点分布式测温应用。
在使用中不需要任何外围元件。
可以从数据线供电。电源范围为3.0V~ 5.5V。
测温范围 -55℃~+125℃。
在—10℃~+85℃间,测温分辨率为0.5℃。
温度计分辨率可由用户选择,9至12位之间。
在750毫秒内将温度转换为12位字。
用户可自定义非易失性报警的设置。
报警搜索命令定义和存储的设备,其温度不收程序限制(温度报警状态)。
采用8引脚SOP和3引脚TO- 92封装。
软件与DS1822兼容。
其引脚如图3.4所示:
图3.4 DS18B20引脚图
引脚说明:
GND - 接地
DQ - 输入/输出数据
VDD - 电源电压
NC - 无连接
DS18B20的极限使用条件
各引脚对地电压: -0.5V~+0.6V
工作温度: -55℃~125℃
储存温度: -55℃~+125℃
焊接温度参见J-STD-020A的规格
*以上指出的器件在进行正常焊接操作时所需要的环境条件,可能还有部分为能说明但是在操作规格中已经暗示器件可正常运行的环境。长期工作在极限条件下可能会影响器件的可靠性。
3.2.2DS18B20的内部结构
DS18B20的内部存储资源分为8个字节的ROM,9个字节的高速暂存器RAM,3个字节的EEPROM。如图3.5所示。
图3.5 DS18B20内部结构图
每只DS18B20都有一个唯一存储在ROM中的64位编码。最前面8位是单线系列编码,接着的49位是唯一的序列号,最后8位是以上56位的CRC编码。当一条总线上皆有多个DS18B20时,就通过序列号对其加以区分。
主机操作ROM的指令有5种:
33H——读ROM。读DS18B20温度传感器ROM中的编码。
55H——匹配ROM。发出此命令后,接着发出64位ROM编码,访问单总线上与该编码相对应的DS18B20并使之做出响应,为下一步对该DS18B20的读写做准备。
F0H——搜索ROM。用于确定挂接在同一总线上DS18B20的个数,识别64位ROM地址,位操作各期间做好准备。
CCH——跳过ROM。忽略64位ROM地址,直接向18B20发温度变换命令。
ECH——告警搜索命令。执行后只有温度超过设定值上限或下限的芯片才做出响应。
高速暂存器RAM由9个字节组成。其组成如图3.8所示。包括两个温度显示位,两个复制的TH和TL,一个配置寄存器和三个保留位,一个CRC校验值。可电擦E2PROM又包括温度触发器TH和TL,以及一个配置寄存器。
表3.3 高速暂存器RAM组成
寄存器内容 |
字节地址 |
温度值地位(LSB) |
0 |
温度值高位(MSB) |
1 |
高温限值(TH) |
2 |
低温限值(TL) |
3 |
配置寄存器 |
4 |
保留 |
5 |
保留 |
6 |
保留 |
7 |
CRC校验值 |
8 |
操作RAM的指令主要有:
44H——温度转换。启动DS18B20进行温度转换,结果存入RAM。
BEH——读暂存器。读内部RAM中的温度数据。
4EH——写暂存器。发出像内部RAM写上、下限温度数据指令,紧跟该命令之后传送2字节的数据。
48H——复制暂存器。将RAM中的TH、TL复制到E2PROM中。
B8H——重调E2PROM。将E2PROM中内容恢复到中。
B4H——读供电方式。寄生供电时,DS18B20发送0,外界电源供电时,DS18B20发送1。
3.2.3 DS18B20的工作时序
DS18B20需要严格的单总线协议以确保数据的完整性,主要包括初始化系列,读序列,写序列,所有时序都是讲主机作为主设备,单总线设备作为从设备。每一次命令和数据的传输都是从主机启动写时序开始,如果要求单总线器件会送数据,在进行写命令后,主机需启动读时序写完数据将接受。数据和命令的传输都是地位在先。
初始化时序:
1)先将数据线置高电平1。
2)延时(该时间要求不是很严格,但是要尽可能短一点)。
3)数据线拉到低电平0。
4)延时750us(该时间范围可以在480~960us)。
5)数据线拉到高电平。
6)延时等待。如果初始化成功,则在15~60ms内产生一个由DS18B20返回的低电平0,据该状态可以确定它的存在。
7)若CPU读到数据线上的低电平0后,还要进行延时,其延时的时间从发出高电平算起至少要480us.
8)将数据线再次拉到高电平1后结束。如图3.6所示。
写时序:
1)数据线先置低电平0。
2)延时确定的时间为15us。
3)按从低位到高位的顺序发送数据。
4)延时时间为45us。
5)将数据线拉到高电平1。
6)重复1)~5)步骤,直到发送完整个字节。
7)最后将数据线拉高到1。如图3.7所示。
图3.7 写数据时序图
读时序:
1)将数据线拉高到1。
2)延时2us。
3)将数据线拉低到0。
4)延时6 us。
5)将数据线拉高到1。
6)延时4 us。
7)读数据线的状态得到一个状态位,并进行数据处理。
8)延时30us。
9)重复1~7步骤,直到读取完一个字节。如图3.8所示。
图3.8 读数据时序图
硬件模块的设计
在第二章已经提到硬件件模块的设计主要是指以单片机为核心,包括外接的温度采集电路,实时时钟电路,键盘,热水器加热开关,液晶显示电路,报警电路以及复位电路的设计。
4.1 温度采集模块
首先我们选择DS18B20作为本次设计的测温元件。
由第三章有关内容可知DS18B20温度传感器可以将温度这一模拟信号转化为数字信号供处理器进行处理,从而省去了电阻电感式传统温度传感器的信号运放模块与A/D转换模块。
DS18B20只有三根外引线:单线数据传输总线端口DQ (2),外供电源线VDD(3),共用地线GND(1)。DS18B20有两种供电方式:一种为数据线供电方式,此时VDD接地,它是通过内部电容在空闲时从数据线获取能量,来完成温度转换,相应的完成温度转换的时间较长。这种情况下,用单片机的一个I/O口来完成对DS18B20总线的上拉。另一种是外部供电方式(VDD接+5V),相应的完成温度测量的时间较短。
在本设计中采用外部供电方式实现DS18B20传感器与单片机的连接,具体的接口电路如图4.2所示。
4.2实时时钟电路模块
本次设计采用的外接时钟模块芯片是美国DALLAS公司的DS1302时钟芯片。
4.2.1 DS1302的介绍
其作为一款高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.5~5.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。DS1302的外部引脚分配如图1所示及内部结构如图2所示。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。
各引脚的功能为:
Vcc1:主电源;Vcc2:备份电源。当Vcc2>Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2< Vcc1时,由Vcc1向DS1302供电。
SCLK:串行时钟,输入,控制数据的输入与输出;
I/O:三线接口时的双向数据线;
CE:输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;其次,
CE提供结束单字节或多字节数据传输的方法。
具体引脚图如图4.3所示
4.2.2实时时钟模块原理图
电路原理图如图4.5所示,DS1302与单片机的连接也仅需要3条线:CE引脚、SCLK串行时钟引脚、I/O串行数据引脚,Vcc2为备用电源,外接12MHz晶振,为芯片提供计时脉冲。
图4.5 DS1302实时时钟电路接线电路
4.3键盘输入模块
键盘输入原理图如图4.6所示:
P3.3~P3.7分别接按键S1~S6
按键的功能分别是:
S1时间调整按钮
S3烧水开始按钮与烧水温度调整按钮
S4烧水时间设定按钮
S5“+”功能键
S6“—”功能键
图4.6键盘输入模块原理图
4.4继电器加热模块
继电器的定义是当输入量(激励量)的变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器,它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。
本设计所用的为型号SRD-05VDC-SL-C的继电器。线圈电压为直流5V,为一单刀双掷继电器,其引脚结构如图4.7所示。
图4.7 继电器引脚图
除线圈外,另三个引脚构成一个单刀双掷开关,当线圈通电时,开关达到另一边,原来的开触点吸和,闭触点断开。本设计中,目的是用继电器吸和,接通外接的以加热设备,从而起到温度控制的作用,只需用到一组常开触点,则另一端空置。
图4.8 继电器设计原理图
4.5 LCD显示模块设计
4.5.1 LCD模块概述
本次设计采用的是一块1602LCD液晶模块,其共可以显示2 行×16 个字符,每个字符是由5×8点阵组成的字符块集。字符型液晶显示模块由字符型液晶显示屏(LCD),控制驱动主芯片SPLC780C 及其扩展驱动芯片SPLC1OO,配以少量外围阻﹑容元件结构件等装配在PCB 板上而成。YB1602A 采用COB 工艺制作,结构稳定,使用寿命长。
其主要特性如下:
8位并行数据串口,适配M6800系列时序;
可选为并行数据方式;
具有字符发生器ROM,含10880位;
192中5*8点字符
64种5*10点字体字符
低功耗,高可靠性;
4.5.2 LCD模块硬件说明
1)接口说明
表4.1 LCD1602接口说明
管脚序 |
名称 |
电平 |
功能描述 |
1 |
VSS |
0V |
电源地 |
2 |
VCC |
5.0V |
电源输入 |
3 |
V0 |
- |
LCD驱动电压输入 |
4 |
RS |
H/L |
RS=H,表示DB0-DB7 为显示数据 RS=L,表示DB0-DB7 为指令 |
5 |
R/W |
H,H→L |
R/W=H,数据被读到DB9-DB7 R/W=L, 数据被写到DB9-DB7 |
6 |
E |
H/L |
使能信号 |
7 |
DB0 |
H/L |
数据线 |
8 |
DB1 |
H/L |
数据线 |
9 |
DB2 |
H/L |
数据线 |
10 |
DB3 |
H/L |
数据线 |
11 |
DB4 |
H/L |
数据线 |
12 |
DB5 |
H/L |
数据线 |
13 |
DB6 |
H/L |
数据线 |
14 |
DB7 |
H/L |
数据线 |
15 |
BLA |
5.0V |
背光正极(LEDK﹑BLK) |
16 |
BLK |
0V |
背光负极(LEDA﹑BLA) |
备注:第3 脚V0 用来调节对比度,LCD 的驱动电压Vop=VDD-V0,YB1602 的Vop是4.8V,此时显示最佳对比度,故在5.0V 供电模式下,可以在V0 与电源地(0V)之间接一个10K 的可调电位器来调节对比度。
2)最大工作范围
逻辑工作电压(VDD):4.5V~5.5V
电源地(VSS):0V
LCD驱动电压(Vop):-0.2V~+0.3V
4.5.3 内部控制指令
表4.2 LCD内部指令表
序号 |
指令 |
RS |
R/W |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
1 |
清显示 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
2 |
光标返回 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
* |
3 |
置输入模式 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
I/D |
S |
4 |
显示开/关控制 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
D |
C |
B |
5 |
光标或字符移位 |
0 |
0 |
0 |
0 |
0 |
1 |
S/C |
R/L |
* |
* |
6 |
置功能 |
0 |
0 |
0 |
0 |
1 |
DL |
N |
F |
* |
* |
7 |
置字符发生存贮器地址 |
0 |
0 |
0 |
1 |
字符发生存贮器地址 |
|||||
8 |
置数据存贮器地址 |
0 |
0 |
1 |
显示数据存贮器地址 |
||||||
9 |
读忙标志或地址 |
0 |
1 |
BF |
计数器地址 |
||||||
10 |
写数到CGRAM或DDRAM) |
1 |
0 |
要写的数据内容 |
|||||||
11 |
从CGRAM或DDRAM读数 |
1 |
1 |
读出的数据内容 |
4.5.4显示硬件设计原理图
根据设计要求与液晶控制方式,采用并行工作方式,将单片机的P0口作为数据传输口,而又由于单片机的P0口内部没有上拉功能,P0口作为I/O口输出的时候时 输出低电平为0 输出高电平为高组态(并非5V,相当于悬空状态)。也就是说P0 口不能真正的输出高电平,给所接的负载提供电流,因此必须接上拉电阻[4](即外接一排阻连接到VCC上,如图4-8所示)。其硬件显示模块如图4.9所示。[16]
图4.9 液晶显示模块原理图
4.6其余硬件模块设计
蜂鸣器电路在输入为低电平时导通,作为某些按键按下的指示音。
LED灯在继电器断开即加热工作时亮,在加热电路断开时,LED灯熄灭。
系统软件设计
根据系统所需要实现的功能,软件设计主要分为如下的几个模块:主程序、温度读取模块设计、实时时钟模块设计、LCD显示模块设计、键盘扫描程序以及按键消抖程序。
本系统的工作流程是:系统上电后,对电路板上的各部分初始化;然后按下按键2,对时间进行设定;按下按键3之后,对烧水温度进行设定;按下按键4后,对烧水时间进行设定,当温度超过设定的温度之后,蜂鸣器工作,系统停止工作;在系统受到较强干扰时,按下按键1可以对单片机进行复位。
5.1主程序模块
主程序主要完成的是对个全局变量进行定义,对时钟与时间的初始化,调用子函数功能。
具体流程图如图5.1所示。
主程序清单如下:
void main()
{
bit bz=0;
float ttt;
char we[6];
unsigned int i;
int te;
delayms(1);
chushishizhong(); //初始时钟
chushishijian(); //初始时间
//writetime();
kaishi:
writecom(0x01); //清零
while(1)
{
readtime(); //读取时间
t[0]=shijian[4]/10+0x30; //时间数据处理
t[1]=shijian[4]%10+0x30;
5.2 DS18B20测温模块
此模块主要任务是对DS18B20进行初始化,然后再进行读字节、写字节的工作,最后将读得的16进制温度传送到处理器内进行处理。
DS18B20测温流程图如图5.2所示
5.3实时时钟模块
实时时钟模块完成时间的设定与时间的读取,包括年、月、日、时、分、秒。
具体流程图如图5.3所示
具体程序如下:
#define uchar unsigned char
sbit res=P2^0; //数据命令口选择
sbit clo=P2^2; //脉冲信号口选择
sbit io=P2^1; //数据口选择
#define miao 0x80//秒
5.4 LCD显示模块
LCD显示模块主要实现各个数据的显示功能,包括时间的显示与温度以及提示字的显示。
显示模块的流程图如图5.4所示。
具体程序如下:
#define port P0
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^7; //将P2.0设置为数据选择口
sbit rw=P2^6; //将P2.6设置为读写选择口
sbit en=P2^5; //将P2.5设置为使能信号口
5.5键址返回程序
键盘扫描程序的功能是逐个扫描各个功能键和“+”“—”键是否被按下,若按下某个按键,则返回相应的键址。
其按键扫描程序如下:
sbit k1=P3^3; //定义每个按键的数据口 P3.3为S1按键
sbit k2=P3^4; //P3.4对应S2按键
sbit k3=P3^5; //P3.5对应S3按键
sbit k4=P3^6; //P3.6对应S4按键
sbit k5=P3^7; //P3.7对应S5按键
unsigned char keyscan() //定义键址返回程序
{
if(k1==0) //当按键1按下
{
delayms(10); //消抖 延时
if(k1==0)
{
while(k1==0);
return 1; //返回键址1
}
}
else if(k2==0) //当按键2按下
{
delayms(10);
if(k2==0)
{
while(k2==0);
return 2; //返回键址2
}
}
else if(k3==0) //当按键3按下
{
delayms(10);
if(k3==0)
{
while(k3==0);
return 3; //返回键址3
}
}
else if(k4==0) //当按键4按下
{
delayms(10);
if(k4==0)
{
while(k4==0);
return 4; //返回键址4
}
}
else if(k5==0) //当按键5按下
{
delayms(10);
if(k5==0)
{
while(k5==0);
return 5; //返回键址5
}
}
else
return 0; //若没有按键按下则返回
}
5.6测试及性能分析
实际硬件测试图如下:
1)接通电源,系统正常显示时钟,如图5.5所示
图5.5 时时钟显示
2)按下按键2,,光标闪烁,进入时钟校准模式,如图5.6所示
图5.6 时钟校准
3)按下按键3,系统显示当前温度,按下按键5,按键6调节烧水温度,当水箱内温度低于目标温度时,LED灯亮,表示继电器断开,加热电路工作。,如图5.7所示。
图5 .7加热模式
4)当水箱内温度达到加热温度时,LED灯熄灭,加热电路停止工作,在温度降到设定温度以下,继电器断开,继续加热。如图5.8所示
图5.8 继续烧水
5)按下按键4,进入加热时间设定,再按下按键4则进入定时烧水模式。如图5.9所示
图5.9 定时烧水
6)按下按键1,则对系统进行复位操作,系统初始化到时间显示画面,如图5.10所示
图5.10 复位操作
结论:成品经实际测试,基本达到本次设计的各项要求。