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

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

QQ登錄

只需一步,快速開始

搜索
查看: 2745|回復(fù): 2
收起左側(cè)

DHT11溫濕度傳感器程序

[復(fù)制鏈接]
ID:843201 發(fā)表于 2020-11-13 18:09 | 顯示全部樓層 |閱讀模式
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit IO=P3^2;
  6. sbit lcden=P3^4;
  7. sbit lcdrs=P3^5;
  8. sbit lcdrw=P3^6;
  9. uchar data_byte;
  10. uchar RH,RL,TH,TL;

  11. void delay(uchar ms) // 延時(shí)模塊
  12. {
  13.         uint i,j;
  14.         for(i=ms;i>0;i--)
  15.                 for(j=110;j>0;j--);
  16. }
  17. void delayms()        //一個(gè)for循環(huán)大概需要8個(gè)多機(jī)器周期一個(gè)機(jī)器周期為1us  
  18. {                    //本函數(shù)延時(shí)8us多
  19.    uchar i;                        
  20.    for(i=0;i<1;i++);
  21. }
  22. void writecom(uchar com)
  23. {
  24.         lcdrs=0;
  25.         P0=com;
  26.         delay(5);
  27.         lcden=1;
  28.         delay(5);
  29.         lcden=0;
  30. }
  31. void writedata(uchar date)
  32. {
  33.         lcdrs=1;
  34.         P0=date;
  35.         delay(5);
  36.         lcden=1;
  37.         delay(5);
  38.         lcden=0;
  39. }
  40. void lcd_init()
  41. {
  42.         lcden=0;
  43.         lcdrw=0;
  44.         writecom(0x38);
  45.         writecom(0x0c);
  46.         writecom(0x06);
  47.         writecom(0x01);
  48. }
  49. void display(uchar addr,uchar q)
  50. {
  51.         delay(10);
  52.         writecom(addr|0x80);
  53.         writedata(q);
  54.         delay(1);
  55. }
  56.                 //DHT11測(cè)試
  57. void start()// 開始信號(hào)
  58. {
  59.         IO=1;
  60.         delayms();
  61.         IO=0;
  62.         delay(25);        // 主機(jī)把總線拉低必須大于 18ms 保證 DHT11 能檢測(cè)到起始信號(hào)
  63.         IO=1;                         //發(fā)送開始信號(hào)結(jié)束后 拉高電平延時(shí) 20-40us
  64.         delayms();        // 以下三個(gè)延時(shí)函數(shù)差不多為 24us 符合要求
  65.         delayms();
  66.         delayms();
  67. }
  68. uchar receive_byte()//接收一個(gè)字節(jié)
  69. {
  70.     uchar i,temp;
  71.     for(i=0;i<8;i++)        // 接收 8bit 的數(shù)據(jù)
  72.         {
  73.         while(!IO);        // 等待 50us的低電平開始信號(hào)結(jié)束
  74.         delayms();        //開始信號(hào)結(jié)束之后 延時(shí) 26us-28us 以下三個(gè)延時(shí)函數(shù)
  75.         delayms();        
  76.         delayms();
  77.         temp=0;                        //時(shí)間為 26us-28us 表示接收的為數(shù)據(jù) '0'
  78.         if(IO==1)
  79.         temp=1;                 //如果 26us-28us之后 還為高電平 則表示接收的數(shù)據(jù)為 '1'
  80.         while(IO);        // 等待數(shù)據(jù)信號(hào)高電平 '0'為 26us-28us '1'為 70us
  81.         data_byte<<=1;        // 接收的數(shù)據(jù)為高位在前 右移
  82.         data_byte|=temp;
  83.         }                                           
  84.                 return data_byte;
  85. }
  86. void receive()// 接收數(shù)據(jù)
  87. {
  88.     uchar T_H,T_L,R_H,R_L,check,num_check,i;
  89.     start();// 開始信號(hào)
  90.     IO=1;         //主機(jī)設(shè)為輸入 判斷從機(jī) DHT11 響應(yīng)信號(hào)
  91.     if(!IO)        // 判斷從機(jī)是否有低電平響應(yīng)信號(hào)
  92.         {
  93.                 while(!IO);                        // 判斷從機(jī)發(fā)出 80us 的低電平響應(yīng)信號(hào)是否結(jié)束
  94.         while(IO);        // 判斷從機(jī)發(fā)出 80us 的高電平是否結(jié)束 如結(jié)束則主機(jī)進(jìn)入數(shù)據(jù)接收狀態(tài)
  95.         R_H=receive_byte();// 濕度高位
  96.         R_L=receive_byte();// 濕度低位
  97.         T_H=receive_byte();// 溫度高位
  98.         T_L=receive_byte();// 溫度低位
  99.         check=receive_byte();// 校驗(yàn)位
  100.         IO=0;                                         // 當(dāng)最后一 bit 數(shù)據(jù)接完畢后 從機(jī)拉低電平 50us
  101.             for(i=0;i<7;i++)// 差不多 50us 的延時(shí)
  102.                 delayms();
  103.         IO=1;                // 總線由上拉電阻拉高 進(jìn)入空閑狀態(tài)
  104.         num_check=R_H+R_L+T_H+T_L;
  105.         if(num_check==check)                // 判斷讀到的四個(gè)數(shù)據(jù)之和是否與校驗(yàn)位相同
  106.                 {
  107.                 RH=R_H;
  108.                 RL=R_L;
  109.                 TH=T_H;
  110.                 TL=T_L;
  111.                 check=num_check;
  112.                 }}}

  113. void main()
  114. {
  115.         lcd_init();// 初始化LCD
  116.         while(1)
  117.         {
  118.                 receive();// 接收數(shù)據(jù)       
  119.                 display(0x00,'R');//LCD 的第一行顯示
  120.                 display(0x01,':');
  121.                 display(0x02,RH/10+0x30);         //0x30 表示 帶字庫(kù)的 LCD1602 中 0x30 的位置放有數(shù)字 0 RH/10+0x30 即表示濕度的十位數(shù)字在字庫(kù) RH/10+0x30 的位置處放著
  122.                 display(0x03,RH%10+0x30);
  123.                 display(0x04,'.');
  124.                 display(0x05,RL+0x30);        
  125.                 display(0X06,'%');

  126.                 display(0x40,'T');
  127.                 display(0x41,':');
  128.                 display(0x42,TH/10+0x30);
  129.                 display(0x43,TH%10+0x30);                 
  130.                 display(0x44,'.');
  131.                 display(0x45,TL+0x30);           //溫度的小數(shù)部分就一位數(shù),范圍0-9
  132.                 display(0x46,0xdf);                        //溫度單位
  133.                 display(0x47,0x43);
  134.         } }
復(fù)制代碼

DHT11.zip

3.52 KB, 下載次數(shù): 45, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報(bào)

ID:372579 發(fā)表于 2021-7-2 17:28 來自手機(jī) | 顯示全部樓層
有原理圖配上
回復(fù)

使用道具 舉報(bào)

ID:918298 發(fā)表于 2021-8-11 11:11 | 顯示全部樓層
為什么我顯示的一直是0,我用這個(gè)程序和我原來的程序都是顯示0,求解?謝謝
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 97精品超碰一区二区三区 | av中文字幕在线观看 | 国产精品色婷婷久久58 | 精品国产欧美一区二区三区成人 | 一级视频黄色 | 精品国产一区二区国模嫣然 | 女同久久另类99精品国产 | 天堂一区二区三区 | 国产美女福利在线观看 | 色爱av| 成人亚洲性情网站www在线观看 | 香蕉视频黄色 | 国产成人免费一区二区60岁 | 韩日三级 | 2019天天操| 成人伊人 | 中文字幕视频一区二区 | 精品国产乱码久久久久久牛牛 | 国产精品久久久久久久久久免费看 | 全免费a级毛片免费看视频免费下 | 国产午夜在线 | 色婷婷亚洲国产女人的天堂 | 国产精品一区二区av | 另类视频在线 | 在线一区视频 | 精品亚洲一区二区三区 | 欧美视频免费在线 | 91免费入口 | 91夜色在线观看 | 色资源站| 国产区第一页 | 免费久| 色综合一区二区三区 | 亚洲一区二区av | 精品久久久久香蕉网 | 羞羞免费网站 | 人人干免费 | 黄色国产在线视频 | 日韩有码一区 | 操久久 | 91大神xh98xh系列全部 |