资源简介
基于AT89S52的DHT11温湿度自动检测程序

代码片段和文件信息
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit ds=P2^2; //温度传感器信号线
sbit lcden=P1^6;
sbit rs=P1^0;
sbit wr=P1^5;
uint temp;
float f_temp;
void delay(uint z)//延时函数
{
uint xy;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void dsreset(void) //18B20复位,初始化函数
{
uint i;
ds=0;
i=103;
while(i>0)i--;
ds=1;
i=4;
while(i>0)i--;
}
bit tempreadbit(void) //读1位函数
{
uint i;
bit dat;
ds=0;i++; //i++ 起延时作用
ds=1;i++;i++;
dat=ds;
i=8;while(i>0)i--;
return (dat);
}
uchar tempread(void) //读1个字节
{
uchar ijdat;
dat=0;
for(i=1;i<=8;i++)
{
j=tempreadbit();
dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里
}
return(dat);
}
void tempwritebyte(uchar dat) //向18B20写一个字节数据
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb) //写 1
{
ds=0;
i++;i++;
ds=1;
i=8;while(i>0)i--;
}
else
{
ds=0; //写 0
i=8;while(i>0)i--;
ds=1;
i++;i++;
}
}
}
void tempchange(void) //DS18B20 开始获取温度并转换
{
dsreset();
delay(1);
tempwritebyte(0xcc); // 写跳过读ROM指令
tempwritebyte(0x44); // 写温度转换指令
}
uint get_temp() //读取寄存器中存储的温度数据
{
uchar ab;
dsreset();
delay(1);
tempwritebyte(0xcc);
tempwritebyte(0xbe);
a=tempread(); //读低8位
b=tempread(); //读高8位
temp=b;
temp<<=8; //两个字节组合为1个字
temp=temp|a;
f_temp=temp*0.0625; //温度在寄存器中为12位 分辨率位0.0625°
temp=f_temp*10+0.5; //乘以10表示小数点后面只取1位,加0.5是四舍五入
f_temp=f_temp+0.05;
return temp; //temp是整型
}
//液晶程序段
void delayms(unsigned int xms)
{
unsigned int ij;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void write_com(unsigned char com)//写命令
{
rs=0;
wr=0;
P0=com;
delayms(5);
lcden=0;
lcden=1;
delayms(10);
lcden=0;
}
void write_data(unsigned char dat)//写数据
{
rs=1;
wr=0;
P0=dat;
delayms(5);
lcden=0;
lcden=1;
delayms(10);
lcden=0;
}
void init_lcd()//液晶初始化
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void display(uint temp) //显示程序
{
uchar A1A2A2tA3ser;
ser=temp/10; //分离出三位要显示的数字
A1=temp/100;
A2t=temp%100;
A2=A2t/10;
A3=A2t%10;
write_com(0x80+6);
write_data(0x30+A1);
write_data(0x30+A2);
write_data(‘.‘);
write_data(0x30+A3);
}
void main()
{
init_lcd();
while(1)
{
tempchange();
get_temp();
display(temp);
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-09-23 10:59 温湿度检测程序\
文件 14114 2013-03-18 09:08 温湿度检测程序\DHT11
文件 2823 2013-04-02 21:36 温湿度检测程序\DHT11.c
文件 42 2013-03-18 09:08 温湿度检测程序\DHT11.lnp
文件 18249 2013-03-18 09:08 温湿度检测程序\DHT11.LST
文件 19254 2013-03-18 09:08 温湿度检测程序\DHT11.M51
文件 16547 2013-03-18 09:08 温湿度检测程序\DHT11.OBJ
文件 1158 2013-03-18 09:09 温湿度检测程序\DHT11.Opt
文件 442 2013-03-18 09:09 温湿度检测程序\DHT11.plg
文件 2104 2013-03-18 09:07 温湿度检测程序\DHT11.Uv2
文件 1158 2013-03-18 09:07 温湿度检测程序\DHT11_Opt.Bak
文件 2104 2013-03-16 15:51 温湿度检测程序\DHT11_Uv2.Bak
- 上一篇:abaqusFortran子程序
- 下一篇:Linux 实验8
相关资源
- STM32+DHT11+OLED+RTC+MQ2+NRF24L01+串口12
- proteus仿真、keil4、DHT11、LCD1602
- DHT11 21 22库文件
- 基于zigbee温湿度传输及控制带wifiAPP查
- stm32之传感器DHT11.zip
- DS18B20温度+DHT11湿度+LCD1602
- DHT11温湿度传感器项目代码.rar
- STM32F103C8T6+DHT11+SGP30+CH340+ADC
- STM32F103C8T6+DHT11+OLED
- 基于STM32的DHT11的温湿度采集GSM报警系
- cc2530-contiki读取DHT11并发送数据例程
- STM32温湿度传感器DHT11代码,通过串口
- 基于proteus 的 STM32 采集DHT11 仿真 +
- DTH11温湿度显示在IIC_OLED上,好用,自
- STM32F103C8T6-DHT11温湿度传感器.rar
- 基于FPGA的DHT11的温湿度数据采集
- SampleApp_dht11.zip
- STM32-UCOSIII实战-----RTC+DHT11+按键+LCD显示
- 基于STC89C52的温湿度检测
- DHT11温湿度传感器例程
- 数字温湿度传感器DHT11详解及例程利用
- STM32DHT11程序
- 里程表 STM32+霍尔传感器+EEPROM+LCD+DHT
- stm32f103+dht11温湿度传感器例程
- DHT11.rar
- 完整工程串口12、DHT11、BH1750、mh-z14
- 温湿度传感器DHT11资料+程序
- 乐鑫Esp8266驱动 ds18b20、dht11 温湿度传
- STM32F103C8T6按键调整参数断电保护,温
- CC2530+DHT11温湿度传感器+HC-SR04超声波传
评论
共有 条评论