文档下载 文档下载导航
设为首页 | 加入收藏
搜索 请输入内容:  
 导航当前位置: 文档下载 > 所有分类 > 工程科技 > 信息与通信 > 在12864上显示温湿度(DHT11传感器)
侵权投诉

在12864上显示温湿度(DHT11传感器)

实验绝对成功,无需修改!

#include<reg52.h>
//#include"18b20md.h"
#define uchar unsigned char
#define uint unsigned int
char read_data();
void delay(uchar z);
uchar shiZ,shiX,wenZ,wenX,check;
uchar tr_shiZ,tr_shiX,tr_wenZ,tr_wenX;
uchar flag;
uchar num[]="我爱单片机";
uchar num1[]="温度: . ℃";
uchar num2[]="湿度: . %";
uchar num3[]="我好讨厌曾炜";
sbit rs=P1^0;
sbit rw=P1^1;
sbit e=P2^5;
sbit psb=P1^2;
sbit dula=P2^6;
sbit wela=P2^7;
sbit DHT=P2^0;
void delayms(uint x)
{
uchar i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void delay(uchar z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delay_10us()
{
uchar i;
i--;
i--;
i--;
i--;
i--;
i--;
}
void read_init()
{
DHT=0; //主机使DHT11低电平并延时至少18ms
delayms(21);
DHT=1; //主机置DHT11高电平20~40us,并等待从机相应
delay_10us();
delay_10us();
delay_10us();
delay_10us();
DHT=1;
if(!DHT) //从机发出响应信号
{
flag=2;
while((!DHT)&&flag++);//等待从机发高电平结束
flag=2;
while(DHT&&flag++); //开始采集数据
tr_shiZ=read_data();//采集湿度整数部分
tr_shiX=read_data();//采集湿度小数部分
tr_wenZ=read_data();//采集温度整数部分
tr_wenX=read_data();//采集温度小数部分
check=read_data(); //采集校验位
}
DHT=0;
delay(20);//采集完数据后
}
char read_data()
{
uchar i,num,temp;
num=0;
for(i=0;i<8;i++)
{
flag=2;
while((!DHT)&&flag++);//等待50毫秒低电平
delay_10us();//延时判断0还是1
delay_10us();
delay_10us();
delay_10us();
if(DHT==1)
{
temp=1;
flag=2;
while(DHT&&flag++);
}
else
temp=0;
num<<=1;
num|=temp;
}
return(num);
}
void com(uchar com)
{
rs=0;
rw=0;
P0=com;
delayms(5);
e=1;
delayms(5);
e=0;
}

void dat(uchar dat)
{
rs=1;
rw=0;
P0=dat;
delayms(5);
e=1;
delayms(5);
e=0;
}
void init()
{
dula=0;
wela=0;
psb=1;
com(0x30);
delayms(5);
com(0x0f);
delayms(5);
com(0x01);
delayms(5);
}
void disp()
{
uchar i;
com(0x80);
for(i=0;i<10;i++)
{
dat(num[i]);
delayms(5);
}
}
void disp1()
{
uchar i;
com(0x90);
for(i=0;i<12;i++)
{
dat(num1[i]);
delayms(5);
}
}
void disp2()
{
uchar i;
com(0x88);
for(i=0;i<16;i++)
{
dat(num2[i]);
delayms(4);
}
}
void disp3()
{
uchar i;
com(0x98);
for(i=0;i<16;i++)
{
dat(num3[i]);
delayms(5);
}
}
void writed(uchar *m,uchar n,uchar date) //在固定位置写数字
{
uchar shi,ge;
shi=date/10;
ge=date%10;
*(m+n)=48+shi;
*(m+n+1)=48+ge;
}
void main()
{
int temp; // a,b,c,d,
init();
disp();
disp1();
disp2();
disp3();
while(1)
{

/* temp=ReadTemperature();
d=temp&0x0f;
d=d*10/16;
temp>>=4;
a=temp;
b=a/10;
c=a%10;
num1[5]=b+48;
num1[6]=c+48;
num1[8]=d+48;
disp1(); */
read_init();
temp=tr_shiZ

第1页

你可能喜欢

  • 液晶1602
  • 无字库12864
  • 液晶显示
  • DS18B20中文资料
  • 仪表设计
  • 单片机温湿度
  • 温度检测
  • LCD12864

热门文档

相关文档

站点地图 | 文档上传 | 侵权投诉 | 手机版
本站所有资源均来自互联网,本站只负责收集和整理,均不承担任何法律责任,如有侵权等其它行为请联系我们.
文档下载 Copyright 2013 doc.guandang.net All Rights Reserved.  -  email