久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 單片機DHT11溫濕度1602程序顯示問題 [打印本頁]

作者: nojiya88    時間: 2015-10-25 22:45
標題: 單片機DHT11溫濕度1602程序顯示問題
找了個程序下到單片機,開機結果沒有溫濕度顯示出來。顯示出來的是這樣子。。不知什么原因??
程序如下:
#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液晶初始化函數;
void LCD_Display();          //聲明LCD_Display液晶顯示函數;
void Rec_DHT();                //聲明Rec_DHT,DHT11接收數據函數;

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

/********主機發出開始信號*******/
void DHT11_Start()           //請結合時序圖分析
{
         DHTIO=1;
         delay1();
         DHTIO=0;
         delay(20);   //保持電平時間大于18ms
         DHTIO=1;
         delay1();     //延遲等待20-40us
         delay1();
         delay1();
         delay1();
         delay1();
}
/********DHT11接收一個字節數據*******/
uchar receive_data()
{
         uchar i,temp,count;
         data_byte=0;
         for(i=0;i<8;i++)
         {
                count=2;
                while((!DHTIO)&&count++);//等待50us低電平結束
                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接收數據*******/
void Rec_DHT()
{
               uchar flag;
         DHT11_Start();//主機發出開始信號
         DHTIO=1;      //拉高等待DHT11響應
    if(!DHTIO)    //從機發出響應信號
    {
        flag = 2;
        while((!DHTIO) && flag++);  
//判斷從機是否發出 80us 的低電平響應信號是否結束
        flag = 2;
        while(DHTIO && flag++);  
//判斷從機是否發出 80us 的高電平,若發出則開始采集數據
        Tem_Z = receive_data();   //采集濕度整數部分
        Tem_X = receive_data();   //采集濕度小數部分
        Hum_Z = receive_data();   //采集溫度整數部分
        Hum_X = receive_data();   //采集溫度小數部分
        Check = receive_data();   //采集校驗位
                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);   //注:此部分因采用的最小系統板電路設計原因,需要將字節信息逆置;
         LCDRS=0;
         LCDEN=0;
         delay(2);
         LCDEN=1;
         P0=com;
         delay(2);
         LCDEN=0;   
}
/*******數據碼*******/
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);   //注:此部分因采用的最小系統板電路設計原因,需要將字節信息逆置;
         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);   //顯示模式設置,設置16*2顯示,5*7點陣,8位數據接口
  delay(2);
  write_com(0x0c);   //顯示開關及光標設置
  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);  //輸出溫度的個位
         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);     //輸出濕度的個位
         write_data('.');delay(2);
         write_data('0');delay(2);
         write_data('0');delay(2);
         write_com(0xcc);delay(2);
         write_data('%');delay(2);
}
  程序編譯沒問題,否則無法生成HEX文件的。。。

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

IMG_20151025_222510.jpg

作者: admin    時間: 2015-10-25 23:10
應該是程序和你的實際電路不對
作者: nojiya88    時間: 2015-10-26 10:41
在開發板上面試機的,接口都調整過了
作者: HWL0541    時間: 2015-10-26 14:45
看看實際接線有沒有不通的,我就遇到1根線不通
作者: paomo113355    時間: 2015-10-26 17:56
如果是在開發板上,多半是程序的問題,有的地方延時需要長一點,測忙程序也容容易出錯
作者: nojiya88    時間: 2015-10-26 20:48
換了另外1個程序就正常了。。。
作者: 十點是十分    時間: 2016-5-31 18:21
nojiya88 發表于 2015-10-26 20:48
換了另外1個程序就正常了。。。

樓主找到什么原因了嗎!我也試了這個程序,一樣的結果,沒有找到原因。樓主解決了能不能跟小弟分享一下什么原因?
作者: a計劃    時間: 2017-5-3 15:52
端口不對吧
作者: a計劃    時間: 2017-5-3 15:53
端口不對吧




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产成人免费 | a成人| 久草免费电影 | 久久久免费电影 | 日韩在线视频一区二区三区 | 午夜影院在线观看视频 | 亚洲视频在线播放 | 极品久久 | 欧美精品一区二区三区视频 | 成人精品国产一区二区4080 | 日本精品在线播放 | 噜噜噜噜狠狠狠7777视频 | a级大片免费观看 | 久久综合久色欧美综合狠狠 | 久久久久久久91 | 国产精品久久精品 | 在线观看视频一区 | 91社区在线观看播放 | 欧美一级欧美一级在线播放 | 国产乱码精品1区2区3区 | xnxx 日本免费 | 国产视频二区 | 国产精品免费观看 | 日日夜夜天天 | 久久看看 | 日韩高清不卡 | 欧美偷偷| 久久久免费精品 | ww亚洲ww亚在线观看 | 亚洲精视频 | 欧美日韩成人影院 | 欧产日产国产精品国产 | 在线看片国产精品 | 综合亚洲视频 | 一区二区三区视频在线免费观看 | 毛片一区 | 老司机精品福利视频 | 中文字幕乱码亚洲精品一区 | 国产午夜高清 | 欧美一区二区三区高清视频 | 色综合久久伊人 |