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

標題: 基于15w系列單片機的溫濕度傳感器DHT11程序 [打印本頁]

作者: 蘇海    時間: 2020-2-18 09:07
標題: 基于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)





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 成人激情视频在线观看 | www.天天操.com | 亚洲精品中文在线观看 | 久久99精品久久久久蜜桃tv | 日韩在线免费 | 视频一区二区三区中文字幕 | 日美女逼逼 | 美女在线观看av | 综合久久久 | 亚洲va欧美va天堂v国产综合 | 在线观看中文字幕视频 | 亚洲福利在线观看 | 欧美日韩成人在线 | 99国产欧美 | 亚洲欧美日韩精品久久亚洲区 | 最近最新中文字幕 | 天天躁人人躁人人躁狂躁 | 国产成人精品在线 | 国产乱码精品一区二三赶尸艳谈 | 久久99精品久久久久久 | 亚洲 欧美 激情 另类 校园 | 黄色一级视频免费 | 久久久综合网 | 国产精品免费观看视频 | 丝袜天堂 | 亚洲精品在线播放 | 久久精品国产一区二区三区 | 欧日韩在线观看 | 一级片免费视频 | 国产成人免费在线观看 | 精品国产一区探花在线观看 | 奇米影视首页 | 日本爱爱 | 99久热在线精品视频观看 | 久久国产精品免费视频 | 亚洲精品久久久久久国产精华液 | 黄色在线播放视频 | 成人性视频免费网站 | aaa在线观看 | 中文一区 | 91久久精品一区二区二区 |