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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7598|回復: 35
打印 上一主題 下一主題
收起左側

51單片機 用LCD1602顯示DHT11采集的溫濕度,實物可以顯示溫度但是仿真顯示不出來

  [復制鏈接]
回帖獎勵 90 黑幣 回復本帖可獲得 30 黑幣獎勵! 每人限 3 次
跳轉到指定樓層
樓主

#include <reg52.h>

#define LCD1602_DB  P0
sbit LCD1602_RS = P1^2;
sbit LCD1602_RW = P1^3;
sbit LCD1602_E  = P1^1;

/* 等待液晶準備好 */
void LcdWaitReady()
{
    unsigned char sta;

    LCD1602_DB = 0xFF;
    LCD1602_RS = 0;
    LCD1602_RW = 1;
    do {
        LCD1602_E = 1;
        sta = LCD1602_DB; //讀取狀態字
        LCD1602_E = 0;
    } while (sta & 0x80); //bit7等于1表示液晶正忙,重復檢測直到其等于0為止
}
/* 向LCD1602液晶寫入一字節命令,cmd-待寫入命令值 */
void LcdWriteCmd(unsigned char cmd)
{
    LcdWaitReady();
    LCD1602_RS = 0;
    LCD1602_RW = 0;
    LCD1602_DB = cmd;
    LCD1602_E  = 1;
    LCD1602_E  = 0;
}
/* 向LCD1602液晶寫入一字節數據,dat-待寫入數據值 */
void LcdWriteDat(unsigned char dat)
{
    LcdWaitReady();
    LCD1602_RS = 1;
    LCD1602_RW = 0;
    LCD1602_DB = dat;
    LCD1602_E  = 1;
    LCD1602_E  = 0;
}
/* 設置顯示RAM起始地址,亦即光標位置,(x,y)-對應屏幕上的字符坐標 */
void LcdSetCursor(unsigned char x, unsigned char y)
{
    unsigned char addr;

    if (y == 0)  //由輸入的屏幕坐標計算顯示RAM的地址
        addr = 0x00 + x;  //第一行字符地址從0x00起始
    else
        addr = 0x40 + x;  //第二行字符地址從0x40起始
    LcdWriteCmd(addr | 0x80);  //設置RAM地址
}
/* 在液晶上顯示字符串,(x,y)-對應屏幕上的起始坐標,str-字符串指針 */
void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str)
{
    LcdSetCursor(x, y);   //設置起始地址
    while (*str != '\0')  //連續寫入字符串數據,直到檢測到結束符
    {
        LcdWriteDat(*str++);
    }
}
/* 初始化1602液晶 */
void InitLcd1602()
{
    LcdWriteCmd(0x38);  //16*2顯示,5*7點陣,8位數據接口
    LcdWriteCmd(0x0C);  //顯示器開,光標關閉
    LcdWriteCmd(0x06);  //文字不動,地址自動+1
    LcdWriteCmd(0x01);  //清屏
}
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit Data=P1^0;   
uchar rec_dat[13]="123695669999";
extern void InitLcd1602();
uchar showset[16]="12369566999999";
int wendu=0;
int shidu=0;

sbit shezhi=P2^0;
sbit jia=P2^1;
sbit jian=P2^2;
sbit beep=P3^7;

int wendul=5;
int wenduh=30;
int shidul=30;
int shiduh=60;
int change=0;
uchar key_can;         //按鍵值
extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
void DHT11_delay_us(uchar n)
{
    while(--n);
}

void DHT11_delay_ms(uint z)
{
   uint i,j;
   for(i=z;i>0;i--)
      for(j=110;j>0;j--);
}

void DHT11_start()
{
   Data=1;
   DHT11_delay_us(2);
   Data=0;
   DHT11_delay_ms(20);   
   Data=1;
   DHT11_delay_us(30);
}

uchar DHT11_rec_byte()   
{
   uchar i,dat=0;
  for(i=0;i<8;i++)   
   {         
      while(!Data);   
      DHT11_delay_us(8);   
      dat<<=1;         
      if(Data==1)   
         dat+=1;
      while(Data);      
    }  
    return dat;
}

void DHT11_receive()   
{
    uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
    DHT11_start();
    if(Data==0)
    {
        while(Data==0);   //等待數據   
        DHT11_delay_us(40);  //延時80us
        R_H=DHT11_rec_byte();    //濕度高位  
        R_L=DHT11_rec_byte();    //濕度低位  
        T_H=DHT11_rec_byte();    //溫度高位
        T_L=DHT11_rec_byte();    //溫度低位
        revise=DHT11_rec_byte(); //獲取數據

        DHT11_delay_us(25);    //延時

        if((R_H+R_L+T_H+T_L)==revise)      //校驗
        {
            RH=R_H;
            RL=R_L;
            TH=T_H;
            TL=T_L;
        }
        /*數據分解*0-9*/
                                
//        rec_dat[0]='0'+(RH/10);
//        rec_dat[1]='0'+(RH%10);
//        rec_dat[2]='R';
//        rec_dat[3]='H';
//        rec_dat[4]=' ';
//        rec_dat[5]=' ';
//        rec_dat[6]='0'+(TH/10);
//        rec_dat[7]='0'+(TH%10);
//        rec_dat[8]='C';
                                shidu=RH;
                                wendu=TH;
                                rec_dat[0]='H';
                                rec_dat[1]=':';
                                rec_dat[2]='0'+(RH/10);
        rec_dat[3]='0'+(RH%10);
        rec_dat[4]='R';
        rec_dat[5]='H';
        rec_dat[6]=' ';
        rec_dat[7]=' ';
                                
                                rec_dat[8]='T';
                                rec_dat[9]=':';
        rec_dat[10]='0'+(TH/10);
        rec_dat[11]='0'+(TH%10);
        rec_dat[12]='C';
    }
}


void main()
{   
   InitLcd1602();   //1602初始化
   while(1)
   {   
       DHT11_delay_ms(500);    //DHT11初始1S延時1500
       DHT11_receive();
                  
                         if(shezhi==0)
                         {
                                 DHT11_delay_ms(2);
                                 if(shezhi==0)
                                {
                                         change++;
                                  if(change>3)
                                  {
                                         change=0;
                                         
                                  }
                                       
                                  }
                          }
                                
                                if(change==0)
                                {
                                        if(jia==0)
                                        {
                                                DHT11_delay_ms(2);
                                    if(jia==0)
                                    {
                                                         shidul++;
                                                        if(shidul>99)
                                                        {
                                                         shidul=99;
                                                         
                                                        }
                                       
                                    }
                             }
                                         
                                         if(jian==0)
                                        {
                                                DHT11_delay_ms(2);
                                    if(jian==0)
                                    {
                                                         shidul--;
                                                        if(shidul<0)
                                                        {
                                                         shidul=0;
                                                         
                                                        }
                                       
                                    }
                             }

                                }
                                
                                if(change==1)
                                {
                                        if(jia==0)
                                        {
                                                DHT11_delay_ms(2);
                                    if(jia==0)
                                    {
                                                         shiduh++;
                                                        if(shiduh>99)
                                                        {
                                                         shiduh=99;
                                                         
                                                        }
                                       
                                    }
                             }
                                         
                                         if(jian==0)
                                        {
                                                DHT11_delay_ms(2);
                                    if(jian==0)
                                    {
                                                         shiduh--;
                                                        if(shiduh<0)
                                                        {
                                                         shiduh=0;
                                                         
                                                        }
                                       
                                    }
                             }

                                }
                                
                                
                                
                                if(change==2)
                                {
                                        if(jia==0)
                                        {
                                                DHT11_delay_ms(2);
                                    if(jia==0)
                                    {
                                                         wendul++;
                                                        if(wendul>99)
                                                        {
                                                         wendul=99;
                                                         
                                                        }
                                       
                                    }
                             }
                                         
                                         if(jian==0)
                                        {
                                                DHT11_delay_ms(2);
                                    if(jian==0)
                                    {
                                                         wendul--;
                                                        if(wendul<0)
                                                        {
                                                         wendul=0;
                                                         
                                                        }
                                       
                                    }
                             }

                                }
                                
                                if(change==3)
                                {
                                        if(jia==0)
                                        {
                                                DHT11_delay_ms(2);
                                    if(jia==0)
                                    {
                                                         wenduh++;
                                                        if(wenduh>99)
                                                        {
                                                         wenduh=99;
                                                         
                                                        }
                                       
                                    }
                             }
                                         
                                         if(jian==0)
                                        {
                                                DHT11_delay_ms(2);
                                    if(jian==0)
                                    {
                                                         wenduh--;
                                                        if(wenduh<0)
                                                        {
                                                         wenduh=0;
                                                         
                                                        }
                                       
                                    }
                             }

                                }
        
                    showset[0]='L';
                                showset[1]=':';
                                showset[2]='0'+(shidul/10);
        showset[3]='0'+(shidul%10);
                 
                    showset[4]='H';
                                showset[5]=':';
                                showset[6]='0'+(shiduh/10);
        showset[7]='0'+(shiduh%10);
                 
                                showset[8]='L';
                                showset[9]=':';
        showset[10]='0'+(wendul/10);
        showset[11]='0'+(wendul%10);
              showset[12]='L';
                                showset[13]=':';
        showset[14]='0'+(wenduh/10);
        showset[15]='0'+(wenduh%10);
                                
                                if((shidu< shidul )|| (shidu>shiduh))
                                {
                                        beep=0;
                                       
                                }
                                else if((wendu< wendul )|| (wendu>wenduh))
                                {
                                        beep=0;
                                }
                                else
                                {
                                        beep=1;
                                }
                  LcdShowStr(0,1,showset);  //顯示溫濕度設置   
                        LcdShowStr(0,0,rec_dat);  //顯示溫濕度                     
   }
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:719492 發表于 2020-4-1 14:40 | 只看該作者
為什么我的proteus沒有DHT11
回復

使用道具 舉報

板凳
ID:719492 發表于 2020-4-1 14:41 | 只看該作者
為什么我的Proteus沒有DHT11這個傳感器
回復

使用道具 舉報

地板
ID:584814 發表于 2020-4-1 19:07 | 只看該作者
這程序拔掉DHT11試試
回復

使用道具 舉報

5#
ID:362692 發表于 2020-4-2 15:14 來自手機 | 只看該作者
只接一個LCD試試,有沒有顯示,沒顯示可能就是LCD部分的程序問題
回復

使用道具 舉報

6#
ID:304751 發表于 2020-4-4 01:47 | 只看該作者
384749736 發表于 2020-4-1 14:40
為什么我的proteus沒有DHT11

用8.9試試
回復

使用道具 舉報

7#
ID:745454 發表于 2020-5-7 18:23 | 只看該作者
剛好學習了謝謝樓主
回復

使用道具 舉報

8#
ID:302325 發表于 2020-5-7 22:05 | 只看該作者
多半是時序問題吧
回復

使用道具 舉報

9#
ID:440553 發表于 2020-5-8 00:40 | 只看該作者
while(Data==0);   //等待數據    ,可能會死循環在DTH11程序中。在這個while中寫一個超時跳出等待的語句
回復

使用道具 舉報

10#
ID:746593 發表于 2020-5-8 08:48 | 只看該作者
會不會是仿真哪里出錯了?你檢查一下仿真
回復

使用道具 舉報

11#
ID:420836 發表于 2020-5-8 08:49 | 只看該作者
通常說的是真實電路有效,但模擬可能無效。非常奇怪
回復

使用道具 舉報

12#
ID:739545 發表于 2020-5-8 09:03 | 只看該作者
仿真和實際有差異,參考下網上的LCD1602顯示程序
回復

使用道具 舉報

13#
ID:746607 發表于 2020-5-8 09:21 | 只看該作者
可以直接在keil跑片上仿真,也可以看變量值
回復

使用道具 舉報

14#
ID:748033 發表于 2020-5-15 01:02 | 只看該作者
按鍵功能都實現不了!
回復

使用道具 舉報

15#
ID:752299 發表于 2020-5-15 09:23 | 只看該作者
選擇實物類的比較簡單
回復

使用道具 舉報

16#
ID:753788 發表于 2020-5-17 10:15 | 只看該作者
為什么我單片機燒進去程序不行啊,難過
回復

使用道具 舉報

17#
ID:745454 發表于 2020-5-17 12:32 | 只看該作者
按鍵模塊好像有問題
回復

使用道具 舉報

18#
ID:755472 發表于 2020-5-20 13:22 | 只看該作者
應該是protues軟件支持兼容性不好,建議用最新的版本
回復

使用道具 舉報

19#
ID:780711 發表于 2020-6-16 13:28 | 只看該作者
樓主解決了嗎?是時序問題嗎?該怎么調呢?
回復

使用道具 舉報

20#
ID:600952 發表于 2020-6-16 14:10 | 只看該作者
bobo233 發表于 2020-5-8 00:40
while(Data==0);   //等待數據    ,可能會死循環在DTH11程序中。在這個while中寫一個超時跳出等待的語句

我同意你的觀點,不知樓主解決了沒有
回復

使用道具 舉報

21#
ID:600952 發表于 2020-6-16 14:13 | 只看該作者
唉,仿真就是這樣,總會出現各種各樣的問題,很讓人摸不到頭腦,(我發現大部分24小時必答的問題都是關于仿真的)這大概就是仿真程序需要完善的地方了
回復

使用道具 舉報

22#
ID:633896 發表于 2020-7-7 12:06 | 只看該作者
看看是不是時鐘的問題  比如你的實物用的是11.0592Mhz 你的仿真用的是12Mhz 可能結果就不一樣。傳感器對延時要求是很高的、
回復

使用道具 舉報

23#
ID:595237 發表于 2020-7-7 21:48 | 只看該作者
按鍵仿真  電平不正常,,LCD仿真能夠顯示  ,有時候不顯示,真的莫名其妙
回復

使用道具 舉報

24#
ID:595237 發表于 2020-7-7 23:49 | 只看該作者


可以顯示,按鍵不靈活
回復

使用道具 舉報

25#
ID:541982 發表于 2020-7-8 10:22 | 只看該作者
單片機要設置參數
回復

使用道具 舉報

26#
ID:510861 發表于 2020-7-8 12:27 來自手機 | 只看該作者
我的1602就是顯示不了解
回復

使用道具 舉報

27#
ID:327265 發表于 2020-7-8 17:24 | 只看該作者
斷點仿真看時序,直接明了
回復

使用道具 舉報

28#
ID:235954 發表于 2020-7-12 07:13 | 只看該作者
時序問題,應該開在等著忙時序,數據沒能讀回來
回復

使用道具 舉報

29#
ID:1027159 發表于 2022-5-22 16:49 | 只看該作者
樓主 我也是一樣的問題  接線仿真都一樣 實物可以 仿真數據在液晶上面讀不了
回復

使用道具 舉報

30#
ID:161164 發表于 2022-5-23 13:18 | 只看該作者
小灰灰灰灰 發表于 2022-5-22 16:49
樓主 我也是一樣的問題  接線仿真都一樣 實物可以 仿真數據在液晶上面讀不了

部份版本的Protues LCD1602仿真不支援查忙 于是你的程序在while (sta & 0x80);中死循環了
回復

使用道具 舉報

31#
ID:1010970 發表于 2023-4-20 10:46 | 只看該作者
檢查一下仿真的電路有沒有連錯
回復

使用道具 舉報

32#
ID:1041416 發表于 2023-11-20 19:55 | 只看該作者
試了,不行啊
回復

使用道具 舉報

33#
ID:1138038 發表于 2024-11-29 17:20 | 只看該作者
可不以用在DHT11控制步進電機上
回復

使用道具 舉報

34#
ID:1138038 發表于 2024-11-29 17:21 | 只看該作者
實物可以顯示溫度但是仿真顯示不出來,是不是參數設置問題
回復

使用道具 舉報

35#
ID:583948 發表于 2024-12-2 09:11 | 只看該作者
可以先排除一下硬件是否一致,仿真和實物還是有差距的。其次把溫濕度傳感器拔了,看看能否顯示。最后在主循環里只寫顯示函數,比如顯示數字什么的。這樣會很快排查到問題在哪。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 男人天堂视频在线观看 | 亚洲国产精品日韩av不卡在线 | 国产精品一区一区 | 日韩毛片免费视频 | 久久久免费少妇高潮毛片 | 在线免费观看a级片 | 91高清视频在线观看 | 久久成人一区 | 91视频网| 国产麻豆一区二区三区 | 日日夜夜精品视频 | 亚洲综合在线播放 | 夜夜夜夜夜夜曰天天天 | 视频一区二区中文字幕日韩 | 二区不卡| 免费av电影网站 | 精品国产一区二区在线 | 国产精品一二区 | 9191在线观看 | 国产精品中文字幕在线 | 精品一区二区三区日本 | 久久精品国产一区 | 国产日本精品视频 | 国产精品久久久久久亚洲调教 | 国产欧美日韩在线播放 | 日日操网站| 亚洲精品国产第一综合99久久 | 欧美日韩中文字幕在线播放 | 国产人成精品一区二区三 | 欧美亚洲国产日韩 | 最新黄色在线观看 | 久久精品一级 | 欧美一区日韩一区 | 国产精品一区二区三区免费观看 | 亚洲免费观看 | 国产精品一区二区视频 | 一级一级一级毛片 | 韩日精品视频 | 久久久精品影院 | 自拍亚洲 | 欧美一级免费看 |