找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 790|回复: 0
打印 上一主题 下一主题
收起左侧

单片机程序仿真非常完美,实物焊接显示00,有没有大神指点 求帮助

[复制链接]
跳转到指定楼层
楼主
ID:455442 发表于 2020-3-17 13:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
仿真很好,但是焊接实物测试连接DHT11模块显示00  有没有大神指点程序如下  自己编写

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar wendu=30,shidu=50;//初始温湿度上限设定
uchar data_byte;
uchar HH,HL,TH,TL;
sbit lcden=P2^7;//定义1602使能端
sbit lcdrs=P2^6;
sbit lcdrw=P2^5;
sbit io=P2^0;//定义数据口
sbit s0=P3^0;//定义独立按键口
sbit s1=P3^1;
sbit s2=P3^2;
sbit s3=P3^3;
sbit bee= P1^0;//蜂鸣器口
sbit led1=P1^1;//报警灯口
sbit led2=P1^2;
uchar num;
void delay10(void)   //延时10us
{
    unsigned char a,b;
    for(b=1;b>0;b--)
        for(a=1;a>0;a--);
}

void delay(uint z )//延时
{
  uint x,y;
  for(x=z;x>0;x--)
      for(y=110;y>0;y--);
}
void delay1()//8us延时
{
  uchar i;
  for(i=0;i<1;i++);
}
//***************LCD1602显示程序*****************//
void write_com(uchar com)//写命令
{
        lcdrw=0;
  lcdrs=0;
  P0=com;
  delay(5);
  lcden=1;
  delay(5);
  lcden=0;
}
void write_data(uchar date)//写数据
{
        lcdrw=0;
  lcdrs=1;
  P0=date;
  delay(5);
  lcden=1;
  delay(5);
  lcden=0;
}
void init()//LCD初始化
{
  lcden=0;
  write_com(0x38);
  write_com(0x0c);
  write_com(0x06);
  write_com(0x01);
  write_com(0x80+ 0x1);
}
void write_addr(uchar addr)//写地址
{     
write_com(addr|0x80) ;
}
void display(uchar addr, uchar q)//在某一地址显示某一数据
{   
delay(5) ;
write_addr(addr) ;
write_data(q) ;
delay(5);
}
//************DHT11程序************//
void start()//开始信号
{
io=1;//主机拉高
delay1();//延时
io=0;//发送开始信号
delay(25);//延时>18ms
io=1;//开始信号结束后拉高电平
delay10();//20-40us
delay10();
delay10();
}
uchar receive_byte()//接收一个字节
{
uchar i,temp;
for(i=0;i<8;i++)//接收8bit数据
{
while(!io)//等待50us低电平结束
  delay1();
  delay1();
  delay1();
  delay1();//延时24us
temp=0;
if(io==1)temp=1;

while(io);

data_byte<<=1;   
data_byte|=temp;
}
return data_byte;
}
void receive()//接收数据
{
uchar T_H,T_L,H_H,H_L,check,num_check;

start();//开始
io=1;
if(!io)//读取DHT11开始信号
{
while(!io);//DHT11高电平80us是否结束
while(io);
H_H=receive_byte();
H_L=receive_byte();
T_H=receive_byte();
T_L=receive_byte();
check=receive_byte();
io=0;              //拉低延迟50us
delay10();
delay10();
delay10();
delay10();
delay10();
io=1;
num_check=H_H+H_L+T_H+T_L;//校验
if(num_check=check)
{
HH=H_H;
HL=H_L;
TH=T_H;
TL=T_L;
check=num_check;
}
}
}
//*************报警*************//
void warn()
{
if(TH>=wendu)
  {
                bee=1;
                led2=1;

  }
if(HH>=shidu)
  {
        bee=1;
                led1=1;

  }
if(TH<wendu  &&   HH<shidu)
{bee=0;
led1=0;
led2=0;
}
}
//************温湿度设置***********//
void shezhi()
{
        if(s0==0)
    {
      delay(5);
      if(s0==0)
                        {
                          while(s0==0);
                                wendu++;
                                           display(0x4c,wendu/10+0x30);
            display(0x4d,wendu%10+0x30);
                                if(wendu>50)
                                        wendu=0;
                        }                        
                }        
        if(s1==0)
    {
      delay(5);
      if(s1==0)
                        {
                          while(s1==0);
                                wendu--;
                                           display(0x4c,wendu/10+0x30);
            display(0x4d,wendu%10+0x30);
                                if(wendu==0)
                                        wendu=50;
                        }                                
                }        
        if(s2==0)
    {
      delay(5);
      if(s2==0)
                        {
                          while(s2==0);
                                shidu++;
                display(0x0c,shidu/10+0x30);
         display(0x0d,shidu%10+0x30);        
                                if(shidu==100)
                                        shidu=0;
                        }                                
                }        
        if(s3==0)
    {
      delay(5);
      if(s3==0)
                        {
                          while(s3==0);
                                shidu--;
                display(0x0c,shidu/10+0x30);
         display(0x0d,shidu%10+0x30);        
                                if(shidu==0)
                                        shidu=100;
                        }                                
                }        
}
//**************主函数***************//
void main()
{
  init();//初始化
        while(1)
        {
                receive();//接收DHT11数据
                delay(30);
display(0x00,'H');//显示湿度
                delay(30);
display(0x01,'U');
                delay(30);
display(0x02,'M');
                delay(30);
display(0x03,':');
                delay(30);
        display(0x04,HH/10+0x30);//显示DHT11数据
                delay(30);
        display(0x05,HH%10+0x30);
                delay(30);
display(0x06,'%');
                delay(30);
display(0x08,'M');//显示设定湿度上限
                delay(30);
display(0x09,'A');
                delay(30);
display(0x0a,'X');
                delay(30);
display(0x0b,':');
    delay(30);
        display(0x0c,shidu/10+0x30);
        delay(30);
  display(0x0d,shidu%10+0x30);        
        delay(30);
display(0x0e,'%');
    delay(30);
display(0x40,'T');//显示温度
delay(30);
display(0x41,'E');
delay(30);
display(0x42,'M');
delay(30);
display(0x43,':');
  delay(30);
        display(0x44,TH/10+0x30);//显示DHT11数据
        delay(30);
        display(0x45,TH%10+0x30);
        delay(30);
display(0x46,'C');
delay(30);
display(0x48,'M');//显示设定温度上限
delay(30);
display(0x49,'A');
delay(30);
display(0x4a,'X');
delay(30);
display(0x4b,':');
  delay(30);
        display(0x4c,wendu/10+0x30);
        delay(30);
  display(0x4d,wendu%10+0x30);
        delay(30);
display(0x4e,'C');
delay(30);
shezhi();//温室度上限设置
delay(30);
warn();//报警  
delay(100);
}
}



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表