微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于51单片机SHT11温湿度传感器检测程序(含电路图)

基于51单片机SHT11温湿度传感器检测程序(含电路图)

时间:11-19 来源:互联网 点击:
下面是原理图:

下面是SHT11与MCU连接的典型电路:

下面是源代码:

  1. #include
  2. #include
  3. /********************************************************
  4. 宏定义
  5. ********************************************************/
  6. #define uint unsigned int
  7. #define uchar unsigned char
  8. #define noACK 0
  9. #define ACK 1
  10. #define STATUS_REG_W 0x06
  11. #define STATUS_REG_R 0x07
  12. #define MEASURE_TEMP 0x03
  13. #define MEASURE_HUMI 0x05
  14. #define RESET 0x1e
  15. enum {TEMP,HUMI};
  16. typedef union //定义共用同类型
  17. {
  18. unsigned int i;
  19. float f;
  20. } value;
  21. /********************************************************
  22. 位定义
  23. ********************************************************/
  24. sbit lcdrs=P2^0;
  25. sbit lcdrw=P2^1;
  26. sbit lcden=P2^2;
  27. sbit SCK = P1^0;
  28. sbit DATA = P1^1;
  29. /********************************************************
  30. 变量定义
  31. ********************************************************/
  32. uchar table2[]="SHT11 温湿度检测";
  33. uchar table3[]="温度为: ℃";
  34. uchar table4[]="湿度为:";
  35. uchar table5[]=".";
  36. uchar wendu[6];
  37. uchar shidu[6];
  38. /********************************************************
  39. 1ms延时函数
  40. ********************************************************/
  41. void delay(int z)
  42. {
  43. int x,y;
  44. for(x=z;x>0;x--)
  45. for(y=125;y>0;y--);
  46. }
  47. /********************************************************
  48. 50us延时函数
  49. ********************************************************/
  50. void delay_50us(uint t)
  51. {
  52. uint j;
  53. for(;t>0;t--)
  54. for(j=19;j>0;j--);
  55. }
  56. /********************************************************
  57. 50ms延时函数
  58. ********************************************************/
  59. void delay_50ms(uint t)
  60. {
  61. uint j;
  62. for(;t>0;t--)
  63. for(j=6245;j>0;j--);
  64. }
  65. /********************************************************
  66. 12864液晶写指令
  67. ********************************************************/
  68. void write_12864com(uchar com)
  69. {
  70. lcdrs=0;
  71. lcdrw=0;
  72. delay_50us(1);
  73. P0=com;
  74. lcden=1;
  75. delay_50us(10);
  76. lcden=0;
  77. delay_50us(2);
  78. }
  79. /********************************************************
  80. 12864液晶写数据
  81. ********************************************************/
  82. void write_dat(uchar dat)
  83. {
  84. lcdrs=1;
  85. lcdrw=0;
  86. delay_50us(1);
  87. P0=dat;
  88. lcden=1;
  89. delay_50us(10);
  90. lcden=0;
  91. delay_50us(2);
  92. }
  93. /********************************************************
  94. 12864液晶初始化
  95. ********************************************************/
  96. void init12864lcd(void)
  97. {
  98. delay_50ms(2);
  99. write_12864com(0x30);
  100. delay_50us(4);
  101. write_12864com(0x30);
  102. delay_50us(4);
  103. write_12864com(0x0f);
  104. delay_50us(4);
  105. write_12864com(0x01);
  106. delay_50us(240);
  107. write_12864com(0x06);
  108. delay_50us(10);
  109. write_12864com(0x0c);
  110. delay_50us(10);
  111. }
  112. /********************************************************
  113. 12864液晶显示函数
  114. ********************************************************/
  115. void display1(void)
  116. {
  117. uchar i;
  118. write_12864com(0x80);
  119. for(i=0;i<18;i++)
  120. {
  121. write_dat(table2[i]);
  122. delay_50us(1);
  123. }
  124. }
  125. /********************************************************
  126. 12864液晶显示函数
  127. ********************************************************/
  128. void display2(void)
  129. {
  130. uchar i;
  131. write_12864com(0x90);
  132. for(i=0;i<18;i++)
  133. {
  134. write_dat(table3[i]);
  135. delay_50us(1);
  136. }
  137. }
  138. /********************************************************
  139. 12864液晶显示函数
  140. ********************************************************/
  141. void display3(void)
  142. {
  143. uchar i;
  144. write_12864com(0x88);
  145. for(i=0;i<8;i++)
  146. {
  147. write_dat(table4[i]);
  148. delay_50us(1);
  149. }
  150. }
  151. /********************************************************
  152. 12864液晶显示函数
  153. ********************************************************/
  154. void displaywendu(void)
  155. {
  156. uchar i;
  157. write_12864com(0x94);
  158. for(i=0;i<3;i++)
  159. {
  160. write_dat(wendu[i]);
  161. delay_50us(1);
  162. }
  163. for(i=0;i<1;i++)
  164. {
  165. write_dat(table5[i]);
  166. delay_50us(1);
  167. }
  168. for(i=4;i<5;i++)
  169. {
  170. write_dat(wendu[i]);
  171. delay_50us(1);
  172. }
  173. }
  174. /********************************************************
  175. 12864液晶显示函数
  176. ********************************************************/
  177. void displayshidu(void)
  178. {
  179. uchar i;
  180. write_12864com(0x8C);
  181. for(i=0;i<3;i++)
  182. {
  183. write_dat(shidu[i]);
  184. delay_50u

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top