基于51单片机的温度控制器

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

温度控制器

本设计要求温度控制器实现以下基本功能:

(1).数码管准确显示温度值,测量精度为±0.5C

︒;

(2).五个按键操作(设置温度,加键、复位);

(3).可以温度设置,超过设定温度,继电器吸合(且蜂鸣器发出报警声)。

Proteus仿真图

仅供学习参考

Main.c

/*==========================================================

说明:基于DS18b20的温度控制报警程序

作者:kks

创建时间:2013-03-18

修改时间:

============================================================*/

#include "config.h"

#include "type.h"

#include "DS18B20.h"

/*===================全局定义===============================*/ static uint8 uKeyValue=0; //键值

static uint16 unTemp=0; //读取的温度值

static uint8 uCnt=0; //定时器计数值

bit b2msflag=0; //2ms时间标志位

bit b2mskeyflag=0; //2ms标志,用于按键扫描

bit b50msflag=0;

uint8 uKeyCnt=0; //按键延时计数

uint8 code SegTable[]={0XC0,0XF9,0XA4,0XB0,0X99,

0X92,0X82,0XF8,0X80,0X90, /*不带小数点的断码表*/

0x40,0x79,0x24,0x30,0x19,

0x12,0x02,0x78,0x00,0x10, /*带小数点的断码表*/

0xbf,0xff,0x86,0x88}; //-,不显示,E,R

uint8 code BitTable[]={0xfe,0xfd,0xfb,0xf7}; //位码

uint8 DisBuff[]={0,0,0,0}; //显示缓存区

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

*函数名:Delay250us

*输入:无

*输出:无

*功能:蜂鸣器延时函数

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

void Delay250us(void)

{

uint8 j;

for(j=28;j>0;j--) //250us基准延时程序

{

;

}

}

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

*函数名:Init

*输入:无

*输出:无

*功能:程序初始化

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

void Init(void)

{

P0=P1=P2=P3=0XFF; //IO口初始化

TMOD=0x01; //定时器0方式1

TH0=0xf8; //定时2ms

TL0=0x30;

ET0=1;

EX0=1;

EA=1;

TR0=1;

}

/************************************************************* *函数名:KeyHandle

*输入:tem

*输出:返回温度上下限设置值,上限最大值为90,下限为0

*功能:按键处理程序

**************************************************************/ uint8 KeyHandle(uint8 tem)

{

if(KEYUP==0)

{

uKeyCnt++;

if(uKeyCnt>=2) //消抖

{

uKeyCnt=0;

if(KEYUP==0)

{

tem++;

if(tem>99)

tem=0;

while(!KEYUP);

}

}

}

if(KEYDOWN==0)

{

uKeyCnt++;

if(uKeyCnt>=2)

{

uKeyCnt=0;

if(KEYDOWN==0)

{

tem--;

if(tem==-1)

{

tem=99;

}

while(!KEYDOWN);

}

}

}

if(KEYWRITE==0)

{

uKeyCnt++;

if(uKeyCnt>=2)

{

uKeyCnt=0;

if(KEYWRITE==0)

{

CopyToEEPROM(); //将上下限拷贝到E2PROM

while(!KEYWRITE);

}

}

}

return tem;

}

/************************************************************* *函数名:Buzz

*输入:无

*输出:无

*功能:蜂鸣器报警函数

**************************************************************/ void Buzz(void)

{

uint8 i;

for(i=10;i>0;i--)

{

BEEP=0;

Delay250us();

Delay250us();

BEEP=1;

Delay250us();

}

BEEP=1;

}

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

相关文档
最新文档