基于51单片机的温度控制器.doc
温度控制器
本设计要求温度控制器实现以下基本功能:
(1).数码管准确显示温度值,测量精度为0.5;
(2).五个按键操作(设置温度,加键、复位);
(3).可以温度设置,超过设定温度,继电器吸合(且蜂鸣器发出报警声)。
Proteus仿真图
程序清单
仅供学习参考
Main.c
/*==========================================================
说明:基于DS18b20的温度控制报警程序
作者:kks
创建时间:2013-03-18
修改时间:
============================================================*/
#includeconfig.h
#includetype.h
#includeDS18B20.h
/*===================全局定义===============================*/
staticuint8uKeyValue=0; //键值
staticuint16unTemp=0; //读取的温度值
staticuint8uCnt=0; //定时器计数值
bitb2msflag=0; //2ms时间标志位
bitb2mskeyflag=0; //2ms标志,用于按键扫描
bitb50msflag=0;
uint8uKeyCnt=0; //按键延时计数
uint8codeSegTable[]={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
uint8codeBitTable[]={0xfe,0xfd,0xfb,0xf7}; //位码
uint8DisBuff[]={0,0,0,0}; //显示缓存区
/*************************************************************
*函数名:Delay250us
*输入:无
*输出:无
*功能:蜂鸣器延时函数
**************************************************************/
voidDelay250us(void)
{
uint8j;
for(j=28;j0;j--) //250us基准延时程序
{
;
}
}
/*************************************************************
*函数名:Init
*输入:无
*输出:无
*功能:程序初始化
**************************************************************/
voidInit(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
*功能:按键处理程序
**************************************************************/
uint8KeyHandle(uint8tem)
{
if(KEYUP==0)
{
uKeyCnt++;
if(uKeyCnt=2) //消抖
{
uKeyCnt=0;
if(KEYUP==0)
{
tem++;
if(tem99)
tem=0;
while(!KEYUP);
}
}
}
if(KEYDOWN==0)
{
uKeyCnt++;
if(uKeyCnt=2)
{
uKeyCnt=0;
if(KEYDOWN==0)
{
tem--;
if(tem==-1)
{