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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于DHT11的溫度傳輸系統程序(51單片機)

[復制鏈接]
跳轉到指定樓層
樓主
ID:217773 發表于 2017-7-7 09:45 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
           課程設計自己調試成功的一個DHT11的溫濕度傳輸程序,用到了串口通訊,加入了算法,可以在上位機上顯示。
下載:
DHT11程序.docx (13.48 KB, 下載次數: 7)


  1. //****************************************************************//
  2. // DHT11使用范例
  3. //單片機 : AT89S52 或 STC89C52RC
  4. // 功能 :串口發送溫濕度數據 波特率 9600
  5. //硬件連接: P2.0口為通訊口連接DHT11,DHT11的電源和地連接單片機的電源和地,單片機串口加MAX232連接電腦
  6. #include <reg51.h>
  7. #include <intrins.h>
  8. //
  9. typedef unsigned char U8; /* defined for unsigned 8-bits integer variable 無符號8位整型變量 */
  10. typedef signed char S8; /* defined for signed 8-bits integer variable 有符號8位整型變量 */
  11. typedef unsigned int U16; /* defined for unsigned 16-bits integer variable 無符號16位整型變量 */
  12. typedef signed int S16; /* defined for signed 16-bits integer variable 有符號16位整型變量 */
  13. typedef unsigned long U32; /* defined for unsigned 32-bits integer variable 無符號32位整型變量 */
  14. typedef signed long S32; /* defined for signed 32-bits integer variable 有符號32位整型變量 */
  15. typedef float F32; /* single precision floating point variable (32bits) 單精度浮點數(32位長度) */
  16. typedef double F64; /* double precision floating point variable (64bits) 雙精度浮點數(64位長度) */
  17. //
  18. #define uchar unsigned char
  19. #define uint unsigned int
  20. #define Data_0_time 4
  21. //--------------- --------------------//
  22. //----------------IO口定義區--------------------//
  23. //-------------- --------------------------//
  24. sbit P2_0 = P2^0 ;//DATA
  25. sbit P2_1 = P2^1 ;
  26. sbit P2_2 = P2^2 ;
  27. sbit P2_3 = P2^3 ;
  28. //--------- ------------------------------------//
  29. //----------------定義區--------------------//
  30. //--------------------- -----------------------//
  31. U8 U8FLAG,k;
  32. U8 U8count,U8temp;
  33. U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
  34. U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
  35. U8 U8comdata;
  36. U8 outdata[5]; //定義發送的字節數
  37. U8 indata[5];
  38. U8 count, count_r=0;
  39. U8 str[5]={"RS232"};
  40. U16 U16temp1,U16temp2;
  41. SendData(U8 *a)
  42. {
  43. outdata[0] = a[0];
  44. outdata[1] = a[1];
  45. outdata[2] = a[2];
  46. outdata[3] = a[3];
  47. outdata[4] = a[4];
  48. count = 1;
  49. SBUF=outdata[0];
  50. }
  51. void Delay(U16 j)
  52. { U8 i;
  53. for(;j>0;j--)
  54. {
  55. for(i=0;i<27;i++);
  56. }
  57. }
  58. void Delay_10us(void)
  59. {
  60. U8 i;
  61. i--;
  62. i--;
  63. i--;
  64. i--;
  65. i--;
  66. i--;
  67. }
  68. void COM(void)
  69. {
  70. U8 i;
  71. for(i=0;i<8;i++)
  72. {
  73. U8FLAG=2;
  74. //----------------------
  75. P2_1=0 ; //T
  76. P2_1=1 ; //T
  77. //----------------------
  78. while((!P2_0)&&U8FLAG++);
  79. Delay_10us();
  80. Delay_10us();
  81. // Delay_10us();
  82. U8temp=0;
  83. if(P2_0)U8temp=1;
  84. U8FLAG=2;
  85. while((P2_0)&&U8FLAG++);
  86. //----------------------
  87. P2_1=0 ; //T
  88. P2_1=1 ; //T
  89. //----------------------
  90. //超時則跳出for循環
  91. if(U8FLAG==1)break;
  92. //判斷數據位是0還是1
  93. // 如果高電平高過預定0高電平值則數據位為 1
  94. U8comdata<<=1;
  95. U8comdata|=U8temp; //0
  96. }//rof
  97. }
  98. //------------  --------------------
  99. //-----濕度讀取子程序 ------------
  100. //----------------------  ----------
  101. //----以下變量均為全局變量--------
  102. //----溫度高8位== U8T_data_H------
  103. //----溫度低8位== U8T_data_L------
  104. //----濕度高8位== U8RH_data_H-----
  105. //----濕度低8位== U8RH_data_L-----
  106. //----校驗 8位 == U8checkdata-----
  107. //----調用相關子程序如下----------
  108. //---- Delay();, Delay_10us();COM();
  109. //---------------------    -----------
  110. void RH(void)
  111. {
  112. //主機拉低18ms
  113. P2_0=0;
  114. Delay(180);
  115. P2_0=1;
  116. //總線由上拉電阻拉高 主機延時20us
  117. Delay_10us();
  118. Delay_10us();
  119. Delay_10us();
  120. Delay_10us();
  121. //主機設為輸入 判斷從機響應信號
  122. P2_0=1;
  123. //判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行
  124. if(!P2_0) //T !
  125. {
  126. U8FLAG=2;
  127. //判斷從機是否發出 80us 的低電平響應信號是否結束
  128. while((!P2_0)&&U8FLAG++);
  129. U8FLAG=2;
  130. //判斷從機是否發出 80us 的高電平,如發出則進入數據接收狀態
  131. while((P2_0)&&U8FLAG++);
  132. //數據接收狀態
  133. COM();
  134. U8RH_data_H_temp=U8comdata;
  135. COM();
  136. U8RH_data_L_temp=U8comdata;
  137. COM();
  138. U8T_data_H_temp=U8comdata;
  139. COM();
  140. U8T_data_L_temp=U8comdata;
  141. COM();
  142. U8checkdata_temp=U8comdata;
  143. P2_0=1;
  144. //數據校驗
  145. U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
  146. if(U8temp==U8checkdata_temp)
  147. {
  148. U8RH_data_H=U8RH_data_H_temp;
  149. U8RH_data_L=U8RH_data_L_temp;
  150. U8T_data_H=U8T_data_H_temp;
  151. U8T_data_L=U8T_data_L_temp;
  152. U8checkdata=U8checkdata_temp;
  153. }//fi
  154. }//fi
  155. }

  156. //---------------------------------------
  157. //main()功能描述: AT89C51 11.0592MHz 串口發
  158. //送溫濕度數據,波特率 9600

  159. //----------------------------------------------
  160. void main()
  161. {
  162. //U8 i,j;
  163. //uchar str[6]={"RS232"};
  164. /* 系統初始化 */
  165. TMOD = 0x20; //定時器T1使用工作方式2
  166. TH1 = 253; // 設置初值
  167. TL1 = 253;
  168. TR1 = 1; // 開始計時
  169. SCON = 0x50; //工作方式1,波特率9600bps,允許接收
  170. ES = 1;
  171. EA = 1; // 打開所以中斷
  172. TI = 0;
  173. RI = 0;
  174. SendData(str) ; //發送到串口
  175. Delay(1); //延時100US(12M晶振)
  176. while(1)
  177. {
  178. //------------------------
  179. //調用溫濕度讀取子程序
  180. RH();
  181. //串口顯示程序
  182. //--------------------------
  183. str[0]=U8RH_data_H;
  184. str[1]=U8RH_data_L;
  185. str[2]=U8T_data_H;
  186. str[3]=U8T_data_L;
  187. str[4]=U8checkdata;
  188. SendData(str) ; //發送到串口
  189. //讀取模塊數據周期不易小于 2S
  190. Delay(20000);
  191. }//elihw
  192. }// main
  193. void RSINTR() interrupt 4 using 2
  194. {
  195. U8 InPut3;
  196. if(TI==1) //發送中斷
  197. {
  198. TI=0;
  199. if(count!=5) //發送完5位數據
  200. {
  201. SBUF= outdata[count];
  202. count++;
  203. }
  204. }
  205. if(RI==1) //接收中斷
  206. {
  207. InPut3=SBUF;
  208. indata[count_r]=InPut3;
  209. count_r++;
  210. RI=0;
  211. if (count_r==5)//接收完4位數據
  212. {
  213. //數據接收完畢處理。
  214. count_r=0;
  215. str[0]=indata[0];
  216. str[1]=indata[1];
  217. str[2]=indata[2];
  218. str[3]=indata[3];
  219. str[4]=indata[4];
  220. P0=0;
  221. }
  222. }
  223. }
復制代碼


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:780711 發表于 2020-6-16 21:24 | 只看該作者
請問一下顯示的結果是什么樣子的呀
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩一区二区视频 | 91毛片在线看 | 成人在线a | 亚洲视频精品 | 久久69精品久久久久久久电影好 | 罗宾被扒开腿做同人网站 | 欧美不卡一区二区 | 久久精品国产a三级三级三级 | 久久看看 | 欧美成人免费电影 | 国产精品不卡一区 | 欧美日韩国产免费 | 国产成人久久精品一区二区三区 | 亚洲国产一区二区三区 | 日韩精品一区二区三区四区 | 欧美中文在线 | 毛片一级片 | 国产ts一区 | 国产精品久久av | 国产精品免费观看视频 | 色.com| 色接久久| 亚洲午夜视频在线观看 | 日本精品视频一区二区 | 精品久久久久久久久久 | 久久久久国产一区二区三区四区 | 天天看天天操 | 一区二区三区免费 | 久久人爽 | 国产高清视频一区二区 | 岛国在线免费观看 | 国产良家自拍 | 欧美福利 | 日韩中文字幕在线观看 | 国产传媒视频在线观看 | 久久久黑人 | 亚洲 欧美 另类 日韩 | 国产在线观看一区二区 | 日韩免| 亚洲成人高清 | 成人免费影院 |