基于单片机的室内电热水器控制
系统设计
专业名称:
作者姓名:
指导老师:
基于单片机的室内热水器控制系统设计
摘要
电热水器是一种可供浴室、洗手间及厨房使用的家用电器,市场上传统的机械式电热水器控制精度低、可靠性差,随着人们生活质量的提高,人们对电热水器的要求越来越趋向于智能化和数字化。传统的大容量电热水器的加热时间一般都比较长,如果热水器一直开着,则会一直耗能耗电,而定时开关控制器则可有效解决这些问题,使电热水器使用起来更加舒适省电。本设计采用ATS51单片机作为控制器设计了一款智能家用电热水器,通过外围电路来控制热水器的电源,以达到定时开关机的目的,基本实现了智能控制功能。 本系统用一种新型的可编程温度传感器(DS18B20),不需复杂的信号调理电路和A/D转换电路能直接与单片机完成温度数据采集和处理,与传统的热电偶、热电阻或PN结测温电路相比可编程温度传感器更加方便且精度高,可根据不同需要用于各种场合。 关键词:
单片机 智能控制 温度采集 可编程温度传感器
I
基于单片机的室内热水器控制系统设计
Abstract
Electric water heater is used in a bathroom, toilet and kitchen appliances. In the market,the traditional mechanical-type electric water heater is in low control accuracy, reliability, poor, with the improvement of the quality of people's lives, there is growing demand electric water heater tend to be intelligent and digital. Traditional large-capacity electric water heater of the heating time is normally longer than if the water heater has been open, it will have energy consumption, and the timer switch controller can be an effective solution to these problems, so that electric water heaters use energy more comfortable. The design uses a single-chip microcomputer as a controller ATS51 designed for a smart home electric water heater, through the external circuit to control the heater power in order to achieve the purpose of regularly switching machines, the basic realization of the intelligent control functions.
The system use a new type of programmable temperature sensor (DS18B20), without the complexity of the signal conditioning circuitry and A / D converter circuit can be completed directly with the single-chip temperature data acquisition and processing, with the traditional thermocouples, heat or PN junction temperature resistance compared to a programmable temperature sensor circuit is more convenient and high accuracy, according to the different needs for various occasions.
Key words:
Single-chip Microcomputer Intelligent Control
Temperature Acquisition
Programmable temperature sensor
II
基于单片机的室内热水器控制系统设计
目录
摘要 ................................................................................................................. I ABSTRACT ........................................................................................................ II 目录 ............................................................................................................... III 前言 ................................................................................................................ 1 1 硬件元器件介绍 ...................................................................................... 2 1.1、单片机最小系统 ....................................... 2 1.1.1、引脚功能说明 ..................................... 3 1.1.2、功能特性概述 ..................................... 5 1.2、温度传感器DS18B20 .................................. 6 1.2.1、DS18B20介绍 ..................................... 6 1.2.2、DS18B20引脚及原理图 ............................. 7 1.2.3、功能原理解说 ..................................... 7 1.3、LED数码显示管 ..................................... 10 1.3.1、LED数码显示器的接口 ............................ 11 1.3.2、可编程RAM I/O 接口8155芯片介绍 ................ 11 1.3.3、LED显示方法 .................................... 14 1.4、加热控制器MOC3041 ................................. 15 1.4.1、MOC3041引脚图及说明 ........................... 15 1.5、键盘控制电路 ........................................ 16 1.5.1、键盘工作原理 ................................... 16 1.6、电子式水位开关BZ2401 ............................... 17 2 硬件电路设计 ........................................................................................ 18 2.1、芯片处理电路 ........................................ 19 2.2、温度采集电路 ........................................ 19 2.3、温度显示电路 ........................................ 20 2.4、加热控制电路 ........................................ 20 2.5、键盘控制电路 ........................................ 21 2.6、水位模块电路 ........................................ 22 2.7、系统保护电路 ........................................ 23 3 系统软件设计 ........................................................................................ 25
III
基于单片机的室内热水器控制系统设计
3.1、系统设计思路 ........................................ 25 3.2、可编程温度传感器DS18B20的软件设计 ................. 26 3.3、水位中断程序 ........................................ 27 3.4、键盘设定程序 ........................................ 28 3.5、定时子程序 .......................................... 28 3.6、设温子程序流程 ...................................... 29 3.7、LED动态显示子程序 ................................. 30 4 总结 ........................................................................................................ 31 致谢 .............................................................................................................. 32 参考文献 ...................................................................................................... 33 5、附录 ........................................................................................................ 34
IV
基于单片机的室内热水器控制系统设计
前言
热水器是一种可供浴室,洗手间及厨房使用的家用电器。目前市场上热水器主要品种有电热水器、太阳能热水器、燃气热水器.就中国的具体情况而言,由于太阳能热水器的使用受天气原因的,使用范围狭窄;燃气热水器由于以石油、天然气为燃料,而燃料供应量又难以满足人们日益增长的需求,且不利于环境,因此电热水器越来越受到消费者的青睐。
根据中国商业联合会前不久的统计,电热水器的市场份额在销售数量和销售收入两个方面都已经超过了长期以来占优势的燃气热水器。该中心预计,在城市电网更大范围改造和城市住房市场大规模启动的带动下,今后几年我国电热水器市场将呈现强劲增长势头。
目前市场上的电热水器又连续水流式和贮水式,前者虽具有加热速度快和体积小的优点,但需要的功率大,大多数家庭供电线路难以承受。而市场上传统的机械式电热水器控制功能不完善,而且精度低、可靠性差,生活质量的提高使得消费者对电热水器要求越来越趋向于智能化和数字化,因此我们采用ATMEL生产的TS51单片机作为控制中心设计了这款智能家用电热水器。
1
基于单片机的室内热水器控制系统设计
1 硬件元器件介绍
1.1、单片机最小系统
本电路硬件的核心是ATMEL生产的ATS51单片机,它是一种高性能、低功耗的8位单片机,片内带有一个4K字节的FLASH可编程可擦除的存储器,它采用CMOS工艺和ATMEL公司的高密度非易失性存储技术,其引脚和指令系统与MSC-51单片机兼容。它集FLASH程序存储器,既可在线编程(ISP)也可用传统的方法进行编程及通用8位微处理器与单片芯片中,功能强大的微型计算机的ATS51可为许多嵌入式控制应用系统提供高性价比的解决方案。
ATS51的主要性能参数
与MCS-51产品指令系统完全兼容
4KB在线系统编程(ISP)FLASH闪速存储器 1000次擦写周期
4.0—5.5V的工作电压范围
全静态工作模式:0Hz~33Hz 3级程序加密锁
128×8字节内部RAM 32个可编程I/O口线 2个16位定时/计数器 6个中断源
全双工串行UART通道 低功耗空闲和掉电模式
中断可从空闲模式唤醒系统
看门狗(WDT)及双数据指针 掉电标识和快速编程特性
灵活的在线系统编程(ISP字节或页写模式) ATS51引脚图:
2
基于单片机的室内热水器控制系统设计
图1.1 ATS51引脚图
1.1.1、引脚功能说明
Vcc:电源电压 GND:地 P0口:P0口是一组8位漏极开路型双向I/0口,也即地址/数据总线复用口。作为输出口用时,每位能驱动8个TTL 逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在F1ash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
P1口:P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路,对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。Flash编程和程序校验期间,P1接收低8位地址。
端口引脚 第二功能
P1.5 MOSI(用于ISP编程)
3
基于单片机的室内热水器控制系统设计
P1.6 MISO(用于ISP编程) P1.7 SCK (用于ISP编程)
P2口:P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(如执行MOVX @ Ri指令)时,P2口线上的内容(也即特殊功能寄存器(SFR)区中P2寄存器的内容),在整个访问期间不改变。Flash编程或校验时,P2亦接收高位地址和其它控制信号。
P3口:P3口是一组带有内部上拉电阻的8位双向I/0口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1 ”时,它们被内部上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的P3口将用上拉电阻输出电流。
P3口除了作为一般的I / 0口线外,更重要的用途是它的第二功能,如下表所示:
图1.2、P3口第二功能图
在P3口还接收一些用于Flash闪速存储器编程和程序校验控制信号。
RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以 上高电平将使单片机复位。WDT溢出将使该引脚输出高电平,设置SFR AUXR的DISRT0位(地址8EH)可打开或关闭该功能。DISRT0
4
基于单片机的室内热水器控制系统设计
位缺省为RESET输出高电平打开状态。
ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。
PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当ATS51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN效,即输出两个脉冲。当访问外部数据存储器,没有两次有效的PSEN信号。
EA/VPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。
XTALl:振荡器反相放大器及内部时钟发生器的输入端。 XTAL2:振荡器反相放大器的输出端。
1.1.2、功能特性概述
ATS51提供以下标准功能:4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,看门狗(WDT),两个数据指针,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,ATS51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。 电源空闲标志:
电源空闲标志(POF)在特殊功能寄存器SFR中PCON的第4位(PCON.4),电源打开时POF置“1”,它可由软件设置睡眠状态并不为复位所影响。
看门狗定时器(WDT):
WDT是为了解决CPU程序运行时可能进入混乱或死循环而设置,它由一个14bit计数器和看门狗复位SFR(WDTRST)构成。外部复位时,WDT默认为关闭状态,要打开WDT,用户必须按顺序将
5
基于单片机的室内热水器控制系统设计
01EH和0E1H写到WDTRST寄存器(SFR地址为0A6H),当启动了WDT,它会随晶体振荡器在每个机器周期计数,除硬件复位或WDT溢出复位外没有其它方法关闭WDT,当WDT溢出,将使RST引脚输出高电平的复位脉冲。 掉电模式:
在掉电模式下,振荡器停止工作,进入掉电模式的指令是最后一条被执行的指令,片内RAM和特殊功能寄存器的内容在终止掉电模式前被冻结。退出掉电模式的方法是硬件复位或由处于使能状态的外中断INT0和INT1激活。复位后将重新定义全部特殊功能寄存器但不改变RAM中的内容,在Vcc恢复到正常工作电平前,复位应无效,且必须保持一定时间以使振荡器重启动并稳定工作。
1.2、温度传感器DS18B20
本系统用一种新型的可编程温度传感器(DS18B20),不需复杂的信号调理电路和A/D转换电路能直接与单片机完成数据采集和处理,实现方便、精度高,可根据不同需要用于各种场合。
DS18B20 数字温度计提供9 位温度读数,指示器件的温度信息经过单线接口送入DS1820 或从 DS1820送出,因此从处理器到 DS1820仅需连接一条线和地。读、写和完成温度变换所需的电源可以由数据线本身提供,而不需要外部电源。
1.2.1、DS18B20介绍
可编程温度传感器DS18B20的特性:
独特的单线接口方式,DS1820在与微处理器连接时仅需要一条口线即可实现微处理器与DS1820的双向通讯。DS1820支持多点组网功能,多个DS1820可以并联在唯一的三线上,实现多点测温。
DS1820在使用中可用数据线供电,不需要任何外围元件。 温范围-55℃~+125℃,固有测温分辨率0.5℃。 测量结果以9位数字量方式串行传送。 用户可定义的非易失性的温度告警设置。 在1 秒(典型值)内把温度变换为数字。
6
基于单片机的室内热水器控制系统设计
1.2.2、DS18B20引脚及原理图
图1.3、DS18B20引脚与原理图
引脚说明:
1:GND为电源地
2:DQ为数字信号输入/输出端
3:VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
1.2.3、功能原理解说
DS18B20内部结构主要由四部分组成:位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。每一DS1820 包括一个唯一的 位长的ROM 编码,编码组成如下图。
配置寄存器中R1,R0决定温度转换的精度位数:R1R0=‘00’,9位精度,最大转换时间为93.75 ms;R1R0 = ‘01’,10位精度,最大转换时间为187.5 ms;R1R0 = ‘10’,11位精度,最大转换时间为375 ms;R1R0 =’11’,12位精度,最大转换时间为750 ms;未编程时默认为12位精度。器件从单线的通信线取得其电源,在信号线为高电平的时间周期内把能量贮存在内部的电容器中,在单信号线为低电平的时间期
7
基于单片机的室内热水器控制系统设计
内断开此电源,直到信号线变为高电平重新接上寄生(电容)电源为止。作为另一种可供选择的方法,DS1820也可用外部5V 电源供电。
与DS1820 的通信经过一个单线接口。在单线接口情况下,在ROM 操作未定建立之前不能使用存贮器和控制操作。主机必须首先提供五种ROM 操作命令:
1)Read ROM(读ROM,33H) 2)Match ROM(匹配ROM,55H) 3)Skip ROM(跳过ROM,CCH)
4)Search ROM(搜索ROM,F0H)
5)Alarm Search(告警搜索,ECH)
这些命令对每一器件的 位激光ROM 部分进行操作。
一个控制操作命令指示DS18B20 完成温度测量。该测量的结果将放入DS18B20 的高速暂存(便笺式)存贮器(Scratchpad memory), 通过发出读暂存存储器内容的存储器操作命令可以读出此结果。每一温度告警触发器TH 和TL 构成一个字节的EEPROM。 如果不对DS18B20 施加告警搜索命令,这些寄存器可用作通用用户存储器。使用存储器操作命令可以写TH 和TL 。对这些寄存器的读访问通过便笺存储器。所有数据均以最低有效位在前的方式被读写。 DS18B20测温原理如图1.4所示:
图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1 ,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
8
基于单片机的室内热水器控制系统设计
在正常测温情况下,DS18B20的测温分辩率为0.5℃以9位数据格式表示,其中最低有效位(LSB)由比较器进行0.25℃比较,当计数器1中的余值转化成温度后低于0.25℃时,清除温度寄存器的最低位(LSB),当计数器1中的余值转化成温度后高于0.25℃,置位温度寄存器的最低位(LSB)。
图1.4、温度测量原理
DS18B20的核心功能部件是它的数字温度传感器,它的分辨率可配置为9、10、11或12位,出厂默认设置是12位的分辨率,它们对应的温度值分辨率分别为0.5℃、0.25℃、0.125℃和0.0625℃。实测温度与数字输出的对应关系如下图1.5:
图1.5、数字温度传感器输出温度/数据关系
9
基于单片机的室内热水器控制系统设计
在DS18B20完成温度变换之后,温度值与存在TH和TL内的告警触发值相比较。由于这些是8位寄存器,所以9~12位在比较时忽略。TH或TL的最高位直接对应于16位温度寄存器的符号位。如果温度测量的结果高于TH或低于TL,那么器件内告警标志将置位,每次温度测量都会更新此标志。只要告警标志置位,DS18B20就将响应告警搜索命令,这也就允许单线上多个DS18B20 同时进行温度测量,即使某处温度越限,也可以识别正在告警的器件。
1.3、LED数码显示管
在本电路中采用的LED数码显示管优点是工作电压较低、体积小、寿命长、工作可靠性高、响应速度快、亮度高、显示清晰。LED数码管有共阴极和共阳极之分,这里采用的是共阴极接法。单片机与LED数码显示器有以硬件为主和以软件为主的接口方式。这里用软件查表,把机器运行的二-十进制BCD码转化成十进制的代码,并通过显示器显示出来。下图为LED模型图以及其接法。
图1.6、LED原理图及段码
值
10
基于单片机的室内热水器控制系统设计
1.3.1、LED数码显示器的接口
在本设计中采用了以软件为主的接口方法。
这种接口方法是以软件查表代替硬件译码的方式,来实现显示,不但省去了译码器,而且还能显示更多的字符。在电路里,驱动器是必不可少的,因为仅靠接口是提供不了较大的电流供LED显示器使用。下面的电路就是以软件为主的LED显示接口电路。
图1.7、以软件为主的LED显示接口电路
1.3.2、可编程RAM I/O 接口8155芯片介绍
8155是Intel公司生产的可编程多功能接口芯片。它内部有两个可编程的8位并行I/O口、一个6位并行I/O口、一个定时/计数器以及256字节的RAM存储器。8155可以直接跟51系列单片机连接,不需要郑家硬件电路,使单片机应用系统中的最常用的一种接口芯片。 1、8155的结构与引脚 图1.7、LED接口电路
8155的内部结构如图所示:
图1.8、8155芯片引脚及原理图
11
基于单片机的室内热水器控制系统设计
它含有1个256字节的RAM、一个14位的定时/计数器以及3个并行I/O口,其中A口、B口均为8位,C口为6位。A口、B口既可以作为基本I/O口,也可以作为宣统I/O口;C口除了可以作为基本I/O口外,还可以用作A口、B口的应答控制联络信号。此外,8155内部还有一个控制寄存器组,用来存放控制命令字。
8155的引脚介绍:
RST:复位信号输入端,高电平有效。复位后,3个I/O口均为输入方式。
AD0~AD7:三态的地址/数据总线。与单片机的低8位地址/数据总线(P0口)相连。单片机与8155之间的地址、数据、命令与状态信息都是通过这个总线口传送的。
RD:读选通信号,控制对8155的读操作,低电平有效。 WR:写选通信号,控制对8155的写操作,低电平有效。 CE:片选信号线,低电平有效。
IO/M:8155的RAM存储器或I/O口选择线。当IO/M=0时,则选择8155的片内RAM,AD0~AD7上地址为8155中RAM单元的地址(00H~FFH);当IO/M=1时,选择 8155的I/O口,AD0~AD7上的地址为8155 I/O口的地址。
ALE:地址锁存信号。8155内部设有地址锁存器,在ALE的下降沿将单片机P0口输出的低8位地址信息及CE,IO/M的状态都锁存到8155内部锁存器。因此,P0口输出的低8位地址信号不需外接锁存器。
PA0~PA7:8位通用I/O口,其输入、输出的流向可由程序控制。 PB0~PB7:8位通用I/O口,功能同A口。
PC0~PC5:有两个作用,既可作为通用的I/O口,也可作为PA口和PB口的控制信号线,这些可通过程序控制。
TIMER IN:定时/计数器脉冲输入端。 TIMER OUT:定时/计数器输出端。 VCC:+5V电源。
2、8155的地址编码及工作方式
在单片机应用系统中,8155是按外部数据存储器统一编址的,为16位地址,其高8位由片选线CE提供,CE=0,选中该片。当CE=
12
基于单片机的室内热水器控制系统设计
0,IO/M=0时,选中8155片内RAM,这时8155只能作片外RAM使用,其RAM的低8位编址为00H~FFH;当CE=0,IO/M=1时,选中8155的I/O口,其端口地址的低8位由AD7~AD0确定,如表1所示。这时,A、B、C口的口地址低8位分别为01H、02H、03H(设地址无关位为0)。
表1 8155芯片的I/O口地址 AD7~AD0 A7 × × × × × × A6 × × × × × × A5 × × × × × × A4 × × × × × × A3 × × × × × × A2 0 0 0 0 1 1 A1 0 0 1 1 0 0 A0 选择I/O口 命令/状态寄存器 0 A口 1 B口 0 1 C口 0 定时器低8位 1 定时器高6位及方式 8155的I/O工作方式选择是通过对8155内部命令寄存器设定控制字实现的。命令寄存器只能写入,不能读出,命令寄存器的格式如图1.9所示。
在ALT1~ALT4的不同方式下,A口、B口及C口的各位工作方式如下:
ALT1:A口,B口为基本输入/输出,C口为输入方式。 ALT2:A口,B口为基本输入/输出,C口为输出方式。
ALT3:A口为选通输入/输出,B口为基本输入/输出。PC0为AINTR,PC1为ABF,PC2为ASTB,PC3~PC5为输出。
ALT4:A口、B口为选通输入/输出。PC0为AINTR,PC1为ABF,PC2为ASTB,PC3为BINTR,PC4为BBF,PC5为BSTB。
13
基于单片机的室内热水器控制系统设计
图1.9、8155命令字格式图
1.3.3、LED显示方法
通常LED显示器的显示方法有静态显示和动态显示方法。在实际中,为了简化电路、降低成本,大多采用以软件为主的接口方法。为了实现LED显示器的动态扫描显示,除了要给显示器提供显示段码之外,还要对显示器进行位的控制,即通常所说的“段控”和“位控”。“位控”实际上就是对LED显示器的公共端进行控制,位控信号的数目与显示器的位数相同,如下图。
图1.10、LED扫描原理图
14
基于单片机的室内热水器控制系统设计
在进行动态扫描时,一般不知道要显示什么内容,这样也就无从选择被显示字符的显示段码。为此,一般在程序里用查表的方法,来读取要显示的字符段码。
1.4、加热控制器MOC3041
该部分采用了Motorola公司推出的单片集成可控硅驱动器件MOC3041,作为对加热器的驱动和控制。MOC3041芯片是一种集成的带有光耦合的双向可控硅驱动电路,它由输入和输出两部分组成,其内部集成了发光二极管、双向可控硅和过零触发电路等器件。
图1.11、加热原理图
1.4.1、MOC3041引脚图及说明
图1.12、MOC3041引脚图
15
基于单片机的室内热水器控制系统设计
1:此脚为阳极,输入Vcc 2:此脚为阴极 3:NC 4:主终端
5:子端口,此脚不接 6:主终端
1.5、键盘控制电路
用ATS51的并行口P1接4×4矩阵键盘,以P1.0-P1.3作输入线,以P1.4-P1.7作输出线;在数码管上显示每个按键的“0~9”序号以及两个功能键“*”(设温键)、“#”(定时键)。
1.5.1、键盘工作原理
键盘实际上是由排列成矩阵的一系列按键开关组成,它是单片机系统中最常见的地人机联系的一种输入设备。用户通过键盘可以向CPU输入数据、地址和命令。
单片机系统中普遍使用非编码式键盘,这类键盘的使用主要需解决以下几个问题:
键的识别
如何消除键的抖动 键的保护
非编码式键盘的工作原理:
非编码式键盘识别闭合键通常有两种方法:一种称为行扫描法,另一种称为线反转法。这里采用的是线反转法。
以下为线反转法的原理概述。
首先将行线作为输出线,列线作为输入线。先通过行线输出全0信号,读入列线的值。如列线某一键被按下,则该列线值为0。然后将行线和列线的输入输出关系互换(重新设置输入输出口的状态),并将刚才读到的列线值从列线所接的并行口输出,再读入行线的输入值。那么闭合键所在的行线上的值必定为0。这样一个键被按下时,必定
16
基于单片机的室内热水器控制系统设计
得到一对唯一的行值和列值。将行值和列值合并起来就得到一个特征值,用此特征值对应查表就可以得到我们设定的按键值。
为了防止双键或多键同时按下,往往从第0行一直扫描到最后一行,若只发现1个闭合键;若发现两个或两个以上的闭合键,则全部作废。
消除键的抖动
可采用软件方法来消除键抖动问题。软件方法则是采用时间延迟以避开抖动,待信号稳定之后,在进行键扫描。一般情况下,延迟消抖的时间约为10~20ms。
1.6、电子式水位开关BZ2401
应用电子式水位开关(BZ2401)
电子式水位开关原理:
电子式水位开关BZ2401(如右图)通过内置电子探头对水位进行检测,再由芯片对检测到的信号进行处理,当被测液体的液位到达动作点时,
芯片输出高电平或低电平信号,与外
置控制电路配合使用,从而实现对液位的控制。不需浮球,无需干簧管,外部无机械动作,寿命长,性能稳定,一经安装无需调试、维护,即使外表积有污垢,它也表现出色。可配合单片机或小功率的负载直接工作,可根据客户提出的使用条件设计。
电子式水位开关特点如下:
1、特性:耐污、耐倾摇、耐颠簸、抗摔性强、耐盐雾、耐酸碱,外部无可动部件,不怕固体漂浮物的影响等
2、适用范围:清水、污水、酸碱盐水、海水、水处理药剂、河涌水、纺织印染水、各种工业废水等
3、安装方法:同一水位开关,可以横装、竖装、斜装等方式自由安装,灵活方便
4、固定方法:螺纹接口(M20)固定或管夹固定
17
基于单片机的室内热水器控制系统设计
5、任意延长:根据自己的需要把水位开关加接材料任意延长或改变方向,而不会影响其功能,而材料只是普通而廉价的自来水PVC管和内牙接口、弯头,一经安装,无需调试,维护简单。
6、工作电压:5V(可根据客户要求定制)等,功耗小于0.5W、判断有水时绿线输出5V,无水时0V。
2 硬件电路设计
本设计核心器件是采用单片机和单线数字温度传感器,单线器件和单片机的接口只需要一根信号线,所以硬件电路简化得十分简单。通过用数字温度传感器DS18B20采集温度至单片机ATS51进行处理,使系统可以控制对热水器的加热和保温,通过LED来实时显示温度;同时通过水位采集系统来实时监控水箱水位并显示,当水位过低时采取报警灯提示,干烧时警铃报警。本设计可以通过键盘方式来实现人机对话,实现设定温度和定时开机功能。本系统还设有保护功能,包括漏电保护,掉电保护及高温保护。硬件电路主框图见图2.1。
图2.1、系统原理框图
在本系统中,P0口用于七段码LED指示灯显示,P1口用于按
键设计,P2.2用于跟DS18B20通信进行水温测量,P2.4控制电加热管,P2.5控制扬声器用于报警和指示,P3.2用于水位监控,P3.3用于漏电检测。本系统的硬件电路见附录1。
18
基于单片机的室内热水器控制系统设计
2.1、芯片处理电路
单片机的最小系统图:
图2.2、芯片处理电路
2.2、温度采集电路
DS18B20与ATS51的接口电路
图2.3、温度采集原理图
19
基于单片机的室内热水器控制系统设计
温度采集原理图见图2.3。此电路中用到ATS51单片机、温度测试器DS18B20器件。其中,DS18B20与单片机通过一线总线相连接,S51通过通用I/O口P2.2对DS18B20进行控制,读取DS18B20所测得的温度;再用2个字节数码管连接至单片机的通用I/O口进行显示,一个数码管显示采集温度的个位,另一个显示采集温度的十位。显示电路图参见显示电路模块。
2.3、温度显示电路
LED显示接口的电路
LED数码管通过8155驱动芯片与ATS51 的通用I/O口P0口相连接,两个数码管分别显示温度的十位和个位。8155使用线选法来与单片机相连,其RAM编码地址为:P2.1=0,P2.0=0,地址范围为:0000H-00FFH。I/O口编址:P2.1=0,P2.0=1,口地址范围是:0100H-0105H。8155的命令口地址:0100H,A口地址:0101H,B口地址:0102H。LED显示管的接口电路见下图。
2.4、加热控制电路
图2.4、水温显示电路
20
基于单片机的室内热水器控制系统设计
该部分采用了Motorola公司推出的单片集成可控硅驱动器件MOC3041,作为对加热器的驱动和控制。其工作过程是:当单片机的P3.1 口输出低电平时,MOC3041输入部分的发光二极管导通,发出足够强度的红外光去触发输出部分,即控制可控硅的导通,从而打开加热器;同理,当P2.4输出为高电平时,MOC3041输入部分的发光二极管截止,可控硅断开,关闭加热器。MOC3041与S51的接口图如下:
2.5、键盘控制电路
图2.5、加热控制电路
1、键盘按钮电路 本键盘设计为4×4矩阵键盘,有16个按键。
图2.6、键盘按钮图
21
基于单片机的室内热水器控制系统设计
2、键盘的接口电路
用ATS51的并行口P1接4×4矩阵键盘,以P1.0-P1.3作输入线,以P1.4-P1.7作输出线;在数码管上显示每个按键的“0~9”数字号以及两个功能键“a”(设温键)、“b”(定时键)。
其中12个键有定义,其余4个按键无定义。
图1.5.2、键盘按钮电路
图2.7、键盘接口电路
2.6、水位模块电路
电子式水位开关BZ2401接至P3.2口,当水位低于设置的低位水
温时,水位仪产生一个低电平信号,P3.2产生外部中断,来控制加热系统,以防热水器干烧。水位采集电路与单片机的接口电路如下:
22
基于单片机的室内热水器控制系统设计
图2.8、水位检测电路
2.7、系统保护电路
1、漏电保护
漏电检测原理分析部分,其输出信号接入单片机的外部中断,并将其设置为下降沿触发,在中断子程序中,切断电源,进行报警。
漏电检测原理分析将火线和中线同时穿过一个环形磁芯,作为漏电互感器的初级线圈,次级线圈数百匝输出漏电信号。当系统没有漏电时,电源输入线中的火线电流与中线电流完全平衡,次级漏电信号为零。
当系统发生漏电现象时,火线电流与中线电流将失去平衡,其合成电流就是漏电电流,次级漏电信号的大小和漏电程度成正比。
A
B
23
基于单片机的室内热水器控制系统设计
图2.9、漏电检测原理
漏电检测电路设计使用一片324 (四运放)中的两个运放,第一个作放大器,第二个作比较器。为了在5V 电源下正常工作,将比较器的参考电平D 点选定为2.5V 左右,运放的参考电平B 点选定为3V 左右,这可以通过R2=3.9K,R3=1K,R4=5.1K 来实现。漏电互感器输出的信号加在A 和B 两点。当没有漏电时,ABC 三点电位相同(3V 左右),比较器输出高电平。当有漏电现象时,C 点出现放大的漏电信号,信号的负半波将C 点的电位从3V 向下拉低,只要漏电到达一定的程度,就可以使C点的电位在某时刻低于D点的电位,使比较器输出低电平,其下降沿就可以作为单片机的外部中断信号,使系统及时作出反映切断电源避免出现严重后果。
2、断电保护
ATMEL生产的ATS51单片机自身具有掉电保护和看门狗(WDT)技术。在掉电模式下,振荡器停止工作,进入掉电模式的指令是最后一条被执行的指令,片内RAM和特殊功能寄存器的内容在终止掉电模式前被冻结。
24
基于单片机的室内热水器控制系统设计
3 系统软件设计
3.1、系统设计思路
系统使用单片机从温度传感器DS18B20采集水箱水温,通过对水温信号进行处理,单片机用P0口控制LED数码显示管来显示水温,同时把采集的温度与系统设定的水温值进行比较,如果水温低于设定温度就开加热器,高于设定温度,就关闭加热器。
系统还可以通过键盘来设定系统水温值和设定定时开机时间。键盘设定两个功能键,如果按下的是功能键,则进入设定程序来进行相应的设置,完成后返回主程序继续执行。如果按下的不是功能键,则按键是无效的。
系统的保护功能也由单片机处理。漏电保护功能是通过外部中断连接至单片机,但漏电信号产生时,会给单片机的P3.3(外部中断1)输入一个低电平,引起中断,程序转至中断程序,停止加热,并产生报警信号。低水位保护,水位由水位开关检测,当水位低于规定水位值时,水位开关产生一个信号输入至单片机的P3.2(外部中断0),单片机检测到信号就产生中断并进入中断子程序,关闭加热器,产生报警信号。主程序流程图见下图。
25
基于单片机的室内热水器控制系统设计
图3.1、系统程序流程
3.2、可编程温度传感器DS18B20的软件设计
由于DS18B20是1—wire单线器件,它在一根数据线上实现数据的双向传输,这就需要按照DS18B20 的通信协议进行通信,对程序员来说,DS18B20 的数据读取和写入需要用移位的方式来进行。
本设计将在与单片机与DS18B20 之间进行应答来采集温度参数,单片机先将与DS18B20 的连线电平拉低500ms以上,将DS18B20 复位,在进行操作。先向DS18B20 发送指令,跳过ROM后发出转换温度的指令,然后初始化后读取温度,将读到的温度在2KB的数码管上显示出来。程序处理的大致流程:
1、初始化 3、内存操作命令 2、ROM操作命令 4、数据处理 水温采集程序流程:
26
基于单片机的室内热水器控制系统设计
图3.2、DS18B20程序
3.3、水位中断程序
低水位保护,水位由水位开关检测,当水位低于规定水位值时,水位开关产生一个信号输入至单片机的P3.2(外部中断0),单片机检测到信号就产生中断并进入中断子程序,关闭加热器,产生报警信号。
图3.3、水位中断程序
27
基于单片机的室内热水器控制系统设计
3.4、键盘设定程序
主程序扫描是否有按键按下,有则判断是定时还是设温,再进入相应的子程序,进行设置。无则返回主程序。
图3.4、键盘扫描程序
3.5、定时子程序
定时程序从键盘输入,程序可以定时最多24小时,输入定时时间,检测输入是否合法,合法则判断用户确认否,确认则返回。
28
基于单片机的室内热水器控制系统设计
图3.5、定时程序
3.6、设温子程序流程
设温程序从键盘输入,程序可以设定最大温度99度,输入设定温度,检测输入是否合法,合法则判断用户确认否,确认则返回。
图3.6、设温程序
29
基于单片机的室内热水器控制系统设计
3.7、LED动态显示子程序
程序用的是线反转法,用动态扫描显示方法。通过取段码,查表再输出显示段码至段码口,再通过控制位控端口来控制数据动态显示。再取下一显示段码,位控移位显示,判断位控是否到最高位?否继续控制显示,是则返回。
图3.7、LED显示程序
系统源程序参见附录
30
基于单片机的室内热水器控制系统设计
4 总结
通过本次热水器控制系统的毕业设计,我重新学会了很多的知识。在历时两个月多的时间里,我把大学四年所学的东西应用于自己的新作品。可以做出一个简单的嵌入式控制系统,我感到非常兴奋。
在此次设计中我曾遇到非常多的困难,通过在老师的帮助下,我查阅资料,找到了很多有帮助的文献。通过自己对基础知识系统的复习,从而设计出相应的硬件系统。本设计以单片机为核心,通过外围扩展电路来设计基于单片机的热水器控制系统,在反复参阅《单片微型计算机原理与应用》的情况下,充分掌握了单片机的工作原理,以及通过接口电路来扩充单片机系统的功能。本次设计还涉及到传感器的工作原理。本设计采用了一种新型数字温度传感器,不仅简化了硬件电路,还省去复杂的数模转换计算。新型的数字温度传感器能直接把采集的温度转化为数字信号,然后交于单片机处理。本智能热水器控制系统的实现得益于强大的单片机中断系统的应用。通过外部中断来实现了对水位监控和漏电保护,通过定时中断实现了系统时钟和定时启动加热的功能。通过对单片机I/O口的充分利用,我还实现了水温实时显示,键盘控制,以及报警系统等。当然还可以通过其他端口实现其他的功能。
由于本人时间有限,水平有限设计出来的东西不算完善。不过本设计在熊斌老师的精心指导下,完成了核心部分的设计。在此过程中也感觉到了自己的很多不足。在老师精心诚恳的帮助下,顺利完成了此次毕业设计。
31
基于单片机的室内热水器控制系统设计
致谢
首先感谢父母多年来对我的培养、关心和支持!
感谢自动化工程系的所有老师,正是他们的精心培育让我学会了很多有趣的知识。感谢陪我度过四年美好时光所有同学,正是他们使我的大学生活快乐而又充实!
本次毕业设计是在XX老师的悉心指导下完成的,X老师不仅治学严谨,而且待人诚恳、诲人不倦,他对科学研究的认真态度是我永远学习的榜样。衷心感谢X老师整个毕业设计过程中对我的关心和指导!
感谢本文所列参考文献的所有作者们! 感谢所有关心、支持和帮助过其他朋友!
32
基于单片机的室内热水器控制系统设计
参考文献
[1] 张毅坤.单片微型计算机原理及应用[M].西安电子科技大学出版社,2006
[2] 王为青.51单片机应用开发案例精选[M].人民邮电出版社,2007 [3] 王仲生.智能检测与控制技术[M].西北工业大学出版社,2002 [4] 朱传琴.数字电路技术[M].中国电力出版社,2006
[5] 李继灿.微型计算机系统与接口[M].清华大学出版社,2006 [6] 陈杰、黄鸿.传感器与检测技术[M].高等教育出版社,2006
[7] 戴佳.51单片机C语言应用程序设计[M].电子工业出版社,2007 [8] 刘庆.中文AUTOCAD 2004机械制图[M].电子科技大学出版社,2004 [9] Kip R.Irvine.Intel汇编语言程序设计[M].电子工业出版社,2007
[10] 黄迪明.计算机应用基础[M].西安交通大学出版社,2005 [11] 谭浩强.C程序设计[M].清华大学出版社,2005
[12] 何立民.单片机应用技术选编[M].北京航空航天大学出版社,1997
[13] 杨素行.模拟电子技术基础简明教程[M].高等教育出版社,2005 [14] 燕庆明.电路分析教程[M].高等教育出版社,2005
[15] 李久胜.电气自动化专业英语[M].哈尔滨工业大学出版社,2005 [16] 涂时亮, 张友德. 单片微机MCS-51用户手册[M]. 复旦大学出版社, 1990.
[17] 梅晓榕.自动控制原理[M].科学出版社,2007 [18] ATS51中文资料手册[R] [19] ds18b20中文资料手册[R] [20] MOC3041英文资料手册[R]
33
基于单片机的室内热水器控制系统设计
5、附录
1、系统硬件电路图
34
基于单片机的室内热水器控制系统设计
2、源程序代码
;------------------------------------------------------------- ;主程序,用来反复读温度和显示温度
;------------------------------------------------------------- ORG 0000H ;主程序起始地址 LJMP MAIN
ORG 0003H ;外部中断0地址,用于水位保护 LJMP INT0
ORG 000BH ;定时器T0中断,用于定时开机 LJMP TIME0
ORG 001BH ;定时器T1中断,用于系统时钟 LJMP TIME1
ORG 0013H ;外部中断1地址,用于漏电保护 LJMP INT1
;--------------------------------------------------------------- ;单片机内存分配申明
;--------------------------------------------------------------- TEMP EQU 30H ;系统保留温度
TEMPER_L EQU 29H ;用于保存读出温度的低8位 TEMPER_H EQU 28H ;用于保存读出温度的高8位 REAL_TEMP EQU 31H ;检测得的实际温度保存地址 FLAG1 EQU 38H ;是否检测到DS18B20标志位 A_BIT EQU 20H ;数码管个位数存放内存位置 B_BIT EQU 21H ;数码管十位数存放内存位置 MIAO EUQ 61H ;系统时钟秒存储地址 FEN EUQ 62H ;分 SHI EUQ 63H ;小时
TIME EUQ 22H ;定时时间存储地址
;进行温度显示,显示范围00℃到99℃,显示精度1℃。
;因为12位转化时每一位的精度为0.0625℃,不要求显示小数所以 ;可以抛弃29H 的低4位。
;将28H中的低4位移入29H中的高4位,这样获得一个新字节,
35
基于单片机的室内热水器控制系统设计
;这个字节就是实际测量获得的温度 MAIN: MOV 60H,#00H MOV 61H,#00H MOV 62H,#00H MOV 63H,#00H MOV TEMP,#63H ;初始化8155芯片
SETB P2.0 ;设定8155作为I/O输出 CLR P2.1
MOV DPTR,#0100H ;指向8155命令口地址 MOV A,#03H ;取命令字 MOVX @DPTR,A ;写命令字 ;初始化中断系统 LCALL INT0_ALLOW LCALL INT1_ALLOW LCALL T0_ALLOW LCALL T1_ALLOW LOOP:
LCALL GET_TEMPER ;调用读温度子程序 MOV A,29H ;将温度低8位送进A MOV R0,#28H ;将温度高8位的地址送入R0
XCHD A,@R0 ;将28H中的低4位与29H的低4位交换 SWAP A ;将A中的低4位与高4位交换 MOV 31H,A ;将实际温度保存在31H中 LCALL CONVERT_TEMPER ;温度转换成十进制 LCALL DISPLAY ;调用数码管显示子程序 LCALL KEYEXE ;检测是否有键盘控制输入? LCALL HEAT_CONTROL ;加热控制 LJMP LOOP
;--------------------------------------------------------------- ;加热控制子程序
36
基于单片机的室内热水器控制系统设计
;-------------------------------------------------------------- HEAT_CONTROL: ;加热控制 MOV A,REAL_TEMP
CJNE A,TEMP,HEAT ;比较采集的温度与设定温度 HEAT:
JNC UNHEAT ;温度大于设定温度,关闭加热 SETB P2.4 SJMP FH
UNHEAT: CLR P2.4 FH: RET
;外部中断0初始化 INT0_ALLOW:
SETB EA SETB EX0 CLR PX0 SETB IT0 RET
;外部中断1初始化 INT1_ALLOW:
SETB EA SETB EX1 CLR PX1 SETB IT1 RET
;定时器T0中断初始化TO_ALLOW:
MOV TMOD,#01H ;T0MOV TH0,#3CH ;MOV TL0,#B0H
SETB EA ;CPU
;温度小于设定温度,开启加热
工作于方式1 设置计数初值,延时50ms 开中断
37
基于单片机的室内热水器控制系统设计
SETB ET0 ;允许T0中断 SETB PT0
;优先中断
SETB TR0 ;启动T0中断
MOV R7,#200 ;循环200次,可延时10s MOV R6,#36 ;循环36次,延时360s MOV A,TEMP ;输入设定时间 MOV B,#10 MUL AB MOV R5,A RET
;定时器T1中断初始化 T1_ALLOW:
MOV TMOD,#10H ; T1工作于方式1 MOV TH1,#3CH ;设置计数初值,延时50ms MOV TL1,#B0H
SETB EA ;CPU开中断 SETB ET1 ;允许T1中断 SETB PT1 RET
;--------------------------------------------------------------- ; 温度检测程序
;功能:从温度传感器DS18B20读写,然后将接收到的数据 ;直接显示到两个数码管上
;-------------------------------------------------------------- ;这是关于DS18B20的读写程序,数据脚P2.2,晶振11.0592MHz ;温度传感器DS18B20汇编程序,采用器件默认的12位转化,
;最大转化时间750μs,可以将检测到的温度值直接显示到两个数码管上 ;显示温度 00 到 99度
;--------------------------------------------------------------- ;这是DS18B20复位初始化子程序
;---------------------------------------------------------------
38
;优先中断
SETB TR1 ;启动T1中断
基于单片机的室内热水器控制系统设计
INIT_1820:
SETB P2.2 ;拉高2.2管脚的电平 NOP
CLR P2.2 ;拉低2.2管脚的电平 ;主机发出延时537μs的复位低脉冲 MOV R1,#3 TSR1:
MOV RO,#107
DJNZ R0,$ DJNZ R1,TSR1 SETB P2.2 ;NOP NOP NOP
MOV R0,#25H TSR2:
JNB P2.2,TSR3 ;DJNZ R0,TSR2 ;LJMP TSR4 TSR3:
SETB FLAG1 ;LJMP TSR5 TSR4:
CLR FLAG1 ;LJMP TSR7 ; TSR5:
MOV R0,#117 TSR6:
DJNZ R0,TSR6 ;TSR7:
SETB P2.2 ;RET
;当R0不等于0时,原地等待
;当R1不等于0时,返回TSR1,用于延时 然后拉高数据线,将DS18B20中的数据清0等待DS18B20回应,有回应则跳到TSR3 如果等没到37次,则继续等待回应 ;跳转到TSR4 置位标志位,表示DS18B20存在 ;跳转到TSR5 清标志位,表示DS18B20不存在 跳转到TSR7 时序要求延时一段时间 拉高数据线 39
基于单片机的室内热水器控制系统设计
;-------------------------------------------------------------- ;读温子程序
;-------------------------------------------------------------- ;读出转换后的温度值 GET_TEMPER:
SETB P2.2 ;拉高数据线 LCALL INIT_1820 ;先复位DS18B20
JB FLAG1,TSS2 ;如果检测到DS18B20,则跳转到TSS2 CLR P2.2 RET TSS2:
MOV A,#0CCH ;跳过ROM匹配 LCALL WRITE_1820
;调用写DS18B20指令,将累加器中的指令写入DS18B20 MOV A,#44H ;发出温度转换指令 LCALL WRITE_1820
;调用写DS18B20指令,将累加器中的指令写入DS18B20
;这里通过调用显示子程序实现延时一段时间,等待A/D转换结束,12位的话要750μs LCALL DISPLAY
LCALL INIT_1820 ;准备度温度前先复位 MOV A,#0CCH ;跳过ROM匹配 LCALL WRITE_1820
MOV A,#0BEH ;发出读温度命令 LCALL WRITE_1820
LCALL READ_18200 ;将读出的温度数据保存到35H/36H RET
;-------------------------------------------------------------- ;写DS18B20的子程序
;-------------------------------------------------------------- WRITE_1820:
MOV R2,#8 ;一共8位数据
40
基于单片机的室内热水器控制系统设计
CLR C ;清除进位标志 WR1:
CLR P2.2 ;拉低数据线60μs以上后,将数据移位写入DS18B20 MOV R3,#5
DJNZ R3,$ ;等待60μs以上,完成写初始化,然后写入数据 RRC A ;将累加器中的数据带进位右移
MOV P2.2,C ;将进位位写入DS18B20后,等待15μs以上 MOV R3,#21
DJNZ R3,$ ;等待15μs以上,完成1bit的写操作 SETB P2.2 ;拉高数据线,初始化写 NOP
DJNZ R2,WR1 ;如果一个字节没写完,继续写 SETB P2.2 ;拉高数据线 RET
;-------------------------------------------------------------- ;读DS18B20的子程序(有具体的时序要求)
;-------------------------------------------------------------- READ_18200:
;读DS18B20的程序,从DS18B20中读出两个字节的温度数据 MOV R4,#2 ;将温度高位和低位从DS18B20中读出
MOV R1,#29H ;低位存入29H(TEMPER_L),高位存入28H(TEMPER_H) RE00:
MOV R2,#8 ;数据一共有8位 RE01:
CLR C ;清除进位标志
SETB P2.2 ;拉高数据线后,等待1μs初始化读 NOP NOP
CLR P2.2 ;拉低数据线后,保持1μs以上使读初始化有效 NOP NOP NOP
41
基于单片机的室内热水器控制系统设计
SETB P2.2 ;拉高数据线后,开始读操作 MOV R3,#8 RE10:
DJNZ R3,RE10 ;等待15μs后,写入数据正确 MOV C,P2.2 ;将数据读入累加器 MOV R3,#21 RE20:
DJNZ R3,RE20 ;等待60μs以上后,进行下一次读操作 RRC A ;将累加器带进位右移
DJNZ R2,RE01 ;如果没读满一个字节,继续读取数据 MOV @R1,A ;将累加器中的数据存储进地址29H中 DEC R1
DJNZ R4,RE00 ;继续读取高位 RET
;--------------------------------------------------------------- ;动态显示温度子程序
;--------------------------------------------------------------- DISPLAY:
MOV R0,#B_BIT ;指向显示缓冲区 MOV R3,#01H ;从左边第一位开始显示 MOV A,#00H
MOV R1,#0102H ;指向位控口 MOVX @R1,A ;瞬时关闭显示 LD1:
MOV A,@R0 ;取出显示数据 MOV DPTR,#DSEG ;指向显示段码表首地址 MOVC A,@A+DPTR ;查显示段码表 MOV R1,#0101H ;指向段码口 MOVX @R1,A ;输出显示段码 MOV R1,#0102H ;指向位控口 MOV A,R3 ;取位控字 MOVX @R1,A ;输出位控字
42
基于单片机的室内热水器控制系统设计
LCALL D1MS ;延时1ms DEC R0
JB A.1,LD2 ;已到最高位则返回 RL A ;不到,向显示器高位移位 MOV R3,A ;保存位控字 SJMP LD1 ;循环 LD2: RET
;--------------------------------------------------------------- ;延时1ms
;-------------------------------------------------------------- D1MS: MOV R7,#80 DJNZ R7,$ RET
;七段数码显示管0~9数字和A,B的共阴显示代码 DSEG:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH
;--------------------------------------------------------------- ;将温度转换成十进制
;--------------------------------------------------------------- CONVERT_TEMPER: MOV A,29H MOV B,#16
MUL AB ;将十六进制数转换成十进制数 MOV 3AH,A
ORL A,#0F0H ;取出温度的十位数存入B_BIT MOV B_BIT,A
ORL 3AH,#0FH ;取出温度的个位数存入A_BIT MOV A_BIT,3AH RET
43
基于单片机的室内热水器控制系统设计
;--------------------------------------------------------------- ;水位中断程序
;--------------------------------------------------------------- INT0:
CLR P2.4 ;水位过低,关闭加热 SETB P2.5 ;发出报警信号 RETI
;--------------------------------------------------------------- ;漏电中断
;--------------------------------------------------------------- INT1:
CLR P2.4 ;系统漏电,关闭加热 SETB P2.5 ;发出报警信号 RETI
;--------------------------------------------------------------- ;定时器T0中断,实现定时开机
;--------------------------------------------------------------- TIME0:
DJNZ R7,KIL0 KIL0:
DJNZ R6,KIL1 KIL1:
DJNZ R5,KIL2 ;定时到就触发中断 MOV R6,#200 MOV R7,#36
LJMP MAIN ;跳回主程序 KIL2:
MOV TH0,#3CH ;重新设置计数器初值 MOV TL0,#B0H RETI
;--------------------------------------------------------------- ; 定时器T1中断,实现系统时钟
44
基于单片机的室内热水器控制系统设计
;--------------------------------------------------------------- TIME1:
PUSH ACC; PUSH PSW; MOV TL0,#0B0H; MOV TH0,#3CH; INC 60H; MOV A,60H; CJNE A,#20,RETI1; MOV 60H,#00H; MOV A,61H; INC A; MOV 61H,A; CJNE A,#3CH,RETI1; MOV 61H,#00H; MOV A,62H; ADD A,#01H; MOV 62H,A; CJNE A,#3CH,RETI1; MOV 62H,#00H; MOV A,63H; ADD A,#01H; MOV 63H,A; CJNE A,#18H,RETI1; MOV 63H,#00H; RETI1:
POP PSW; POP ACC; RETI;
45
基于单片机的室内热水器控制系统设计
;------------------------------------------------------- ;时钟显示子程序
;-------------------------------------------------------
DISP:
MOV A,62H MOV B,#10 DIV AB MOV 43H,A MOV 42H,B
MOV A,63H MOV B,#10 DIV AB MOV 45H,A MOV 44H,B
MOV R0,#42H ;MOV R3,#01H ;MOV A,#00H
MOV R1,#0102H ;MOVX @R1,A ;DISP1:
MOV A,@R0 ;MOV DPTR,#DSEG ;MOVC A,@A+DPTR ;MOV R1,#0101H ;MOVX @R1,A ;MOV R1,#0102H ;MOV A,R3 ;MOVX @R1,A ;LCALL D1MS ;
指向显示缓冲区 从右边第一位开始显示 指向位控口 瞬时关闭显示 取出显示数据 指向显示段码表首地址 查显示段码表 指向段码口 输出显示段码 指向位控口 取位控字 输出位控字 延时1ms
46
基于单片机的室内热水器控制系统设计
INC R0
JB A.3,DISP2 ;已到最高位则返回 RL A ;不到,向显示器高位移位 MOV R3,A ;保存位控字 SJMP DISP1 ;循环 DISP2: RET
;--------------------------------------------------------------- ;键盘控制子程序
;--------------------------------------------------------------- ;实现设定温度功能和定时开机功能 ;思路:判断按键是否为功能键,如果是则转
;若为设温键,则转入设温子程序;若为定时,则转入定时子程序 KEYEXE:
LCALL KEY_PROG ;扫描是否有键盘按下? CJNE A,#FFH,SETUP AJMP HEAT_CONTROL
SETUP: ;判断是否为功能键?
CJNE A,#OAH,TIME ;是否为设温?是则转入设温子程序 LCALL SET_TEMP TIME:
CJNE A,#0BH,BACK ;是否为定时?是则转入定时子程序 LCALL SET_TIME BACK: RET
;--------------------------------------------------------------- ;键盘查询子程序
;--------------------------------------------------------------- KEY_PROG:
LCALL KS2: ;检查有闭合键否?
47
基于单片机的室内热水器控制系统设计
JNZ MK1 ;A非0,有键闭合则转 LJMP MK7 ;无键闭合则返回 MK1:
LCALL DELAY ;有键闭合,则延时12ms LCALL DELAY ;消抖
LCALL KS2 ;再次检查有键闭合否? JNZ MK2 ;LJMP MK7 ;MK2:
MOV P1,#0F0H ;MOV A,P1 ;ANL A,#0F0H ;CJNE A,#0F0H,MK3 ;LJMP MK7 ;MK3:
MOV R2,A ;ORL A,#0FH ;MOV P1,A ;MOV A,P1 ;ANL A,#0FH ;ADD A,R2 ;MOV R2,A ;MOV R3,#00H ;R3MOV DPTR,#TABLE ;MOV R4,#10H ;MK4: CLR A
MOVC A,@A+DPTR ;MOV 70H,A ;MOV A,R2 ;CJNE A,70H,MK6 ;MK5:
若有键闭合则转 若无键闭合则返回 发出行线全扫描信号,列线全为“1”读入列状态 保留高4位 有键按下则跳转 若无键闭合则返回 保存列值
列线信号保留,行线全“1” 从列线输出 读入P1口状态 保留行线值
将行线值与列线值合并得到键特征值特征值暂存于R2中 存键值(先送初始值0) 指向键值表首址 查找次数送R4 表中值送入A 暂存于70H单元 键特征值送入A 未查到则转 48
基于单片机的室内热水器控制系统设计
LCALL DELAY
LCALL KS2 ;还有键盘闭合否? JNZ MK5 ;若键未释放,则等待 LCALL DELAY ;若键已释放,则延时12ms LCALL DELAY ;消抖
MOV A,R3 ;将键值存入A中 RET ;返回主程序 MK6:
INC R3 ;键值加1 INC DPTR ;表地址加1 DJNE R4,MK4 ;未查到,反复查找 MK7:
MOV A,#0FFH ;闭合键标志存入A RET KS2:
MOV P1,#0F0H ;闭合键判断子程序
MOV A,P1 ;发出全扫描信号,读入列线值 ANL A,#0F0H ;保留列线值
CPL A ;取反,无键按下为全0 RET ;返回 TABLE:
DB E7H,EBH,EDH,EEH,D7H,DBH,DDH,DEH DB B7H,BBH,BDH,BEH,77H,7BH,7DH,7EH
;--------------------------------------------------------------- ;延时12 ms
;--------------------------------------------------------------- DELAY: MOV R5,#0AH DELAY0:
DJNZ R5,DELAY0 MOV R6,#6 DJNZ R6,DELAY
49
基于单片机的室内热水器控制系统设计
RET
;--------------------------------------------------------------- ;设温子程序
;--------------------------------------------------------------- SET_TEMP:
LCALL KEY_PROG ;输入设定温度值,小于99℃ MOV B_BIT,A LCALL KEY_PROG MOV A_BIT,A LCALL DISPLAY SWAP A ORL A,A_BIT
CJNE A,#99,HOT ;判断输入值是否合法? HOT:
JNC SET_TEMP
MOV TEMP,A ;将设定温度值保存
QUEREN: ;确认键(即设温键)按下否? LCALL KEY_PROG CJNE A,#0BH,QUEREN
RET ;确认则返回
;--------------------------------------------------------------- ;设定时间子程序,定时时间小于24小时
;--------------------------------------------------------------- SET_TIME:
LCALL DISP ;显示系统时间
LCALL KEY_PROG ;输入设定时间,小于24小时 MOV B_BIT,A LCALL KEY_PROG
CJNE A,#0AH,NEXT ;判断是否按下确认键(即定时键)? RET NEXT:
50
;显示设定温度
MOV A,B_BIT ;转换温度,判断温度是否合法
基于单片机的室内热水器控制系统设计
MOV A_BIT,A
LCALL DISPLAY ;显示设定时间 MOV A,B_BIT SWAP A ORL A,A_BIT
CJNE A,#24,HOOT ;判断设定时间合法否? HOOT:
JNC SET_TIME
MOV TIME,A ;EXIT:
LCALL KEY_PROG ; CJNE A,#0AH,EXIT RET ;返回 END
将设定时间保存 判断是否按下确认键(即定时键)?51
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.com 版权所有 湘ICP备2023021991号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务