用 AT89C51 单片机设计智能家用电热水器
【转自互联网,如需引用请联系原作者】
电热水器是一种可供浴室、洗手间及厨房使用的家用电器,市场上传统的机械式电热水器控
制精度低、可靠性差,随着人们生活质量的提高,人们对电热水器的要求越来越趋向于智能
化和数字化,笔者采用 AT 89C 51 单片机作为控制器设计了一款智能家用电热水器,基本
实现了智能控制功能。
1 .系统功能及其工作原理
该智能热水器具有以下功能: (1) 使用高清晰度数码管实时显示水温,范围 0 ~ 102 ℃ :
(2) 可用键盘方便地设定水温,并显示设定的温度; (3) 按设定温度加热到相应水温,并
具有保温功能。
系统利用集成温度传感器 AD590 完成温度测量并转换成模拟电压信号,经由 A / D 转换
器 ADC0804 转换成数字信号送到 AT 89C 51 单片机中,单片机将采集到的温度值与通过键
盘设定的温度值进行比较,根据比较结果,控制加热器的开断,同时将温度值实时显示在 LED
显示器上。
2 .系统设计
2 . 1 系统硬件设计
系统设计硬件原理结构如图 1 所示。系统以高性价比的 AT 89C 51 单片机为核心,由 AD590
测温电路、 ADC0804 模数转换电路、键盘/显示电路、双向可控硅驱动电路 MOC3041 、双
向可控硅 TLC 336A 组成加热器控制电路。
2 . 1 . 1 控制器电路设计
本系统选择 AT 89C 51 作为主控制器, P0 口作为 ADC0804 转换数据的输入端。 P1 . 4
接 ADC0804 的 INTR 端检测数据转换是否结束, P1 . 0 ~ P1 . 3 的输出信号接到译
码器 7447 上作为数码管的显示数据, P1 . 5 ~ P1 . 7 则作为 4 个数码管的位选信
号控制。 P2 口用来连接矩阵键盘,实现电热水器加热水温的动态设定。 P3 . 1 用于控
制加热器电路的通断, P3 . 2 连接加热状态指示灯, P3 . 3 连接电源状态指示灯,
P3 . 6 用于控制 ADC 转换器的启动, P3 . 7 用于控制读取 ADC 的转换结果。
2 . 1 . 2 键盘/显示接口电路设计
系统中键盘的功能主要用于用户输入和修改设定的温度。键盘设计 12 个按键,其中 0 ~ 9
数字键用于温度的输入和修改。功能键一个 (* 号键 ) ,具有双重功能,第一次按为“设
定”温度,用于进入设定温度模式,第二次按为“确认”设定温度,用于设定温度输入结束
后的
确认。 # 号键未定义,可用于其它扩展。键盘采用行列式设计, 12 个按键排成 3 × 4 矩
阵。设计中用单片机 P2 口的 P2 . 0 ~ P2 . 3 接键盘的 4 根行线, P2 . 5 ~ P2 .7
接 3 根列线。
温度显示电路由 3 位七段码 LED 显示器组成,单片机用 P1 口输出段码和控制信号,通过
7447 TTL BCD 译码器译码,用 3 个共阳极 LED 动态显示温度的各个数位。
2 . 1 . 3 AD590 测温电路设计
AD590 测温范围为- 55 %~ + 150 ℃ ,满足人们日常生产和生活中的温度范围;电源电
压可在 4V ~ 6V 范围变化,可以承受 44V 正向电压和 20V 反向电压,因而器件反接也不
会被损坏; AD590 产生的电流与绝对温度成正比,具有非常好的线性输出性能,温度每增
加 1 ℃ ,其电流增加 1 μ A 。
为了提高精度,扩大测量范围,在 A / D 转换前还要将信号加以放大并进行零点迁移。当
温度变化时, AD590 会产生电流变化, AD590 的电流通过一个 10k Ω的电阻时。这个电
阻上的压降为 10mV ,即转换成 10mV / K ,为了让 10k Ω电阻精确,可用一个 9k Ω的
电阻与一个 2 k Ω电位器串联,然后通过调节电位器来获得精确的 10k Ω。运算放大器 A1
接成电压跟随器形式,以增加信号的输入阻抗,由运放 A2 减去 2 . 732 做零位调整 ( 即
把绝对温度转成摄氏温度 ) ,最后由运放 A3 反相并放大 5 倍输送给 A / D 转换器。
2 . 1 . 4 ADC 模数转换电路设计
AD590 测温电路输出的电压信号为模拟信号,要进行数码显示和温度控制,还需将此信号转
换成数字信号。为此我们通过 ADC0804 将输入的模拟值转换成数字值,然后再经 AT 89C 51
单片机处理。
ADC0804 是用 CMOS 集成工艺制成的逐次比较型摸数转换芯片,分辨率 8 位,转换时间 100
μ s ,输入电压范围为 0 ~ 5V ,增加某些外部电路后,输入模拟电压可为 5V, ,该芯
片内有输出数据锁存器,当与计算机连接时,转换电路的输出可以直接连接在 CPU 数据总
线上。无须附加逻辑接口电路
2 . 1 . 5 加热器控制电路设计
该部分采用了 Motorola 公司推出的单片集成可控硅驱动器件 MOC3041 ,作为对加热器的
驱动和控制。 MOC3041 芯片是一种集成的带有光耦合的双向可控硅驱动电路,它由输入和
输出两部分组成,其内部集成了发光二极管、双向可控硅和过零触发电路等器件。其工作过
程是:当单片机的 P3 . 1 口输出低电平时, MOC3041 输入部分的发光二极管导通。发出
足够强度的红外光去触发输出部分,即控制可控硅的导通,从而打开加热器;同理,当 P3 .1
口输出为高电平时, MOC3041 输入部分的发光二极管截止,可控硅断开,关闭加热器。
该系统具体电路图如图 2 所示。
2 . 2 系统软件设计与编程
本系统软件包括主程序模块、定时器中断子程序模块、键盘扫描处理子程序模块、十进制数
据调整转换子程序模块、 LED 数码显示子程序模块和延时子程序等模块。
2 . 2 . 1 系统主程序
在主程序中,系统上电自动复位以后首先进行初始化,清除温度缓存区中的数据,然后启动
ADC0804 转换温度传感器输入的电信号。同时检测是否有键按下设定温度,有则跳至键盘扫
描处理子程序,没有则待 ADC 数据转换结束读入累加器 A 。然后进行十进制数据转换调整,
输出给温度显示电路。主程序流程图如图 3 所示。
2 . 2 . 2 键盘扫描处理子程序
当主程序检测到有键按下时,就转到键盘扫描子程序扫描按键值,取得按键值之后,判断是
否按下 * 号键 ( 温度设定/完成键 ) ,不是则回到主程序,是则进入温度设定模式, LED
显示设定的温度值。进入温度设定模式后,再进行键盘扫描,判断按下的键值,如果是 * 号
键,则说明设定完毕,不是则更新设定温度显示缓冲区的数据。具体程序流程图如图 4 所
示。
2 . 2 . 3 定时器中断子程序
定时器 T0 每 50ms 中断一次,比较采集的电热水器温度和设定的温度,低于设定温度时。
使 P3 . 1 输出低电平,电热器加热,高于设定温度时,使 P3 . 1 输出高电平,电热器
停止加热。程序流程图如图 5 所示。
附系统具体汇编语言源程序:
ORG 000011
JMP START
ORG000BH ;定时器中断子程序入口
JMP TIME0
START : MOVSP , #60H
OFF : SETB P3 . 1 :测量温度 >= 设定温度,停止加热
CLR P3 . 2 ;加热状态灯灭
......
......
......
RETLJRN : POP PSW
POP ACC
RETI
DELAY : MOV R7 , #06 ;延时子程序
D1 : MOVR6 , #248
DJNZ R6 , $
DJNZ R7 , D1
RET
TABLE : DB 01 H , 02H , 03H 键盘码 1 , 2 , 3
DB 04H , 05H , 06H 4 , 5 , 6
DB 07H , 08H , 09H 7 , 8 , 9
DB 0AH , 00H , 0BH * , 0 , #
END
3 .结语
本文采用 AT 89C 51 单片机做主控芯片,利用温度传感器 AD590 采集温度。并配上键盘/
显示接口电路以及加热器控制电路等,电路简单、运行稳定、工作精度高,且通过键盘可以
方便地进行温度设定