智能电热水器的控制系统设计
一、 设计内容及要求
打开电源后,先设定水温,水温分为八档(30~100,每 10 为一档)。
按下启动键后,开始测量水温并显示,控制电热管加热。上下限水位报警(声光报警)。
设计任务:
1、选用 AT89C51 和适当的存储器芯片,接口芯片完成相应的功能。
2、画出详细的硬件连接图(二号图纸)。
3、画出各程序的详细框图(二号图纸)。
4、给出 RAM 地址分配表及接口电路的端口地址。
5、给出设计思路。
6、给出程序所有清单并加上必要的注释。
7、完成设计说明书。
二、 设计方案及原理
2.1、总体方案设计
本设计中的智能热水器控制器以 AT89C51 单片机为检测控制中心单元,不仅实现了温度和
水位两种参数实时显示功能,而且具有温度设定功能,以及温度、水位控制功能。总体设计框
图如图 2-1 所示
方案一:
外围电路
温度显示器
AT89C51
A/D转换
水位显示
DS18B20
温度显示器
AT89C51
水 位 硬
件电路
送水阀
出水阀
DS18B20
按键控制
方案二:
外围电路
按键控制
2.2、方案比较选择
方案一与方案二的主要区别在于水位控制部分。方案一是采用 ADC0808(A/D 转换)芯片,将水
位模拟量转换为数字量来控制 LED 灯来显示水位状态。而方案二则是用另外设计一个硬件电路,
用电阻来控制水箱的出水和送水。经过比较发现,方案一脱离实际功能,难以应用,所以采用
方案二设计水位控制电路。
三、 单元模块设计
3.1、单片机系统设计
单片机系统由 AT89C51 和一定功能的外围电路组成,包括为单片机提供复位电压的复位电
路,提供系统频率的晶振。这部分电路主要负责程序的存储和运行。下图中 MCS-51 内部时钟方
式电路外接晶体以及电容 C1 和 C2 构成并联谐振电路,接在放大器的反馈回路中。对外接电容
的值虽然没有严格的要求,但电容的大小会影响振荡器频率的高低、谐振器的稳定性、起振的
快速性和温度的稳定性。晶体可在 1.2MHz~12MHz 之间任选,电容 C1 和 C2 的典型值在 20pF~
100pF 之间选择,但在 60pF~70pF 时振荡器具有较高的频率稳定性。典型值通常选择为 30pF
左右。
3.2、温度显示接口电路设计
上图中 VDD 接+5V 电源,VSS 接地。D0~D7 数据端口连 AT89C51 的 P0 端口。RS 为数据/命令选择,
R/W 为读写选择。RP1 为上拉电阻,用于实现显示器硬件功能。
开始
LCD初始化
延时
设置第一行
显示位置
显示第一
行内容
设置第二
行显示位
置
显示第二
行内容
液晶显示屏可以显示当前传感器所测量出的温度,经过键控切换可以显示 TH(上限温度)、
TL(下限温度)设置范围,实时显示调整上下限温度。
3.3、DS18B20 接口电路设计
VCC 端接+5V 电源;DQ 为数据段;GND 端接地;
时 序:
通过时间隙(time slots)来读写 DSl820 的数据位和写命令字的位。
主要包括初始化、写时间隙、读时间隙三个过程。
3.4、键控接口电路设计
K1 为上调、下调切换键;K2 为设置温度范围及调整 TH(上限温度)复合键;K3 为调整 TL(下限
温度)键;K4 为调整确定键;
当按下 K2 键后,可以通过再次按 K2 键上调 TH(上限温度),或再次按 K3 键上调 TL(下限温度)。
依调整需要可以按 K1 键切换上调、下调功能,此时再次按 K2 键下调 TH(上限温度),或再次
按 K3 键下调 TL(下限温度)。
温度范围调整完毕后按 K4 键确认。
3.5 水位检测电路设计
由 AT89C51 定时功能为 ADC0808 提供时钟,将水箱水位分为 50L、50~199L、200L 三档。将
水位模拟量转换为数字量来控制 LED 灯。水位低于 50 时,红色警报灯亮;水位在 50~199 时,
绿色指示灯亮,水位正常;水位大于 200L 时,水箱满,红色停止灯亮。
四、 整体硬件设计图
五、 程序清单
TEMP_ZH
TEMPL
TEMPH
TEMP_TH
TEMP_TL
TEMPHC
TEMPLC
TEMPFC
K1
K2
;实测温度值存放单元
;高温报警值存放单元
;低温报警值存放单元
;正、负温度值标记
EQU 24H
EQU 25H
EQU 26H
EQU 27H
EQU 28H
EQU 29H
EQU 2AH
EQU 2BH
EQU P1.4
EQU P1.5
;上调、下调切换键
;设置/TH 调整键
;TL 调整键
;确定键
;蜂鸣器
;指示灯
;LCD 字符显示位置
;LCD 寄存器选择信号
;LCD 读写信号
;LCD 允许信号
;DS18B20 是否存在标志
;设定按键的增、减标志
;DS18B20 数据信号
;ADC0808 引脚信号
EQU P1.6
EQU P1.7
EQU P3.7
EQU P1.3
EQU 2FH
EQU P2.0
EQU P2.1
EQU P2.2
EQU 20H.0
EQU 20H.1
EQU P3.3
BIT P2.4
BIT P2.5
BIT P2.6
BIT P2.7
K3
K4
BEEP
RELAY
LCD_X
LCD_RS
LCD_RW
LCD_EN
FLAG1
KEY_UD
DQ
CLOCK
ST
EOC
OE
ORG 0000H
LJMP MAIN
ORG
000BH
LJMP INT_T0
MAIN:
MOV TMOD,#10H
MOV TH0,#245
MOV TL0,#0
MOV IE,#8AH
CLR C
SETB TR0
MOV SP,#60H
MOV A,#00H
MOV R0,#20H
MOV R1,#10H
CLEAR: MOV @R0,A
;为 ADC0808 提供时钟
;将 20H~2FH 单元清零
START:
START1:
START2:
FLAG,START1
INC R0
DJNZ R1,CLEAR
LCALL SET_LCD
LCALL RE_18B20
LCALL RST
JNB
LCALL MENU_OK
MOV TEMP_TH,#055H
MOV TEMP_TL,#019H
LCALL RE_18B20A
LCALL WRITE_E2
LCALL TEMP_BJ
JMP
LCALL MENU_ERROR
LCALL TEMP_BJ
SJMP
LCALL RST
JNB FLAG,START1
MOV
LCALL WRITE
A,#0CCH
START2
$
;调用 18B20 复位子程序
;DS1820 不存在
;DS1820 存在,调用显示正确信息子程序
;设置 TH 初值 85 度
;设置 TL 初值 25 度
;调用暂存器操作子程序
;写入 DS18B20
;显示温度标记
;调用显示出错信息子程序
;显示温度标记
;调用 DS18B20 复位子程序
;DS18B20 不存在
;跳过 ROM 匹配命令
A,#0CCH
MOV
A,#44H
LCALL WRITE
LCALL RST
MOV
LCALL WRITE
MOV
A,#0BEH
LCALL WRITE
LCALL READ
LCALL CONVTEMP
LCALL DISPBCD
LCALL CONV
LCALL TEMP_COMP
LCALL PROC_KEY
;温度转换命令
;跳过 ROM 匹配
;读温度命令
;调用 DS18B20 数据读取操作子程序
;调用温度数据 BCD 码处理子程序
;调用温度数据显示子程序
;调用 LCD 显示处理子程序
;调用实测温度值与设定温度值比较子程序
;调用键扫描子程序
WAIT:
ST
ST
ST
EOC,$
OE
CLR
SETB
CLR
JNB
SETB
SJMP START2
;ADC0808 启动转换
;循环
;*************************** 键扫描子程序 *****************************
PROC_KEY:
JB K1,PROC_K1
LCALL BEEP_BL
JNB K1,$
MOV DPTR,#M_ALAX1
MOV A,#1
LCALL LCD_PRINT
PROC_K2
LCALL LOOK_ALARM
JB K3,$
LCALL BEEP_BL
JMP
JB K2,PROC_END
LCALL BEEP_BL
JNB K2,$
MOV
MOV
LCALL LCD_PRINT
LCALL SET_ALARM
LCALL RE_18B20
LCALL WRITE_E2
LCALL MENU_OK
LCALL TEMP_BJ
DPTR,#RST_A1
A,#1
PROC_K1:
PROC_K2:
PROC_END: RET
;将设定的 TH,TL 值写入 DS18B20
;*************************** 设定温度报警值 TH、TL ***************************
SET_ALARM: LCALL LOOK_ALARM
AS0:
K1,AS00
JB
LCALL BEEP_BL
JNB K1,$
CPL 20H.1
JB 20H.1,ASZ01
AS00:
;UP/DOWN 标记
;20H.1=1,增加