找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機(jī)18b20 dht11溫濕度程序代碼

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
18b20 dht11的51單片機(jī)驅(qū)動程序


dht11單片機(jī)源程序:
  1. #include"DHT11.h"
  2. #include"delay.h"

  3. #define uchar unsigned char
  4. #define uint unsigned uint
  5. uchar onedata;
  6. uchar rh,rl,th,tl;

  7. sbit JS=P1^4;

  8. void start(void)//起始信號
  9. {
  10.         JS=1;
  11.         delay_us(8);
  12.         JS=0;
  13.         delay_ms(20);//主機(jī)總線拉低大于18毫秒
  14.         JS=1;               
  15.         delay_us(25);//發(fā)送起始信號結(jié)束后,拉高電平25US
  16. }

  17. uchar Receive_Byte()//接收一個字節(jié)
  18. {
  19.         uchar i,temp;
  20.         for(i=0;i<8;i++) //接收八位數(shù)據(jù)
  21.         {
  22.                 while(!JS);        //等待50us的低電平開始信號結(jié)束
  23.                 delay_us(25);//開始信號結(jié)束之后延時(shí)25us
  24.                 temp=0;                //時(shí)間在26us—28us 接收數(shù)據(jù)為‘0’
  25.                 if(JS==1)
  26.                 temp=1;                //時(shí)間在26us—28us之后還為高電平 接收數(shù)據(jù)為‘1’
  27.                 while(JS);        //等待數(shù)據(jù)信號高電平26us—28us 接收數(shù)據(jù)為‘0’,70us為‘1’
  28.                 onedata<<=1;
  29.                 onedata|=temp;
  30.         }
  31.         return onedata;
  32. }

  33. void receive(void)//接收數(shù)據(jù)
  34. {
  35.         uchar t_h,t_l,r_h,r_l;
  36.         uchar check,num_check;
  37.         start();  //開始信號
  38.         JS=1;          //主機(jī)何為輸入,判斷從機(jī) DUL11 相應(yīng)信號
  39.         if(!JS)        //判斷從機(jī)是否有低電平響應(yīng)信號
  40.         {
  41.                 while(!JS);//判斷從機(jī)發(fā)出80us的低電平響應(yīng)信號是否結(jié)束
  42.                 while(JS); //判斷從機(jī)80us的高電平是否結(jié)束 結(jié)束則主機(jī)進(jìn)入接收狀態(tài)

  43.                 r_h=Receive_Byte();
  44.                 r_l=Receive_Byte();
  45.                 t_h=Receive_Byte();
  46.                 t_l=Receive_Byte();

  47.                 check=Receive_Byte(); //校驗(yàn)位
  48.                 JS=0;
  49.                 delay_us(50);//當(dāng)最后一位數(shù)據(jù)接收完畢時(shí)從機(jī)拉低50us的低電平
  50.                 JS=1;                //主機(jī)有上啦電阻拉高進(jìn)入空閑狀態(tài)
  51.                 num_check=r_h+r_l+t_h+t_l;
  52.                 if(num_check==check)
  53.                 {
  54.                         rh=r_h;
  55.                         rl=r_l;
  56.                         th=t_h;
  57.                         tl=t_l;
  58.                         check=num_check;
  59.                 }       
  60.         }
  61. }

  62. void Get_Air_Humidity()        //獲取空氣濕度
  63. {
  64.         start();  //DHT11起始信號
  65.         receive();//獲取DHT11溫濕度
  66.         //SendData_Uart1(rh);//串口輸出濕度值               
  67. }

復(fù)制代碼

ds18b20單片機(jī)源程序:
  1. #include"DS18B20.h"

  2. #define uchar unsigned char
  3. #define uint  unsigned int

  4. //18b20測溫
  5. sbit DQ=P3^6;
  6. sbit boom=P3^5;

  7. uchar fuhao; //判斷溫度的正負(fù)
  8. uchar temp_int=0;//定義溫度的整數(shù)部分
  9. uint  temp_point=0;//定義溫度的小數(shù)部分
  10. uint  temp,tempflag=261;


  11. //char a,b,c,d,e,f,g,h;

  12. //void delay(uchar i)
  13. //{
  14. //        while(i--);
  15. //}

  16. /*初始化18b20*/
  17. void Init_18b20(void)
  18. {
  19.         P3M1=0X00;
  20.         P3M0=0X40;
  21.         DQ=1; //復(fù)位18b20
  22.         delay_us(16);
  23.         DQ=0; //拉低DQ
  24.         delay_us(160);
  25.         DQ=1; //拉高DQ
  26.         delay_us(100);
  27. }

  28. /*讀一個字節(jié)*/
  29. ReadOneChar(void)
  30. {
  31.         uchar i=0;
  32.         uchar dat=0;
  33.         P3M1=0X00;
  34.         P3M0=0X00;
  35.         for(i=8;i>0;i--)
  36.         {
  37.                 DQ=0;                 //給脈沖信號
  38.                 dat>>=1;
  39.                 delay_us(1);
  40.                 DQ=1;                 //給脈沖信號
  41.                 if(DQ)
  42.                 {
  43.                         dat|=0x80;
  44.                 }
  45.                 delay_us(20);
  46.         }
  47.         return(dat);
  48. }

  49. /*寫一個字節(jié)*/
  50. void WriteOneChar(uchar dat)
  51. {
  52.         uchar i=0;
  53.         P3M1=0X00;
  54.         P3M0=0X40;
  55.         for(i=8;i>0;i--)
  56.         {
  57.                 DQ=0;
  58.                 DQ=dat&0x01;
  59.                 delay_us(20);
  60.                 DQ=1;
  61.                 dat>>=1;
  62.         }
  63.         delay_us(8);
  64. }


  65. /*寫RAm中的三四字節(jié)的內(nèi)容*/
  66. void Write_Calm(void)
  67. {
  68.         Init_18b20();
  69.         WriteOneChar(0xCC);//跳過讀序列號操作
  70.         WriteOneChar(0x4E);//寫溫度上下限及配置寄存器
  71.         WriteOneChar(50);        //寫溫度上限
  72.         WriteOneChar(0);        //寫溫度下限
  73.         WriteOneChar(0x7f);//默認(rèn)十二位精度
  74. }

  75. /*讀取溫度*/
  76. void ReadTemperature(void)
  77. {
  78.         uchar low=0;
  79.         uchar high=0;
  80.         uint  t=0;
  81.         Init_18b20();
  82.         WriteOneChar(0xCC);  //跳過讀序列號操作
  83.         WriteOneChar(0x44);  //啟動溫度轉(zhuǎn)換

  84.         LCD_write_Num(36,1,temp_int);

  85.         Init_18b20();
  86.         WriteOneChar(0xCC);  //跳過讀序列號操作
  87.         WriteOneChar(0xBE);  //讀取溫度寄存器等(共9個可讀寄存器)前兩個就是溫度

  88.         low=ReadOneChar();          //讀取溫度最低值
  89.         high=ReadOneChar();  //讀取溫度最高值
  90.         fuhao=high&0xf0;          //取得溫度的符號,fuhao==0溫度為正或0,否則為負(fù)
  91.         if(fuhao!=0)
  92.         {
  93.                 t=65536-(high<<8|low)+1;
  94.                 high=t/256;
  95.                 low=t%256;
  96.         }
  97.         temp_point=(low&0x0f)*625;
  98.         low=low>>4;                  //低位右移4位,舍棄小數(shù)部分
  99.         high=high<<4;                  //高位左移4為,舍棄符號位
  100.         temp_int=high|low;       
  101.    
  102.         temp=temp_int%100*10+temp_point/1000;
  103. }

復(fù)制代碼

完整代碼(包含頭文件)下載: 溫濕度.rar (2.64 KB, 下載次數(shù): 138)

評分

參與人數(shù) 3黑幣 +55 收起 理由
66飛宇 + 4 很給力!
genuinehell + 1 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:92231 發(fā)表于 2016-1-11 11:37 來自手機(jī) | 只看該作者
下載來學(xué)習(xí)一下樓主編程技巧
回復(fù)

使用道具 舉報(bào)

板凳
ID:102721 發(fā)表于 2016-1-13 12:28 | 只看該作者
可以的,其實(shí)我很菜的。
回復(fù)

使用道具 舉報(bào)

地板
ID:136144 發(fā)表于 2016-8-7 05:51 | 只看該作者
喜歡。收下了。
回復(fù)

使用道具 舉報(bào)

5#
ID:149790 發(fā)表于 2016-12-13 14:03 | 只看該作者
感謝分享,十分有用
回復(fù)

使用道具 舉報(bào)

6#
ID:144022 發(fā)表于 2017-2-1 11:07 | 只看該作者
頂樓主,贊一個
回復(fù)

使用道具 舉報(bào)

7#
ID:43186 發(fā)表于 2017-2-18 11:40 | 只看該作者
下載來學(xué)習(xí)一下樓主編程技巧,頂一下
回復(fù)

使用道具 舉報(bào)

8#
ID:47933 發(fā)表于 2017-4-3 15:18 | 只看該作者
這個很有用
回復(fù)

使用道具 舉報(bào)

9#
ID:190743 發(fā)表于 2017-4-18 11:11 | 只看該作者
51黑有你更精彩
回復(fù)

使用道具 舉報(bào)

10#
ID:191259 發(fā)表于 2017-4-21 17:25 | 只看該作者
都需要黑幣   好無奈
回復(fù)

使用道具 舉報(bào)

11#
ID:196248 發(fā)表于 2017-7-27 16:29 | 只看該作者
delay.h 文件怎么沒有
回復(fù)

使用道具 舉報(bào)

12#
ID:323396 發(fā)表于 2018-5-6 13:14 | 只看該作者
學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

13#
ID:358458 發(fā)表于 2018-6-26 02:19 | 只看該作者
編譯不過
回復(fù)

使用道具 舉報(bào)

14#
ID:418842 發(fā)表于 2018-10-31 23:13 | 只看該作者
很給力哈
回復(fù)

使用道具 舉報(bào)

15#
ID:433198 發(fā)表于 2018-11-26 09:17 | 只看該作者
感謝樓主分享
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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