欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機18b20 dht11溫濕度程序代碼

  [復制鏈接]
跳轉到指定樓層
樓主
18b20 dht11的51單片機驅動程序


dht11單片機源程序:
  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);//主機總線拉低大于18毫秒
  14.         JS=1;               
  15.         delay_us(25);//發送起始信號結束后,拉高電平25US
  16. }

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

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

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

  47.                 check=Receive_Byte(); //校驗位
  48.                 JS=0;
  49.                 delay_us(50);//當最后一位數據接收完畢時從機拉低50us的低電平
  50.                 JS=1;                //主機有上啦電阻拉高進入空閑狀態
  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. }

復制代碼

ds18b20單片機源程序:
  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; //判斷溫度的正負
  8. uchar temp_int=0;//定義溫度的整數部分
  9. uint  temp_point=0;//定義溫度的小數部分
  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; //復位18b20
  22.         delay_us(16);
  23.         DQ=0; //拉低DQ
  24.         delay_us(160);
  25.         DQ=1; //拉高DQ
  26.         delay_us(100);
  27. }

  28. /*讀一個字節*/
  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. /*寫一個字節*/
  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中的三四字節的內容*/
  66. void Write_Calm(void)
  67. {
  68.         Init_18b20();
  69.         WriteOneChar(0xCC);//跳過讀序列號操作
  70.         WriteOneChar(0x4E);//寫溫度上下限及配置寄存器
  71.         WriteOneChar(50);        //寫溫度上限
  72.         WriteOneChar(0);        //寫溫度下限
  73.         WriteOneChar(0x7f);//默認十二位精度
  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);  //啟動溫度轉換

  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,否則為負
  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位,舍棄小數部分
  99.         high=high<<4;                  //高位左移4為,舍棄符號位
  100.         temp_int=high|low;       
  101.    
  102.         temp=temp_int%100*10+temp_point/1000;
  103. }

復制代碼

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

評分

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

查看全部評分

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

使用道具 舉報

20#
ID:433198 發表于 2018-11-26 09:17 | 只看該作者
感謝樓主分享
回復

使用道具 舉報

19#
ID:418842 發表于 2018-10-31 23:13 | 只看該作者
很給力哈
回復

使用道具 舉報

18#
無效樓層,該帖已經被刪除
17#
ID:355312 發表于 2018-8-8 19:46
評論加黑幣實在沒幣了

16#
ID:358458 發表于 2018-6-26 02:19 | 只看該作者
編譯不過
回復

使用道具 舉報

15#
無效樓層,該帖已經被刪除
14#
ID:323396 發表于 2018-5-6 13:14 | 只看該作者
學習學習
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

10#
ID:47933 發表于 2017-4-3 15:18 | 只看該作者
這個很有用
回復

使用道具 舉報

9#
ID:43186 發表于 2017-2-18 11:40 | 只看該作者
下載來學習一下樓主編程技巧,頂一下
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

6#
ID:136144 發表于 2016-8-7 05:51 | 只看該作者
喜歡。收下了。
回復

使用道具 舉報

5#
無效樓層,該帖已經被刪除
無效樓層,該帖已經被刪除
板凳
ID:102721 發表于 2016-1-13 12:28 | 只看該作者
可以的,其實我很菜的。
回復

使用道具 舉報

沙發
ID:92231 發表于 2016-1-11 11:37 來自觸屏版 | 只看該作者
下載來學習一下樓主編程技巧
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表