• 大小: 40KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: 其他
  • 标签: DHT11  液晶1602  

资源简介

这是基于STC12C5A60S单片机的一个成功测试程序 应用于1602 和DHT11温湿度 初学者使用

资源截图

代码片段和文件信息

#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^2;
sbit RW=P2^1;
sbit EN=P2^0;
sbit da=P2^3;
uchar code z1[]=“shidu:“;
uchar code z2[]=“wendu:“;
uchar b0b1b2b3b4b5b6b7b8b9;
uchar M0[5]={“0““0““0““0“};
uchar M[5]={“0““0““0““0“};
uchar S[2]={“0“}RJYD1; //J计时R判断1的正确与否D1数据的暂时存储空间   D1必须全局变量

void delayms(int a)
{
int ij;
for(i=0;i {
for(j=0;j<122;j++);
} //1.001ms
}

void delay5us()
{
uchar b;
b--;
b--;
b--;
b--;
b--; //5.00um
}

void delays(uint o)
{
uint ij;
for(i=0;i for(j=0;j<800;j++);
}

void wd(uchar d) //写数据
{
delayms(1);
RS=1;
RW=0;
EN=0;
P0=d;
delayms(1);
EN=1;
delayms(1);
EN=0;
}

void wc(uchar c) //写指令
{
delayms(1);
RS=0;
RW=0;
EN=0;
P0=c;
delayms(1);
EN=1;
delayms(1);
EN=0;
}

void lcdr()
{
delayms(1);
wc(0x38);
delayms(1);
wc(0x06); //每写一字符指针移动
delayms(1);
wc(0x0c); //开显示无光标
}

void lcd1()
{
uint i;
wc(0x80); //第一行最左边
delayms(1);
for(i=0;i<6;i++)
{
wd(z1[i]);
delayms(1);
}
wc(0x80+0x40);
for(i=0;i<6;i++)
{
wd(z2[i]);
delayms(1);
}
}

void D() //单次取值 D1是数据的存储空间
{
uint i;
    for(i=0;i<8;i++)    
{
         J=2; 
         while((!da)&&J++); //2.043ms P10是1的时候出来
     delay5us();
 delay5us();
 delay5us();
 delay5us();
 delay5us(); //45us(28-70)
 R=0;
       if(da) //如果低电平(50微秒低电平数据的标志)
R=1;
 D1<<=1;
         D1|=R;      
 J=2;
   while((da)&&J++);
    
}    
}

void CD() //传递 信号的主控制
{
delays(250);
da=0; //开始信号
delayms(19); //大于18ms  18.925ms
da=1;
J=2; //开始信号结束
while((da)&&J++); //主机拉高20us结束
if(!da) //有低电平响应可读取DHT11的响应信号p10=0出
{
delay5us();
delay5us();
delay5us();
delay5us();
delay5us();
delay5us();
delay5us();
delay5us();
delay5us();
delay5us(); //90us
J=2;
  while((da)&&J++); //低电平出
D();
M[0]=D1;
D();
M[1]=D1;
D();
M[2]=D1;
D();
M[3]=D1;
D();
M[4]=D1;
da=1; //注意DHT11温度 湿度的小数部分为0(来自官方PDF)
}
Y=M0[0]+M0[1]+M0[2]+M0[3];
if(Y=M0[4])
{
M[0]=M0[0];
M[1]=M0[1];
M[2]=M0[2];
M[3]=M0[3];
}
}

void danzifu(int k)      //转换成单字符
{
S[0]=M[k]/10;
S[1]=M[k]%10;
}

void lcd2() //显示温度数值
{
int i;
wc(0x80+7); //第一行
delayms(1);

danzifu(0);
for(i=0;i<2;i++)
{
wd(‘0‘+S[i]);
delayms(1);
}
wd(‘%‘);


wc(0x80+0x40+7);//第二行

danzifu(2);
for(i=0;i<2;i++)
{
wd(‘0‘+S[i]);
delayms(1);
}
wd(0xdf);
wd(‘c‘);
}

void main()
{
CLK_DIV=0x02;
lcdr();
lcd1();
while(1)
{
CD();
lcd2();
}

}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-03-18 13:10  DHT11温湿度液晶1602显示\
     文件        6376  2009-05-07 14:37  DHT11温湿度液晶1602显示\STARTUP.A51
     文件       14064  2012-03-18 13:04  DHT11温湿度液晶1602显示\STARTUP.LST
     文件         749  2012-03-18 13:04  DHT11温湿度液晶1602显示\STARTUP.OBJ
     文件       19736  2012-03-18 13:04  DHT11温湿度液晶1602显示\text
     文件        2891  2012-03-18 13:04  DHT11温湿度液晶1602显示\text.c
     文件        2292  2012-03-18 13:04  DHT11温湿度液晶1602显示\text.hex
     文件          41  2012-03-18 13:04  DHT11温湿度液晶1602显示\text.lnp
     文件        8654  2012-03-18 13:04  DHT11温湿度液晶1602显示\text.LST
     文件       15685  2012-03-18 13:04  DHT11温湿度液晶1602显示\text.M51
     文件       21039  2012-03-18 13:04  DHT11温湿度液晶1602显示\text.OBJ
     文件         567  2012-03-18 13:10  DHT11温湿度液晶1602显示\text.plg
     文件       57112  2012-03-18 13:10  DHT11温湿度液晶1602显示\text.uvopt
     文件       13395  2012-03-17 09:38  DHT11温湿度液晶1602显示\text.uvproj
     文件       57762  2012-03-17 09:38  DHT11温湿度液晶1602显示\text_uvopt.bak
     文件           0  2012-03-17 08:37  DHT11温湿度液晶1602显示\text_uvproj.bak
     文件        2885  2012-03-17 08:49  DHT11温湿度液晶1602显示\新建文本文档.txt

评论

共有 条评论