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

標(biāo)題: 基于DHT11的溫度傳輸系統(tǒng)程序(51單片機(jī)) [打印本頁(yè)]

作者: 電氣小白    時(shí)間: 2017-7-7 09:45
標(biāo)題: 基于DHT11的溫度傳輸系統(tǒng)程序(51單片機(jī))
           課程設(shè)計(jì)自己調(diào)試成功的一個(gè)DHT11的溫濕度傳輸程序,用到了串口通訊,加入了算法,可以在上位機(jī)上顯示。
下載:
DHT11程序.docx (13.48 KB, 下載次數(shù): 7)


  1. //****************************************************************//
  2. // DHT11使用范例
  3. //單片機(jī) : AT89S52 或 STC89C52RC
  4. // 功能 :串口發(fā)送溫濕度數(shù)據(jù) 波特率 9600
  5. //硬件連接: P2.0口為通訊口連接DHT11,DHT11的電源和地連接單片機(jī)的電源和地,單片機(jī)串口加MAX232連接電腦
  6. #include <reg51.h>
  7. #include <intrins.h>
  8. //
  9. typedef unsigned char U8; /* defined for unsigned 8-bits integer variable 無符號(hào)8位整型變量 */
  10. typedef signed char S8; /* defined for signed 8-bits integer variable 有符號(hào)8位整型變量 */
  11. typedef unsigned int U16; /* defined for unsigned 16-bits integer variable 無符號(hào)16位整型變量 */
  12. typedef signed int S16; /* defined for signed 16-bits integer variable 有符號(hào)16位整型變量 */
  13. typedef unsigned long U32; /* defined for unsigned 32-bits integer variable 無符號(hào)32位整型變量 */
  14. typedef signed long S32; /* defined for signed 32-bits integer variable 有符號(hào)32位整型變量 */
  15. typedef float F32; /* single precision floating point variable (32bits) 單精度浮點(diǎn)數(shù)(32位長(zhǎng)度) */
  16. typedef double F64; /* double precision floating point variable (64bits) 雙精度浮點(diǎn)數(shù)(64位長(zhǎng)度) */
  17. //
  18. #define uchar unsigned char
  19. #define uint unsigned int
  20. #define Data_0_time 4
  21. //--------------- --------------------//
  22. //----------------IO口定義區(qū)--------------------//
  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. //----------------定義區(qū)--------------------//
  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]; //定義發(fā)送的字節(jié)數(shù)
  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. //超時(shí)則跳出for循環(huán)
  91. if(U8FLAG==1)break;
  92. //判斷數(shù)據(jù)位是0還是1
  93. // 如果高電平高過預(yù)定0高電平值則數(shù)據(jù)位為 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. //----校驗(yàn) 8位 == U8checkdata-----
  107. //----調(diào)用相關(guān)子程序如下----------
  108. //---- Delay();, Delay_10us();COM();
  109. //---------------------    -----------
  110. void RH(void)
  111. {
  112. //主機(jī)拉低18ms
  113. P2_0=0;
  114. Delay(180);
  115. P2_0=1;
  116. //總線由上拉電阻拉高 主機(jī)延時(shí)20us
  117. Delay_10us();
  118. Delay_10us();
  119. Delay_10us();
  120. Delay_10us();
  121. //主機(jī)設(shè)為輸入 判斷從機(jī)響應(yīng)信號(hào)
  122. P2_0=1;
  123. //判斷從機(jī)是否有低電平響應(yīng)信號(hào) 如不響應(yīng)則跳出,響應(yīng)則向下運(yùn)行
  124. if(!P2_0) //T !
  125. {
  126. U8FLAG=2;
  127. //判斷從機(jī)是否發(fā)出 80us 的低電平響應(yīng)信號(hào)是否結(jié)束
  128. while((!P2_0)&&U8FLAG++);
  129. U8FLAG=2;
  130. //判斷從機(jī)是否發(fā)出 80us 的高電平,如發(fā)出則進(jìn)入數(shù)據(jù)接收狀態(tài)
  131. while((P2_0)&&U8FLAG++);
  132. //數(shù)據(jù)接收狀態(tài)
  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. //數(shù)據(jù)校驗(yàn)
  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 串口發(fā)
  158. //送溫濕度數(shù)據(jù),波特率 9600

  159. //----------------------------------------------
  160. void main()
  161. {
  162. //U8 i,j;
  163. //uchar str[6]={"RS232"};
  164. /* 系統(tǒng)初始化 */
  165. TMOD = 0x20; //定時(shí)器T1使用工作方式2
  166. TH1 = 253; // 設(shè)置初值
  167. TL1 = 253;
  168. TR1 = 1; // 開始計(jì)時(shí)
  169. SCON = 0x50; //工作方式1,波特率9600bps,允許接收
  170. ES = 1;
  171. EA = 1; // 打開所以中斷
  172. TI = 0;
  173. RI = 0;
  174. SendData(str) ; //發(fā)送到串口
  175. Delay(1); //延時(shí)100US(12M晶振)
  176. while(1)
  177. {
  178. //------------------------
  179. //調(diào)用溫濕度讀取子程序
  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) ; //發(fā)送到串口
  189. //讀取模塊數(shù)據(jù)周期不易小于 2S
  190. Delay(20000);
  191. }//elihw
  192. }// main
  193. void RSINTR() interrupt 4 using 2
  194. {
  195. U8 InPut3;
  196. if(TI==1) //發(fā)送中斷
  197. {
  198. TI=0;
  199. if(count!=5) //發(fā)送完5位數(shù)據(jù)
  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位數(shù)據(jù)
  212. {
  213. //數(shù)據(jù)接收完畢處理。
  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. }
復(fù)制代碼



作者: lqqqqqqqq    時(shí)間: 2020-6-16 21:24
請(qǐng)問一下顯示的結(jié)果是什么樣子的呀





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日韩性生活网 | 亚洲国产成人久久综合一区,久久久国产99 | 久久精品国产久精国产 | 看av电影 | 久久免费视频1 | 久久国产秒 | 成人免费视频网址 | 秋霞精品 | 91高清免费观看 | 成人在线视频免费观看 | 久久综合入口 | 欧美伊人| 欧美国产视频一区二区 | 福利片一区二区 | 亚洲福利av | 国产99免费 | 草久视频 | 91精品一区二区三区久久久久久 | 欧美激情一区二区三区 | 国产精品美女久久久久久久网站 | 亚洲欧美国产精品一区二区 | 国产区在线观看 | 久久大陆 | 国产福利视频 | 97国产一区二区精品久久呦 | 日韩一区二区三区精品 | 福利一区二区在线 | 久久av一区 | 黄色精品 | 亚洲一级毛片 | 午夜激情视频在线 | 看a级黄色毛片 | 俺去俺来也www色官网cms | 国产福利资源 | 亚洲日韩中文字幕一区 | av香港经典三级级 在线 | 日韩国产一区二区三区 | 黄色大片免费网站 | 亚洲视频欧美视频 | 在线观看成人免费视频 | 国产精品一区二区在线 |