资源简介
基于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
相关资源
- DHT11温湿度 1602显示 89C52单片机
- DHT11库dht11‘’
- DHT11与STM32F103ZET6
- LCD1602+DHT11显示温湿度
- 基于STC89c52 的环境数据采集 DHT11+BH
- DHT11串口传输
- arduino 读取温湿度dht11
- 51单片机DHT11温湿度
- 基于TQ2440和DHT11的温湿度监控系统源码
- 基于51单片机DHT11温湿度检测和串口通
- 温湿度传感器DHT11数字(附1602显示程
- linux平台 DHT11驱动程序
- labview 温湿度界面
- cc2530 zigbee 智能家居 温湿度dht11 wifi转
- Dht11温湿度模块库文件
- 树莓派教程--Qt工程中使用DHT11传感器
- 基于Qt界面显示的温湿度检测
- Arduino uno+esp8266+onenet+dht11温湿度传感器
- DHT11的51单片机驱动
- DHT11+CC2530 湿度传感器裸机工程源代码
- dht11+12864程序
- 基于STM32F103ZET DHT11 温湿度传感器程序
- MSP430G2553驱动DHT11温湿度传感器
- DHT11在linux上的驱动程序
- 基于Arduino的DHT11库文件
- jz2440的DHT11驱动 +QT5.6的温湿度监测系
- Arduino-DHT11温湿度传感器库文件
- DHT11库文件
- dht11 k60.zip
- dht11的12864显示程序
评论
共有 条评论