基于单片机设计的简易热水器控制系统

更新时间:2024-05-10 14:02:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

届 别 ..

学 号

毕业设计

基于单片机设计的简易热水器控制系统

姓 名

系 别、 专 业 导 师 姓 名、职 称 完 成 时 间

目录

1 引言 ................................................................................................................................................. 1 2 设计内容及性能指标 ..................................................................................................................... 1 3 系统方案比较、设计与论证 ......................................................................................................... 2

3.1 主控制器模块 ..................................................................................................................... 2 3.2 温度测量 ............................................................................................................................. 2 3.3 设置温度 ............................................................................................................................. 3 3.4 显示模块 ............................................................................................................................. 4 3.5 电源选取 ............................................................................................................................. 4 4 系统器件选择 ................................................................................................................................. 5 5 硬件实现及单元电路设计 ............................................................................................................... 6

5.1 主控制模块 ......................................................................................................................... 6 5.2 显示模块电路 ..................................................................................................................... 6 5.3 数码管显示驱动电路 ......................................................................................................... 7 5.4 温度传感器(DS18B20)电路 ............................................................................................... 7

5.4.1 DS18B20基本介绍 .................................................................................................. 7 5.4.2 DS18B20控制方法 .................................................................................................. 8 5.4.3 DS18B20供电方式 .................................................................................................. 8 5.5 继电器加热控制电路 ......................................................................................................... 9 6 系统软件设计 ............................................................................................................................... 10

6.1 程序结构分析 ................................................................................................................... 10 6.2 系统程序流图 ................................................................................................................... 10

6.2.1 DS18B20初始化程序流程图 ................................................................................ 12 6.2.2 读温度子程序流程图 ........................................................................................... 12 6.3 程序编写与调试 ............................................................................................................... 13

6.6.1 Keil编译器软件简介 .......................................................................................... 13 6.3.2 使用Keil软件建立一个工程 ............................................................................. 13 6.3.3 使用Debug进行调试 ........................................................................................... 17

7 系统的安装与调试 ....................................................................................................................... 19

7.1 安装步骤 ............................................................................................................................. 19 7.2 电路的调试 ....................................................................................................................... 19 7.3 本章小结 ........................................................................................................................... 19 结论 ..................................................................................................................................................... 19 参考文献 ............................................................................................................................................. 20 附录1 整体电路原理图 .................................................................................................................. 21 附录2 部分源程序 ........................................................................................................................ 22

I

摘要

随着社会的发展,人类科技的进步,各行各业都在使自己的产品智能化、数字化,因老式的热水器使用煤气或天然气对水进行燃烧加热,用手动的方式调节温度,不仅不能够精确的确定使用者需要的水温,而且还存在一定的危险性。 电热水器是一种可供浴室、洗手间及厨房使用的家用电器,随着人们生活质量的提高,现代的家用电热水器已经摒弃了以前的做法,而采用一种更加精确、安全的实施方案。

C语言对单片机编程有诸多优点,例如:便于移植、句法检查时错误少、坚固性好、头文件种类诸多,能够方便快捷使用各种函数等。本文采用STC89C52单片机作为控制器,使用C语言编写程序,设计了一款智能家用电热水器。使用按键键盘设定温度,温度可以精确到0.1摄氏度,并使用LED灯显示,能够精确提供用户所需温度的温水。采用DS18B20采集温度,使用LED灯显示,精确的显示出采集的水温。当所需温度高于当前采集的水温时,使用继电器控制外接加热源,当所需温度低于当前采集的水温时,继电器断开不加热。当所需温度高于采集温度时,继电器吸合开始加热。基本实现了智能控制功能。

关键字:18B20、STC89C52、热水器

II

ABSTRACT

With the development of society, the progress of human science and technology, in all walks of life to make their products intelligent, digital, because the water heater using old-fashioned gas or natural gas is burned to heat water, adjust the temperature manually, not only can the user needs to be accurately determined, and there is some risk. Electric water heater is a kind of household appliances for bathroom and kitchen, restroom use, along with the improvement of people's living quality, household electric water heater modern have rejected the previous practice, and by using a more accurate, safe implementation plan. The C language has many advantages, such as: microcomputer programming for transplantation, syntax check error less, robust, head file type many, can be convenient to use a variety of functions. This paper adopts STC89C52 MCU as the controller, the use of C programming language, designed a intelligent home electric water heater. Use the keyboard to set the temperature, the temperature can be accurate to 0.1 degrees Celsius, and the use of LED lights display, can accurately provide the required temperature of warm water. The DS18B20 collection temperature, the use of LED lights display, display the temperature precise acquisition. When the required temperature is higher than the acquisition of temperature, use the relay to control the external heating source, when the required temperature is lower than the current collecting water, relay off without heating. When the required temperature is higher than the acquisition of temperature, relay starts heating. The basic realization of the intelligent control function.

Key words: 18B20、STC89C52、热水器

III

1 引言

随着人们生活水平的提高,热水器在人们的生活中扮演着越来越重要的角色,越来越受到人们的青睐。由于燃气热水器易受水压限制,而且安全性较差。每年使用燃气热水器造成的爆炸、中毒等事故也屡有所闻。消费者对燃气热水器怀有一定的惧怕感,所以燃气热水器渐渐淡出市场。而智能电热水器越来越受到人们的认可。

电热水器在中国的历史已经有10多年了,期间也经历了数次起落的过程,在上个世纪的最后几年,随着国外品牌的进入和国内一些大家电厂的目光转向电热水器,智能储水式电热水器能适应任何天气变化,普通家庭可直接安装使用,长时间通电可以大流量供热水。使用时不产生废气,既安全又卫生。目前市场上销售的电热水器多数还带有防触电装置。干净卫生,不必分室安装,调温方便。在电热水器发展到如今的水平,已经可以基本满足生产生活中的需求。但为求精益求精,当今学者将目光放在了更好的调节控制水温水位上,尽可能得使其更智能化,能够做到更加的安全稳定舒适。我国在对电热水器水温水位系统的研究已取得很大的成就,并在不断地完善之中。

智能电热水器水温水位检测器是采用数字化测量技术,把连续的模拟量(电信号)转换成不连续、离散的数字形式并加以显示的仪表仪器。传统的电热水器水温水位检测器功能单一、精度低,不能满足数字化时代的需求,然而采用单片机的电热水器水温水位检测器功能多样化、精度高、抗干扰能力强。本文所研究的电热水器水温水位检测器是以STC89C52单片机作为主控制元件来能实现热水器里的水温显示在数码管。更进一步的采用继电器实现自动控制加热装置,是单片机应用在工业、农业、国防、医药、卫生等各行各业中的一个典型而普通的例子,随着科学技术的进一步发展,人们生活水平的不断提高,智能电热水器越来越受人们的青睐,同时节安全、节能、易操作也是不可缺少的。在本设计中,研究智能电热水器的水温检测器非常有意义。

2 设计内容及性能指标

本设计采用51单片机+DS18B20温度传感器+数码管显示+继电器+功能按键组成。DS18B20温度传感器检测水温并将水温信息转换成电信号传送给单片机,单片机将得到的数据进行处理、显示与控制。上电后数码管显示当前的水温温度,通过按键可设置水温值,当检测到的水温低于设置的水温值时,继电器吸合接通外部加热装置,使水温达到设定水温值。当水温值超过设定水温值时,继电器断开,停止加热。温度检测精确到0.1度。并具有掉电保存功能,数据保存在单片

1

5.3 数码管显示驱动电路

三极管8550来驱动4位数码管,不仅简单,而且价格便宜。

图6 驱动电路

5.4 温度传感器(DS18B20)电路

5.4.1 DS18B20基本介绍

DS18B20是美国DALLAS半导体公司推出的第一片支持“一线总线”接口的温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,可直接将温度转化成串行数字信号处理器处理。

DS18B20进行精确的温度转换,I/O线必须保证在温度转换期间提供足够的能量,由于每个DS18B20在温度转换期间工作电流达到1mA,当几个温度传感器挂在同一根I/O线上进行多点测温时,只靠4.7K上拉电阻就无法提供足够的能量,会造成无法转换温度或温度误差极大。

因此,下图电路只适应于单一温度传感器测温情况下使用,不适宜采用电池供电系统中。并且工作电源VCC必须保证在5V,当电源电压下降时,寄生电源能够汲取的能量也降低,会使温度误差变大。

7

图7 温度传感器电路引脚图

5.4.2 DS18B20控制方法 DS18B20有六条控制命令:

温度转换 44H 启动DS18B20进行温度转换 读暂存器 BEH 读暂存器9个字节内容

写暂存器 4EH 将数据写入暂存器的TH、TL字节 复制暂存器 48H 把暂存器的TH、TL字节写到E2RAM中

重新调E2RAM B8H 把E2RAM中的TH、TL字节写到暂存器TH、TL字节 读电源供电方式 B4H 启动DS18B20发送电源供电方式的信号给主CPU

5.4.3 DS18B20供电方式

DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图3.1所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个三极管来完成对总线的上拉。本设计采用电源供电方式, P2.2口接单线总线为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个上拉电阻和STC89C52的P2.2来完成对总线的上拉。当DS18B20处于写存储器操作和温度A/D变换操作时,总线上必须有强的上拉,上拉开启时间最大为10 μs。采用寄生电源供电方式是VDD和GND端均接地。由于单线制只有一根线,因此发送接收口必须是三状态的。主机控制DS18B20完成温度转换必须经过3个步骤: ? 初始化。

8

? ROM操作指令。

? 存储器操作指令。

5.5 继电器加热控制电路

电路如图8主要是用来给外部加热源加热的。

图8 继电器加热电路

9

6 系统软件设计 6.1 程序结构分析

主程序调用了3个子程序,分别是数码管显示程序、温度信号处理程序、按键

设定报警温度程序。温度信号处理程序:对温度芯片送过来的数据进行处理,进行判断和显示。数码管显示程序:向数码管的显示送数,控制系统的显示部分。按键设定程序:可以设定低温和高温报警可精确到0.1度。

6.2 系统程序流图

主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,主程序的主要功能是负责温度的实时显示,读出并处理DS18B20的当前温度值,与设定的报警温度比较,其程序流程见图9所示。

通过调用读温度子程序把存入内存储中的整数部分与小数部分开分存放在不的的两个单元中,然后通过调用显示子程序显示出来。

10

图9 DS18B20温度流程图

11

图21 生成HEX文件

6.3.3 使用Debug进行调试

Keil有很强大的调试功能,可以显示C程序的反汇编代码、可以计算代码运行的时间、可以显示程序中某一变量的值??能用好这个调试工具对编写单片机程序会有很大的帮助。同样的,在这里,只对Debug进行简单应用介绍,更详细的使用方法可以参看相关书籍资料。

图22 调试前设置窗口

首先,单击

,弹出如图22所示对话框,在Target页面上设置对应的晶振频率。

17

其他不用作修改。设置完成后,单击,进入调试界面(如图23所示)。

图23 Keil调试界面

点击

中对应的工具按钮则可以开始调试。

另外,“View”下的三个工具在调试中会经常用到如.图24所示,“Disassembly

Window”显示C文件的反汇编程序;“Watch & Call Stack Window”可以显示程序中某一变量的值;“Memory Window”可以显示内存中某一地址的值。

图24 三个常用的调试工具

18

7 系统的安装与调试

7.1 安装步骤

1.检查元件的好坏

按电路图买好元件后首先检查买回元件的好坏,按各元件的检测方法分别进行检测,一定要仔细认真。而且要认真核对原理图是否一致,在检查好后才可上件、焊件,防止出现错误焊件后不便改正。

2.放置、焊接各元件

按原理图的位置放置各元件,在放置过程中要先放置、焊接较低的元件,后焊较高的和要求较高的元件。特别是容易损坏的元件要后焊,在焊集成芯片时连续焊接时间不要超过10s,注意芯片的安装方向。

7.2 电路的调试

首先烧入显示程序,看显示正不正常。在调试程序时,发现有的指令用的不正确,导致电路功能不能完全实现,另外软件程序中的延时有的过长、有的过短。类似的现象还有很多就不一一列举了。

7.3 本章小结

本章的主要内容是电路的测试和调试注意事项

结论

本设计采用51单片机+DS18B20温度传感器+继电器加热+数码管显示+功能按键组成。DS18B20温度传感器检测水温并将水温信息转换成电信号传送给单片机,单片机将得到的数据进行处理、显示与控制。上电后数码管显示当前的水温温度,通过按键可设置水温值,当检测到的水温低于设置的水温值时,继电器吸合接通外部加热装置,使水温达到设定水温值。当水温值超过设定水温值时,继电器断开,停止加热。温度检测精确到0.1度。并具有掉电保存功能,数据保存在单片机内部EEPOM中,按键还具有连加、减功能。

本设计结构简单,调试方便,系统反映快速灵活,经实验测试,该温度系统设计方案正确、可行,各项指标稳定、可靠。

19

参考文献

1曹巧媛主编. 单片机原理及应用(第二版). 北京:电子工业出版社,2002 2全国大学生电子设计竞赛组委会编.第五届全国大学生电子设计竞赛获奖作品选编(2001), 北京:北京理工大学出版社,2003

3何力民编. 单片机高级教程. 北京:北京航空大学出版社,2000 4金发庆等编. 传感器技术与应用.北京机械工业出版社,2002

5刘坤、宋戈、赵洪波、张宪栋编.51单片机C语言应用开发技术大全,北京:人民邮电出版社,2008

6谭浩强著.C程序设计.北京:清华大学出版社,2007;

7王忠飞,胥芳.MCS-51 单片机原理及嵌入式系统应用[M].西安:西安电子科技大学出版社,2007.P268-273

8 Peter Van Der Linden著,徐波译.C专家编程,人民邮电出版社,2003

20

附录1 整体电路原理图

21

附录2 部分源程序

#include #include \#define uchar unsigned char #define uint unsigned int

/***********************************

//数码管段选定义 0 1 2 3 4 5 6 7 8 9 uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,

0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff}; //断码

//数码管位选定义

uchar code smg_we[]={0xef,0xdf,0xbf,0x7f};

uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8}; uchar smg_i = 3; //显示数码管的个位数 sbit dq = P2^4; //18b20 IO口的定义 sbit relay = P2^5; //继电器IO口定义 sbit beep = P2^3; //蜂鸣器IO口定义

uchar a_a;

uint temperature ; // bit flag_300ms ; uchar key_can;

//按键值的变量

uchar menu_1; //菜单设计的变量 uint t_high = 300,t_low = 100; bit flag_lj_en;

//按键连加使能

bit flag_lj_3_en; //按键连3次连加后使能 加的数就越大了 uchar key_time,flag_value; //用做连加的中间变量 bit key_500ms ; uchar flag_clock;

22

本设计系统是18b20温度报警系统数码管显示,

可设置温度上限高温报警和下限低温报警,报警温 度可精确到0.1度,并具有掉电保存功能,数据保存 在单片机内部EEPOM中,进入设置界面后如果没有键 按下系统会在30秒后自动退出设置界面,人性化的按 键设置,按键还具有连加、减功能。

**********************************/

uchar zd_break_en,zd_break_value; //自动退出设置界面

/***********************1ms延时函数*****************************/ void delay_1ms(uint q) { }

/***********************小延时函数*****************************/ void delay_uint(uint q) { }

/***********************数码显示函数*****************************/ void display() { }

/******************把数据保存到单片机内部eepom中******************/ void write_eepom() {

SectorErase(0x2000);

byte_write(0x2000, t_high % 256);

23

uint i,j; for(i=0;i

for(j=0;j<120;j++);

while(q--);

uchar i;

for(i=0;i

//位选

//段选 //位选 //消隐

P3 = smg_we[i]; P1 = dis_smg[i]; delay_1ms(1); P3 = 0xff; P1 = 0xff;

}

byte_write(0x2001, t_high / 256); byte_write(0x2002, t_low % 256); byte_write(0x2003, t_low / 256); byte_write(0x2055, a_a);

/******************把数据从单片机内部eepom中读出来*****************/ void read_eepom() { }

/***********************18b20初始化函数*****************************/ void init_18b20() { }

/*************写18b20内的数据***************/ void write_18b20(uchar dat) {

uchar i; for(i=0;i<8;i++) {

//写数据是低位开始 //把总线拿低写时间隙开始

24

t_high = byte_read(0x2001); t_high <<= 8;

t_high |= byte_read(0x2000); t_low = byte_read(0x2003); t_low <<= 8;

t_low |= byte_read(0x2002); a_a = byte_read(0x2055);

bit q; dq = 1; dq = 0; dq = 1; q = dq; dq = 1;

//把总线拿高 //给复位脉冲 //750us

//把总线拿高 等待 //110us

//读取18b20初始化信号 //200us

//把总线拿高 释放总线

delay_uint(1); //15us delay_uint(80); delay_uint(10); delay_uint(20);

dq = 0;

}

}

dq = dat & 0x01; //向18b20总线写数据了 delay_uint(5); // 60us dq = 1; dat >>= 1;

//释放总线

/*************读取18b20内的数据***************/ uchar read_18b20() { }

/*************读取温度的值 读出来的是小数***************/ uint read_temp() {

init_18b20();

write_18b20(0xcc); write_18b20(0xbe); EA = 0;

25

uchar i,value; for(i=0;i<8;i++) { }

return value;

//返回数据

dq = 0; dq = 1; if(dq == 1)

//把总线拿低读时间隙开始 //释放总线 //开始读写数据

value >>= 1; //读数据是低位开始

value |= 0x80;

delay_uint(5); //60us 读一个时间隙最少要保持60us的时间

uint value; uchar low;

//在读取温度的时候如果中断的太频繁了,就应该把中断给关

了,否则会影响到18b20的时序

init_18b20();

//初始化18b20

//跳过64位ROM //启动一次温度转换命令 //500us

write_18b20(0xcc); write_18b20(0x44); delay_uint(50);

//初始化18b20

//跳过64位ROM //发出读取暂存器命令

}

low = read_18b20(); EA = 1; value <<= 8; value |= low; value *= 0.625; return value;

//读温度低字节

value = read_18b20(); //读温度高字节

//把温度的高位左移8位

//把读出的温度低位放到value的低八位中 //转换到温度值 小数 //返回读出的温度 带小数

/*************定时器0初始化程序***************/ void time_init() { }

/****************独立按键处理函数************************/ void key() {

static uchar key_new = 0,key_old = 0,key_value = 0; if(key_new == 0) { } else {

26

//开总中断 //开定时器0中断 //允许定时器0定时

EA = 1; ET0 = 1; TR0 = 1;

TMOD = 0X01; //定时器0、定时器1工作方式1

//按键松开的时候做松手检测

{ }

if((P2 & 0x0f) == 0x0f)

key_value ++; key_value = 0; else

if(key_value >= 10)

write_eepom(); key_value = 0; key_new = 1; flag_lj_en = 0; flag_value = 0;

//关闭连加使能 //清零

flag_lj_3_en = 0; //关闭3秒后使能

}

}

if((P2 & 0x0f) != 0x0f) { }

key_value = 0; key_new = 0; flag_lj_en = 1;

//连加使能

zd_break_en = 1; //自动退出设置界使能 zd_break_value = 0; //自动退出设置界变量清零 key_value ++; //按键按下的时候 key_value = 0; else

if(key_value >= 7)

key_can = 20; if(key_500ms == 1) { }

if((key_new == 0) && (key_old == 1)) { }

switch(P2 & 0x0f) { }

case 0x0e: key_can = 4; break; //得到k1键值 case 0x0d: key_can = 3; break; //得到k2键值 case 0x0b: key_can = 2; break; //得到k3键值 case 0x07: key_can = 1; break; //得到k4键值 key_500ms = 0;

zd_break_en = 1; //自动退出设置界使能 zd_break_value = 0; //自动退出设置界变量清零 key_new = 0; key_old = 1;

key_old = key_new;

/****************按键处理数码管显示函数***************/ void key_with() {

if(key_can == 4) {

27

}

menu_1 ++; if(menu_1 >= 3) { }

if(menu_1 == 0) { }

if(menu_1 == 1) { }

if(menu_1 == 2) { }

//设置高温报警

dis_smg[0] = smg_du[t_low % 10]; //取low小数显示 dis_smg[1] = smg_du[t_low / 10 % 10] & 0x7f; //取个位显示 dis_smg[2] = smg_du[t_low / 100 % 10] ; //取十位显示 dis_smg[3] = 0xc7; smg_i = 4;

dis_smg[0] = smg_du[t_high % 10]; //取小数显示 dis_smg[1] = smg_du[t_high / 10 % 10] & 0x7f; //取个位显示 dis_smg[2] = smg_du[t_high / 100 % 10] ; //取low十位显示 dis_smg[3] = 0x89; smg_i = 4;

dis_smg[0] = smg_du[temperature % 10]; //取温度的小数显示

dis_smg[1] = smg_du[temperature / 10 % 10] & 0x7f; //取温度的个位显示 dis_smg[2] = smg_du[temperature / 100 % 10] ; smg_i = 3;

//取温度的十位显示

menu_1 = 0;

if(menu_1 == 1) {

if(key_can == 3) {

if(flag_lj_3_en == 0)

t_high ++ ;

//按键按下未松开自动加三次

else

t_high += 10; //按键按下未松开自动加三次之后每次自动加10 t_high = 990; if(t_high > 990)

dis_smg[0] = smg_du[t_high % 10]; //取小数显示

28

} {

}

dis_smg[1] = smg_du[t_high / 10 % 10] & 0x7f; //取个位显示 dis_smg[2] = smg_du[t_high / 100 % 10] ; //取十位显示 dis_smg[3] = 0x89;

//H

if(key_can == 2) { }

//设置低温报警

if(flag_lj_3_en == 0)

t_high -- ;

//按键按下未松开自动加三次

else

t_high -= 10; //按键按下未松开自动减三次之后每次自动减10 t_high = t_low + 1; if(t_high <= t_low)

dis_smg[0] = smg_du[t_high % 10]; //取小数显示 dis_smg[1] = smg_du[t_high / 10 % 10] & 0x7f; //取个位显示 dis_smg[2] = smg_du[t_high / 100 % 10] ; //取十位显示 dis_smg[3] = 0x89;

//H

if(menu_1 == 2)

if(key_can == 3) { }

if(key_can == 2) {

if(flag_lj_3_en == 0)

t_low ++ ; t_low += 10; t_low = t_high - 1;

else

if(t_low >= t_high)

dis_smg[0] = smg_du[t_low % 10]; //取小数显示 dis_smg[1] = smg_du[t_low / 10 % 10] & 0x7f; //取个位显示 dis_smg[2] = smg_du[t_low / 100 % 10] ; //取十位显示 dis_smg[3] = 0xc7;

//L

if(flag_lj_3_en == 0)

t_low -- ; t_low -= 10;

else

if(t_low <= 10)

29

}

}

}

t_low = 10;

dis_smg[0] = smg_du[t_low % 10]; //取小数显示 dis_smg[1] = smg_du[t_low / 10 % 10] & 0x7f; //取个位显示 dis_smg[2] = smg_du[t_low / 100 % 10] ; //取十位显示 dis_smg[3] = 0xc7;

//L

/****************报警函数***************/ void clock_h_l() { }

void main() {

temperature = read_temp(); read_eepom(); if(a_a == 0xff) { }

t_high = 300; t_low = 100; a_a = 1; write_eepom();

30

{ }

if(temperature <= t_low)

relay = 0; //加热 beep = ~beep;

if(temperature > t_low) { }

if(temperature >= t_high) { }

relay = 1; //停止加热 beep = 1; //关闭蜂鸣器

//先读出温度的值

time_init(); //初始化定时器

//新的单片机初始单片机内问EEPOM

delay_1ms(650);

}

temperature = read_temp(); //先读出温度的值

dis_smg[0] = smg_du[temperature % 10]; //取温度的小数显示

dis_smg[1] = smg_du[temperature / 10 % 10] & 0x7f; //取温度的个位显示 dis_smg[2] = smg_du[temperature / 100 % 10] ; while(1) { }

//显示函数 //按键程序

display(); key(); { }

temperature = read_temp(); //先读出温度的值 if(flag_300ms == 1) { }

clock_h_l(); //报警函数 flag_300ms = 0; if(menu_1 == 0) { }

if(zd_break_en == 1) //自动退出设置界面程序 { }

zd_break_value ++; //每300ms加一次

if(zd_break_value > 30) //15秒后自动退出设置界面 {

menu_1 = 0; zd_break_en = 0; zd_break_value = 0;

smg_i = 3;

dis_smg[0] = smg_du[temperature % 10]; //取温度的小数显示

dis_smg[1] = smg_du[temperature / 10 % 10] & 0x7f; //取温度的个位显示 dis_smg[2] = smg_du[temperature / 100 % 10] ;

//取温度的十位显示

//300ms 处理一次温度程序

key_with();

//设置报警温度

//取温度的十位显示

if(key_can < 10)

}

/*************定时器0中断服务程序***************/ void time0_int() interrupt 1

31

{ }

static uchar value; TH0 = 0x3c;

TL0 = 0xb0; // 50ms value ++; { }

if(flag_lj_en == 1) //按下按键使能 { }

key_time ++;

if(key_time >= 10) //500ms { }

key_time = 0;

key_500ms = 1; //500ms flag_value ++; if(flag_value > 3) { }

flag_value = 10;

flag_lj_3_en = 1; //3次后1.5秒连加大些

flag_300ms = 1; //300ms value = 0;

if(value % 6 == 0)

32

{ }

static uchar value; TH0 = 0x3c;

TL0 = 0xb0; // 50ms value ++; { }

if(flag_lj_en == 1) //按下按键使能 { }

key_time ++;

if(key_time >= 10) //500ms { }

key_time = 0;

key_500ms = 1; //500ms flag_value ++; if(flag_value > 3) { }

flag_value = 10;

flag_lj_3_en = 1; //3次后1.5秒连加大些

flag_300ms = 1; //300ms value = 0;

if(value % 6 == 0)

32

本文来源:https://www.bwwdw.com/article/pzpg.html

Top