基于51单片机的温度控制器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;
}
/*************************************************************