基于51单片机的温度湿度检测仪.docx
- 文档编号:7004255
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:25
- 大小:30.78KB
基于51单片机的温度湿度检测仪.docx
《基于51单片机的温度湿度检测仪.docx》由会员分享,可在线阅读,更多相关《基于51单片机的温度湿度检测仪.docx(25页珍藏版)》请在冰豆网上搜索。
基于51单片机的温度湿度检测仪
基于51单片机的温度湿度检测仪
————————————————————————————————作者:
————————————————————————————————日期:
单片机实践报告
题目:
基于51单片机的温度和湿度传感器
院系:
班级:
学生姓名:
学号:
完成日期:
年月日
设计内容综述
本次作业的要求是利用51单片机实现一个温度和湿度传感器,并且要求达到一定的精度。
初步分析,本次作业共有以下四部分组成:
1.以AT89S51单片机组成的最小系统板。
2。
由ZLG7289组成的数码管显示和键盘.3.由温度湿度传感器和TLC555组成的探测部分。
4。
程序部分。
1.所使用的关键器件和基本参数
1.最小系统板:
ATS51,蜂鸣器等。
2.显示板:
ZLG7289,数码管等.
3.探测部分:
DS18B20,HS1101,TLC555。
2.工作原理说明(参考原理图)
(1)探测部分
4,程序部分
(1)测温程序
#include
#include〈intrins。
h>
#include〈string.h〉
#defineNOP_nop_
#defineint8uunsignedchar
sbitDQ=P3^7;//温度输入口
sbitP04=P0^4;//蜂鸣
int8uh=0;
/***********************************显示部分*****************************************/
#defineucharunsignedchar
staticucharbdataucByte;
sbitSCLK_7289a=P1^3;
sbitSDIO_7289a=P1^4;
sbitCS_7289a=P1^2;
sbitMSB_7289a=ucByte^7;
sbitLSB_7289a=ucByte^0;
voidInitZlg7289a(void);
voidTrZlg7289a(ucharucCommand);
voidTrZlg7289ad(ucharucCommand,ucharucDat);
staticvoidSendByte(void);
staticvoidDelay(ucharucTime);
/********************************************************
*函数名:
InitZlg7289a(void)
*功能模式:
全局
*函数说明:
ZLG7289A初始化,初始化命令:
0xa4
*调用函数:
TrZlg7289a()
*全局变量:
无
*输入:
无
*返回:
无
***********************************8*******************************/
voidInitZlg7289a(void)
{
TrZlg7289a(0xa4);
}
/************************************************************************
*函数名:
voidTrZlg7289a(ucharucCommand)
*功能模式:
全局
*函数说明:
向ZLG7289A传送单指令函数
*调用函数:
Delay()、SendByte()
*全局变量:
ucByte
*输入:
ucCommand
*返回:
无
************************************************************************/
voidTrZlg7289a(ucharucCommand)
{
CS_7289a=0;
SCLK_7289a=0;
SDIO_7289a=0;
Delay(50);
ucByte=ucCommand;
SendByte();
CS_7289a=1;
SDIO_7289a=1;
SCLK_7289a=1;
}
/************************************************************************
*函数名:
voidTrZlg7289ad(ucharucCommand,ucharucDat)
*功能模式:
全局
*函数说明:
向ZLG7289A传送带数据的指令函数
*调用函数:
Delay()、SendByte()
*全局变量:
ucByte
*输入:
ucCommand、ucDat
*返回:
无
************************************************************************/
voidTrZlg7289ad(ucharucCommand,ucharucDat)
{
SCLK_7289a=0;
SDIO_7289a=0;
CS_7289a=0;
Delay(50);
ucByte=ucCommand;
SendByte();
ucByte=ucDat;
SendByte();
CS_7289a=1;
SDIO_7289a=1;
SCLK_7289a=1;
}
/************************************************************************
*函数名:
staticvoidSendByte(void)*
*功能模式:
内部
*函数说明:
向ZLG7289A发送一个字节的数据。
*
*调用函数:
Delay()
*全局变量:
ucByte、MSB_7289a*
*输入:
无
*返回:
无
************************************************************************/
staticvoidSendByte(void)
{
uchari;
for(i=0;i〈8;i++)
{
SDIO_7289a=MSB_7289a;
SCLK_7289a=1;
Delay(10);
ucByte<〈=1;
SCLK_7289a=0;
Delay(10);
}
}
/************************************************************************
*函数名:
staticvoidDelay(ucharucTime)
*功能模式:
内部
*函数说明:
延时函数.
*调用函数:
无
*全局变量:
无*输入:
ucTime
*返回:
无
************************************************************************/
staticvoidDelay(ucharucTime)
{
uchari;
for(i=0;i〈ucTime;i++)
;
}
/***************温度查表法**********************************/
int8ucodeditab[16]=
{0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x09,0x09};
int8udatabuf[2]={0x00,0x00};//读出温度暂时存放
int8udatadisplay[5]={0x00,0x00,0x00,0x00,0x00};//显示单元数据,共4个数据,一个运算暂存用
/*****************************************************************************/
//延时函数
/*延时计算式:
2×x+5;Step:
2us;*/
voidDelay_Xus(int8ux)//x取值1~255;
{
while(——x);
//int8ui;
//x/=8;
//for(i=0;i〈x;i++);
}
voidDelay_Xms(int8ux)//x取值1~255;
{
int8ui,j;
for(i=0;i〈x;i++)
for(j=0;j<200;j++)
{
_nop_();
_nop_();
}
}
/******************************************************************************/
/*****************显示扫描函数************************************************/
voidshow(uchar*p)
{uchari;
ucharseg[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x00,0x01};
for(i=0;i<4;i++)
{
if(i==1)TrZlg7289ad(0x90+i,(seg[p[i]])|0x80);
elseTrZlg7289ad(0x90+i,seg[p[i]]);
}
}
//—-—--—---—-——————DS18B20单总线模块-——-----——-——-—-—---—-—---——*/
staticvoidOneWire_Rst(void);
staticvoidOneWire_Init(void);
staticvoidOneWire_WriteByte(int8ucmd);
staticint8uOneWire_ReadByte(void);
staticvoidOneWire_Idle(void);
/*************************************************
子函数定义
*************************************************/
/*******************************************************************************
***函数名:
staticvoidOneWire_Init(void)
***功能描述:
***全局变量:
***输入:
NO!
***输出:
NO!
***创建人:
huangtiexiong日期:
2006—11-28
***修改人:
日期:
2006-11-28
***函数说明:
单总线数据传输初始化;
/******************************************************************************/
staticvoidOneWire_Init(void)
{
DQ=1;
NOP();
DQ=0;//拉低数据线,准备ResetOneWireBus;
Delay_Xus(125);//延时510us,ResetOne-WireBus。
Delay_Xus(125);
DQ=1;//提升数据线;
Delay_Xus(15);//延时35us;
while(DQ)//等待Slave器件Ack信号;
{
NOP();
}
Delay_Xus(60);//延时125us;
DQ=1;//提升数据线,准备数据传输;
}
/*******************************************************************************
***函数名:
staticvoidOneWire_Rst(void)
***功能描述:
***全局变量:
No!
***输入:
NO!
***输出:
NO!
***创建人:
huangtiexiong日期:
2006—11—28
***修改人:
日期:
2006—11—28
***函数说明:
单总线Resetpulse;
/******************************************************************************/
staticvoidOneWire_Rst(void)
{
DQ=0;//拉低数据线,准备ResetOneWireBus;
Delay_Xus(125);//延时511us,ResetOne-WireBus。
DQ=0;
Delay_Xus(125);
}
/***函数名:
staticvoidOneWire_WriteByte(int8ucmd)
***功能描述:
写一个字节;
***全局变量:
NO!
***输入:
cmd:
8bit;
***输出:
NO!
***创建人:
huangtiexiong日期:
2006-11—28
***修改人:
日期:
2006—11-28
***函数说明:
cmd主要有Rom操作指令和E2Ram操作指令两种;
/******************************************************************************/
staticvoidOneWire_WriteByte(int8ucmd)
{
int8ui;
for(i=0;i<8;i++)
{
if(cmd&0x01)//低位在前;
{
DQ=0;//结束Recoverytime;
NOP();
NOP();
NOP();
DQ=1;//发送数据;
}
else
{
DQ=0;//结束Rectime;
NOP();
NOP();
NOP();
//DQ=0;//发送数据;
}
Delay_Xus(30);//等待SlaveDevice采样;
DQ=1;//Recovery;
NOP();//RecoveryTimeStart;
cmd〉>=1;
}
}
/*******************************************************************************
***函数名:
staticint8uOneWire_ReadByte(void)
***功能描述:
读取一个字节;
***全局变量:
NO!
***输入:
NO!
***输出:
8bitdata;
***创建人:
huangtiexiong日期:
2006-11-28
***修改人:
日期:
2006-11—28
***函数说明:
读之前必须首先写1;
/******************************************************************************/
staticint8uOneWire_ReadByte(void)
{
int8ui;
int8utmp=0;
DQ=1;//准备读;
NOP();
for(i=0;i<8;i++)
{
tmp>〉=1;//低位先发;
DQ=0;//Readinit;
_nop_();//2ms;
DQ=1;//必须写1,否则读出来的将是不预期的数据;
Delay_Xus
(2);//延时9us;
_nop_();
if(DQ)//在12us处读取数据;
tmp|=0x80;
Delay_Xus(30);//延时55us;
DQ=1;//恢复OneWireBus;
NOP();
}
returntmp;
}
/*******************************************************************************
***函数名:
staticvoidOneWire_Idle(void)
***功能描述:
总线空闲模式;
***全局变量:
NO!
***输入:
NO!
***输出:
NO!
***创建人:
huangtiexiong日期:
2006-11—28
***修改人:
日期:
2006—11—28
***函数说明:
/******************************************************************************/
staticvoidOneWire_Idle(void)
{
DQ=1;
NOP();
}
/*******************************************************************************
***函数名:
externvoidDS18B20_RomCmd(int8uromCmd)
***功能描述:
DS18B20Rom操作命令写;
***全局变量:
NO!
***输入:
romCmd;
***输出:
NO!
***创建人:
huangtiexiong日期:
2006—11—28
***修改人:
日期:
2006-11-28
***函数说明:
0x33:
ReadRom;0x55:
MatchRom;0xcc:
Skiprom;0xf0:
Searchrom;
0xec:
AlarmSearch。
/******************************************************************************/
externvoidDS18B20_RomCmd(int8uromCmd)//仅写了SkipRom例程;
{
switch(romCmd)
{
case0xcc:
//SkipRomcommand;
OneWire_WriteByte(0xcc);
break;
default:
break;
}
}
/*******************************************************************************
***函数名:
externvoidDS18B20_MemCmd(int8umemCmd)
***功能描述:
DS18B20Memory操作命令;
***全局变量:
NO!
***输入:
NO!
***输出:
NO!
***创建人:
huangtiexiong日期:
2006-11—28
***修改人:
日期:
2006—11—28
***函数说明:
仅写了ConvertT(0x44)和0xBE命令;
0x44:
ConvertT;0xbe:
ReadScratch—pad;
/******************************************************************************/
externvoidDS18B20_MemCmd(int8umemCmd)
{
switch(memCmd)
{
case0x44:
//StarttoConverttemperature;
OneWire_WriteByte(0x44);
NOP();
OneWire_Idle();
Delay_Xms(250);//延时750ms;
Delay_Xms(250);
Delay_Xms(250);
break;
case0xbe:
//Readscratchpad;
OneWire_WriteByte(0xbe);
break;
default:
break;
}
}
/*******************************************************************************
***函数名:
externvoidDS18B20_ReadDat(int8ulen,int8u
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 温度 湿度 检测