基于51单片机的温度湿度检测仪Word下载.docx
- 文档编号:16464116
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:24
- 大小:27.32KB
基于51单片机的温度湿度检测仪Word下载.docx
《基于51单片机的温度湿度检测仪Word下载.docx》由会员分享,可在线阅读,更多相关《基于51单片机的温度湿度检测仪Word下载.docx(24页珍藏版)》请在冰豆网上搜索。
4,程序部分
(1)测温程序
#include<
reg51.h>
#include<
intrins.h>
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传送带数据的指令函数
ucCommand、ucDat
voidTrZlg7289ad(ucharucCommand,ucharucDat)
ucByte=ucDat;
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;
}
staticvoidDelay(ucharucTime)
延时函数。
无*输入:
ucTime
staticvoidDelay(ucharucTime)
ucTime;
;
/***************温度查表法**********************************/
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;
x;
i++);
voidDelay_Xms(int8ux)//x取值1~255;
int8ui,j;
for(j=0;
j<
200;
j++)
_nop_();
/******************************************************************************/
/*****************显示扫描函数************************************************/
voidshow(uchar*p)
{uchari;
ucharseg[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x00,0x01};
for(i=0;
4;
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!
***输出:
***创建人:
huangtiexiong日期:
2006-11-28
***修改人:
日期:
***函数说明:
单总线数据传输初始化;
staticvoidOneWire_Init(void)
DQ=1;
NOP();
DQ=0;
//拉低数据线,准备ResetOneWireBus;
Delay_Xus(125);
//延时510us,ResetOne-WireBus.
//提升数据线;
Delay_Xus(15);
//延时35us;
while(DQ)//等待Slave器件Ack信号;
NOP();
Delay_Xus(60);
//延时125us;
//提升数据线,准备数据传输;
staticvoidOneWire_Rst(void)
No!
单总线Resetpulse;
/******************************************************************************/
staticvoidOneWire_Rst(void)
//延时511us,ResetOne-WireBus.
/***函数名:
staticvoidOneWire_WriteByte(int8ucmd)
写一个字节;
cmd:
8bit;
cmd主要有Rom操作指令和E2Ram操作指令两种;
staticvoidOneWire_WriteByte(int8ucmd)
int8ui;
if(cmd&
0x01)//低位在前;
{
DQ=0;
//结束Recoverytime;
NOP();
DQ=1;
//发送数据;
}
else
//结束Rectime;
//DQ=0;
//发送数据;
Delay_Xus(30);
//等待SlaveDevice采样;
DQ=1;
//Recovery;
//RecoveryTimeStart;
cmd>
>
staticint8uOneWire_ReadByte(void)
读取一个字节;
8bitdata;
读之前必须首先写1;
staticint8uOneWire_ReadByte(void)
int8utmp=0;
//准备读;
tmp>
//低位先发;
DQ=0;
//Readinit;
//2ms;
//必须写1,否则读出来的将是不预期的数据;
Delay_Xus
(2);
//延时9us;
if(DQ)//在12us处读取数据;
tmp|=0x80;
//延时55us;
//恢复OneWireBus;
}
returntmp;
staticvoidOneWire_Idle(void)
总线空闲模式;
staticvoidOneWire_Idle(void)
externvoidDS18B20_RomCmd(int8uromCmd)
DS18B20Rom操作命令写;
romCmd;
0x33:
ReadRom;
0x55:
MatchRom;
0xcc:
Skiprom;
0xf0:
Searchrom;
0xec:
AlarmSearch.
externvoidDS18B20_RomCmd(int8uromCmd)//仅写了SkipRom例程;
switch(romCmd)
case0xcc:
//SkipRomcommand;
OneWire_WriteByte(0xcc);
break;
default:
externvoidDS18B20_MemCmd(int8umemCmd)
DS18B20Memory操作命令;
仅写了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;
case0xbe:
//Readscratchpad;
OneWire_WriteByte(0xbe);
externvoidDS18B20_ReadDat(int8ulen,int8u*buf)
读取DS18B20内部的Scratchpad内容;
len:
将要读取的数据长度;
buf:
数据缓
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 温度 湿度 检测