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

標題: 51單片機18b20 dht11溫濕度程序代碼 [打印本頁]

作者: pdh    時間: 2016-1-11 11:29
標題: 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)

作者: whengfu    時間: 2016-1-11 11:37
下載來學習一下樓主編程技巧
作者: pdh    時間: 2016-1-13 12:28
可以的,其實我很菜的。
作者: pengrubin    時間: 2016-8-7 05:51
喜歡。收下了。
作者: Skylake    時間: 2016-12-13 14:03
感謝分享,十分有用
作者: 單片機熱愛796    時間: 2017-2-1 11:07
頂樓主,贊一個
作者: wbsazqnmam    時間: 2017-2-18 11:40
下載來學習一下樓主編程技巧,頂一下
作者: lyf898    時間: 2017-4-3 15:18
這個很有用
作者: zhu2233912    時間: 2017-4-18 11:11
51黑有你更精彩
作者: 傾國傾城123    時間: 2017-4-21 17:25
都需要黑幣   好無奈
作者: leifeng    時間: 2017-7-27 16:29
delay.h 文件怎么沒有

作者: 老師金    時間: 2018-5-6 13:14
學習學習
作者: 卡薩丁斯柯達    時間: 2018-6-26 02:19
編譯不過
作者: huangzhiquan    時間: 2018-10-31 23:13
很給力哈
作者: shyongc    時間: 2018-11-26 09:17
感謝樓主分享




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1