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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于15w系列單片機的溫濕度傳感器DHT11程序

[復制鏈接]
跳轉到指定樓層
樓主
親測可行。頭文件網上隨便搜都有。LCD  數據口是P4端口。


單片機源程序如下:
  1. #include<15w.H>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit RS = P5^5;   //定義端口
  6. sbit RW = P5^4;
  7. sbit EN = P5^3;



  8. sbit io=P1^0;//dht11data端接單片機的P1^0口//

  9. typedef bit BOOL;//此聲明一個布爾型變量即真或假//

  10. uchar data_byte;

  11. uchar RH,RL,TH,TL;






  12. void Delay25ms()                //@11.0592MHz
  13. {
  14.         unsigned char i, j, k;

  15.         _nop_();
  16.         _nop_();
  17.         i = 2;
  18.         j = 13;
  19.         k = 237;
  20.         do
  21.         {
  22.                 do
  23.                 {
  24.                         while (--k);
  25.                 } while (--j);
  26.         } while (--i);
  27. }


  28. void Delay8us()                //@11.0592MHz
  29. {
  30.         unsigned char i;

  31.         _nop_();
  32.         _nop_();
  33.         i = 19;
  34.         while (--i);
  35. }


  36. void Delay27us()                //@11.0592MHz
  37. {
  38.         unsigned char i;

  39.         _nop_();
  40.         i = 72;
  41.         while (--i);
  42. }

  43. /**************************dht11測試某塊*************************************/

  44. void start()//開始信號

  45. {

  46.   io=1;

  47. Delay8us();

  48.   io=0;

  49. Delay25ms();// 主機把總線拉低必須大于18ms保證DHT11能檢測到起始信號

  50.   io=1;    //發送開始信號結束后拉高電平延時20-40us

  51. Delay8us();//以下三個延時函數差不多為24us符合要求

  52.   Delay8us();

  53.   Delay8us();

  54. }



  55. uchar receive_byte()//接收一個字節//

  56. {

  57.   uchar i,temp;

  58.   for(i=0;i<8;i++)//接收8bit的數據

  59.   {

  60.         while(!io);//等待50us的低電平開始信號結束

  61. Delay27us();//開始信號結束之后延時26us-28us以下三個延時函數





  62.         temp=0;//時間為26us-28us表示接收的為數據'0'

  63.         if(io==1)

  64.          temp=1; //如果26us-28us之后還為高電平則表示接收的數據為'1'

  65.     while(io);//等待數據信號高電平'0'為26us-28us'1'為70us

  66.         data_byte<<=1;//接收的數據為高位在前右移

  67.          data_byte|=temp;

  68.   }

  69.   return data_byte;

  70. }

  71.    

  72. void receive()//接收數據//

  73. {

  74.   uchar T_H,T_L,R_H,R_L,check,num_check,i;

  75.   start();//開始信號//

  76.   io=1;   //主機設為輸入判斷從機DHT11響應信號

  77.   if(!io)//判斷從機是否有低電平響應信號//

  78.   {  
  79.         while(!io);//判斷從機發出 80us 的低電平響應信號是否結束//

  80.         while(io);//判斷從機發出 80us 的高電平是否結束如結束則主機進入數據接收狀態

  81.         R_H=receive_byte();//濕度高位

  82.         R_L=receive_byte();//濕度低位

  83.         T_H=receive_byte();//溫度高位

  84.         T_L=receive_byte();//溫度低位

  85.         check=receive_byte();//校驗位

  86.         io=0; //當最后一bit數據接完畢后從機拉低電平50us//

  87.         for(i=0;i<7;i++)//差不多50us的延時

  88.      Delay8us();

  89.         io=1;//總線由上拉電阻拉高進入空閑狀態

  90.         num_check=R_H+R_L+T_H+T_L;

  91.         if(num_check==check)//判斷讀到的四個數據之和是否與校驗位相同

  92.         {

  93.    RH=R_H;

  94.    RL=R_L;

  95.    TH=T_H;

  96.    TL=T_L;

  97.    check=num_check;

  98.         }

  99.   }

  100. }

  101. /*------------------------------------------------
  102. uS延時函數,含有輸入參數 unsigned char t,無返回值
  103. unsigned char 是定義無符號字符變量,其值的范圍是
  104. 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
  105. 長度如下 T=tx2+5 uS
  106. ------------------------------------------------*/
  107. void DelayUs2x(unsigned char t)
  108. {   
  109. while(--t);
  110. }
  111. /*------------------------------------------------
  112. mS延時函數,含有輸入參數 unsigned char t,無返回值
  113. unsigned char 是定義無符號字符變量,其值的范圍是
  114. 0~255 這里使用晶振12M,精確延時請使用匯編
  115. ------------------------------------------------*/
  116. void DelayMs(unsigned char t)
  117. {
  118.      
  119. while(t--)
  120. {
  121.      //大致延時1mS
  122.      DelayUs2x(245);
  123.          DelayUs2x(245);
  124. }
  125. }
  126. /*------------------------------------------------
  127.               判忙函數
  128. ------------------------------------------------*/
  129. bit LCD_Check_Busy(void)
  130. {
  131. P4= 0xFF;
  132. RS=0;
  133. RW=1;
  134. EN=0;
  135. _nop_();
  136. EN=1;
  137. return (bit)(P4 & 0x80);
  138. }
  139. /*------------------------------------------------
  140.               寫入命令函數
  141. ------------------------------------------------*/
  142. void LCD_Write_Com(unsigned char com)
  143. {  
  144. while(LCD_Check_Busy()); //忙則等待
  145. RS=0;
  146. RW=0;
  147. EN=1;
  148. P4= com;
  149. _nop_();
  150. EN=0;
  151. }
  152. /*------------------------------------------------
  153.               寫入數據函數
  154. ------------------------------------------------*/
  155. void LCD_Write_Data(unsigned char Data)
  156. {
  157. while(LCD_Check_Busy()); //忙則等待
  158. RS=1;
  159. RW=0;
  160. EN=1;
  161. P4= Data;
  162. _nop_();
  163. EN=0;
  164. }

  165. /*------------------------------------------------
  166.                 清屏函數
  167. ------------------------------------------------*/
  168. void LCD_Clear(void)
  169. {
  170. LCD_Write_Com(0x01);
  171. DelayMs(5);
  172. }
  173. /*------------------------------------------------
  174.               寫入字符串函數
  175. ------------------------------------------------*/
  176. void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
  177. {     
  178. if (y == 0)
  179.         {     
  180.          LCD_Write_Com(0x80 + x);     //表示第一行
  181.         }
  182. else
  183.         {      
  184.         LCD_Write_Com(0xC0 + x);      //表示第二行
  185.         }        
  186. while (*s)
  187.         {     
  188. LCD_Write_Data( *s);     
  189. s ++;     
  190.         }
  191. }
  192. /*------------------------------------------------
  193.               寫入字符函數
  194. ------------------------------------------------*/
  195. void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
  196. {     
  197. if (y == 0)
  198.         {     
  199.         LCD_Write_Com(0x80 + x);     
  200.         }   
  201. else
  202.         {     
  203.         LCD_Write_Com(0xC0 + x);     
  204.         }        
  205. LCD_Write_Data( Data);  
  206. }
  207. /*------------------------------------------------
  208.               初始化函數
  209. ------------------------------------------------*/
  210. void LCD_Init(void)
  211. {
  212.    LCD_Write_Com(0x38);    /*顯示模式設置*/
  213.    DelayMs(5);
  214.    LCD_Write_Com(0x38);
  215.    DelayMs(5);
  216.    LCD_Write_Com(0x38);
  217.    DelayMs(5);
  218.    LCD_Write_Com(0x38);  
  219.    LCD_Write_Com(0x08);    /*顯示關閉*/
  220.    LCD_Write_Com(0x01);    /*顯示清屏*/
  221.    LCD_Write_Com(0x06);    /*顯示光標移動設置*/
  222.    DelayMs(5);
  223.    LCD_Write_Com(0x0C);    /*顯示開及光標設置*/
  224.    }



  225. void main()                                       
  226. {

  227.     P0M0 = 0x00;
  228.     P0M1 = 0x00;
  229. ……………………

  230. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

全部資料51hei下載地址:
DHT11.rar (25.27 KB, 下載次數: 16)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线中文视频 | av在线黄| 欧美在线一区二区三区 | 国产精品1区2区 | 一级黄色毛片免费 | 青春草国产 | 国产精品123区 | 香蕉久久av | 男女午夜激情视频 | 91天堂网| 成人动漫视频网站 | 国外成人在线视频 | 我要看免费一级毛片 | 韩三级在线观看 | 国产精品永久免费 | 亚洲一区二区三区福利 | 久久久久久精 | 中文字幕人成乱码在线观看 | 又黄又色 | 日韩视频在线播放 | 日本午夜视频 | 成人区精品一区二区婷婷 | 欧美日韩三区 | 91成人在线 | 天天爽一爽 | www.国产 | 国产成人叼嘿视频在线观看 | 精品一区免费 | 欧美黄色绿像 | 国产精品伦一区二区三级视频 | 91麻豆精品一区二区三区 | 毛片久久久 | 91麻豆精品国产91久久久更新资源速度超快 | 国产亚洲一区二区三区 | 久久在线视频 | 国产亚洲一区二区精品 | 久久久久久黄 | 日本在线一区二区 | 在线国产一区二区 | 成人中文字幕在线 | 一区二区久久精品 |