找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 7323|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)DHT11溫濕度1602程序顯示問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:66729 發(fā)表于 2015-10-25 22:45 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
找了個(gè)程序下到單片機(jī),開(kāi)機(jī)結(jié)果沒(méi)有溫濕度顯示出來(lái)。顯示出來(lái)的是這樣子。。不知什么原因??
程序如下:
#include "reg52.h"
#define uchar unsigned char  //宏定義
#define uint unsigned int
sbit   DHTIO = P1^1;   //管腳定義,DHT11總線輸入輸出;
sbit  LCDRS = P2^3;   //管腳定義,1602液晶RS控制端;
sbit  LCDWR = P2^4;  //管腳定義,1602液晶W/R控制端;
sbit   LCDEN = P2^5;   //管腳定義,1602液晶EN使能端;
uchar code table[]={'0','1','2','3','4','5','6','7','8','9'};
uchar data_byte;
uchar Tem_Z,Tem_X,Hum_Z,Hum_X,Check;
void LCD_Init();                 //聲明LCD_Init液晶初始化函數(shù);
void LCD_Display();          //聲明LCD_Display液晶顯示函數(shù);
void Rec_DHT();                //聲明Rec_DHT,DHT11接收數(shù)據(jù)函數(shù);

//主函數(shù)
void main()
{
         LCD_Init();
         while(1)               
         {
                Rec_DHT();
                LCD_Display();   
         }
}
/*********延時(shí)函數(shù)********/
void delay(uchar ms)
{      
         uchar i ;
         while(ms--)
         {
           for(i=0;i<250;i++);
         }
}
/***延時(shí)10us***/
void delay1()
{
         uchar i;
         i--;i--;i--;
         i--;i--;i--;
}

/********主機(jī)發(fā)出開(kāi)始信號(hào)*******/
void DHT11_Start()           //請(qǐng)結(jié)合時(shí)序圖分析
{
         DHTIO=1;
         delay1();
         DHTIO=0;
         delay(20);   //保持電平時(shí)間大于18ms
         DHTIO=1;
         delay1();     //延遲等待20-40us
         delay1();
         delay1();
         delay1();
         delay1();
}
/********DHT11接收一個(gè)字節(jié)數(shù)據(jù)*******/
uchar receive_data()
{
         uchar i,temp,count;
         data_byte=0;
         for(i=0;i<8;i++)
         {
                count=2;
                while((!DHTIO)&&count++);//等待50us低電平結(jié)束
                temp=0;
                delay1();delay1();delay1();delay1();
                if(DHTIO==1)   
                {
                       temp=1;
                       count=2;
                   while((DHTIO)&&count++);
                }      
                if(count==1)      break;
                data_byte<<=1;  
                data_byte|=temp;
         }
         return data_byte;
}
/********DHT11接收數(shù)據(jù)*******/
void Rec_DHT()
{
               uchar flag;
         DHT11_Start();//主機(jī)發(fā)出開(kāi)始信號(hào)
         DHTIO=1;      //拉高等待DHT11響應(yīng)
    if(!DHTIO)    //從機(jī)發(fā)出響應(yīng)信號(hào)
    {
        flag = 2;
        while((!DHTIO) && flag++);  
//判斷從機(jī)是否發(fā)出 80us 的低電平響應(yīng)信號(hào)是否結(jié)束
        flag = 2;
        while(DHTIO && flag++);  
//判斷從機(jī)是否發(fā)出 80us 的高電平,若發(fā)出則開(kāi)始采集數(shù)據(jù)
        Tem_Z = receive_data();   //采集濕度整數(shù)部分
        Tem_X = receive_data();   //采集濕度小數(shù)部分
        Hum_Z = receive_data();   //采集溫度整數(shù)部分
        Hum_X = receive_data();   //采集溫度小數(shù)部分
        Check = receive_data();   //采集校驗(yàn)位
                DHTIO = 1;
    }
}
/*******指令碼*******/
void write_com(uchar com)
{
  com=((com&0x01)<<7)|((com&0x02)<<5)|((com&0x04)<<3)|((com&0x08)<<1)|((com&0x10)>>1)|((com&0x20)>>3)|((com&0x40)>>5)|((com&0x80)>>7);   //注:此部分因采用的最小系統(tǒng)板電路設(shè)計(jì)原因,需要將字節(jié)信息逆置;
         LCDRS=0;
         LCDEN=0;
         delay(2);
         LCDEN=1;
         P0=com;
         delay(2);
         LCDEN=0;   
}
/*******數(shù)據(jù)碼*******/
void write_data(uchar date)
{
  date=((date&0x01)<<7)|((date&0x02)<<5)|((date&0x04)<<3)|((date&0x08)<<1)|((date&0x10)>>1)|((date&0x20)>>3)|((date&0x40)>>5)|((date&0x80)>>7);   //注:此部分因采用的最小系統(tǒng)板電路設(shè)計(jì)原因,需要將字節(jié)信息逆置;
         LCDRS=1;
         LCDEN=0;
         delay(2);
         LCDEN=1;
         P0=date;
         delay(2);
         LCDEN=0;
}
/*********************/
/********1602液晶顯示初始化*******/
void LCD_Init()   
{
  LCDEN=0;             //使能低電平
  LCDWR=0;   
  write_com(0x38);   //顯示模式設(shè)置,設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口
  delay(2);
  write_com(0x0c);   //顯示開(kāi)關(guān)及光標(biāo)設(shè)置
  delay(2);
  write_com(0x06);
  delay(2);
  write_com(0x01);   //清屏
  delay(2);
}
/**********1602液晶顯示*********/
void LCD_Display()
{
//液晶顯示第一行:溫度顯示;
         write_com(0x0c);
         write_com(0x81);delay(2);
         write_data('T');delay(2);
         write_data('e');delay(2);
         write_data('m');delay(2);            
         write_data(':');delay(2);
         write_com(0x86);delay(2);
         write_data(table[(Tem_Z/10)]);delay(2);   //輸出溫度的十位
         write_data(table[(Tem_Z%10)]);delay(2);  //輸出溫度的個(gè)位
         write_data('.');delay(2);
         write_data('0');delay(2);
         write_data('0');delay(2);
         write_com(0x8c);delay(2);
         write_data(0xdf);delay(2);    //輸出℃
         write_data(0x43);delay(2);
//液晶第二行:濕度顯示;
         write_com(0xc1);delay(2);
         write_data('H');delay(2);
         write_data('u');delay(2);
         write_data('m');delay(2);
         write_data(':');delay(2);
         write_com(0xc6);delay(2);
         write_data(table[(Hum_Z/10)]);delay(2);       //輸出濕度的十位
         write_data(table[(Hum_Z%10)]);delay(2);     //輸出濕度的個(gè)位
         write_data('.');delay(2);
         write_data('0');delay(2);
         write_data('0');delay(2);
         write_com(0xcc);delay(2);
         write_data('%');delay(2);
}
  程序編譯沒(méi)問(wèn)題,否則無(wú)法生成HEX文件的。。。

IMG_20151025_222510.jpg (693.79 KB, 下載次數(shù): 140)

IMG_20151025_222510.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2015-10-25 23:10 來(lái)自手機(jī) | 只看該作者
應(yīng)該是程序和你的實(shí)際電路不對(duì)
回復(fù)

使用道具 舉報(bào)

板凳
ID:66729 發(fā)表于 2015-10-26 10:41 來(lái)自手機(jī) | 只看該作者
在開(kāi)發(fā)板上面試機(jī)的,接口都調(diào)整過(guò)了
回復(fù)

使用道具 舉報(bào)

地板
ID:91165 發(fā)表于 2015-10-26 14:45 | 只看該作者
看看實(shí)際接線有沒(méi)有不通的,我就遇到1根線不通
回復(fù)

使用道具 舉報(bào)

5#
ID:91424 發(fā)表于 2015-10-26 17:56 | 只看該作者
如果是在開(kāi)發(fā)板上,多半是程序的問(wèn)題,有的地方延時(shí)需要長(zhǎng)一點(diǎn),測(cè)忙程序也容容易出錯(cuò)
回復(fù)

使用道具 舉報(bào)

6#
ID:66729 發(fā)表于 2015-10-26 20:48 來(lái)自手機(jī) | 只看該作者
換了另外1個(gè)程序就正常了。。。
回復(fù)

使用道具 舉報(bào)

7#
ID:107177 發(fā)表于 2016-5-31 18:21 | 只看該作者
nojiya88 發(fā)表于 2015-10-26 20:48
換了另外1個(gè)程序就正常了。。。

樓主找到什么原因了嗎!我也試了這個(gè)程序,一樣的結(jié)果,沒(méi)有找到原因。樓主解決了能不能跟小弟分享一下什么原因?
回復(fù)

使用道具 舉報(bào)

8#
ID:193152 發(fā)表于 2017-5-3 15:52 | 只看該作者
端口不對(duì)吧
回復(fù)

使用道具 舉報(bào)

9#
ID:193152 發(fā)表于 2017-5-3 15:53 | 只看該作者
端口不對(duì)吧
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表