找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5800|回复: 12
打印 上一主题 下一主题
收起左侧

SHT10农田自动灌溉系统的仿真设计

  [复制链接]
跳转到指定楼层
楼主
基于51单片机的农田自动灌溉系统的设计SHT10传感器的proteus仿真原理图如下:


单片机源程序如下:
  1. #include"SHT10.h"
  2. #define uchar unsigned char
  3. /*--------------------------------------
  4. ;启动传输函数
  5. ;-------------------------------------*/
  6. void s_transstart(void)
  7. {
  8. DATA=1; SCK=0; //Initial state
  9. _nop_();
  10. SCK=1;
  11. _nop_();
  12. DATA=0;
  13. _nop_();
  14. SCK=0;
  15. _nop_();_nop_();_nop_();
  16. SCK=1;
  17. _nop_();
  18. DATA=1;
  19. _nop_();
  20. SCK=0;
  21. }

  22. /*--------------------------------------
  23. ;连接复位函数
  24. ;-------------------------------------*/
  25. void s_connectionreset(void)
  26. {
  27. unsigned char i;
  28. DATA=1; SCK=0;
  29. for(i=0;i<9;i++)
  30. {
  31. SCK=1;
  32. SCK=0;
  33. }
  34. s_transstart();
  35. }

  36. /*--------------------------------------
  37. ;SHT10写函数
  38. ;-------------------------------------*/
  39. char s_write_byte(unsigned char value)
  40. {
  41. unsigned char i,error=0;
  42. for (i=0x80;i>0;i/=2) //shift bit for masking
  43. {
  44. if (i & value) DATA=1; //masking value with i , write to SENSI-BU
  45. else DATA=0;
  46. SCK=1; //clk for SENSI-BUS
  47. _nop_();_nop_();_nop_(); //pulswith approx. 3 us
  48. SCK=0;
  49. }
  50. DATA=1; //release DATA-line
  51. SCK=1; //clk #9 for ack
  52. error=DATA; //check ack (DATA will be pulled down by SHT11),DATA在第9个上升沿将被SHT10自动下拉为低电
  53. _nop_();_nop_();_nop_();
  54. SCK=0;
  55. DATA=1; //release DATA-line
  56. return error; //error=1 in case of no acknowledge //返回:0成功,1失败
  57. }

  58. /*--------------------------------------
  59. ;SHT10读函数
  60. ;-------------------------------------*/
  61. char s_read_byte(unsigned char ack)
  62. {
  63. unsigned char i,val=0;
  64. DATA=1;
  65. for (i=0x80;i>0;i/=2)
  66. { SCK=1;
  67. if (DATA) val=(val | i);
  68. _nop_();_nop_();_nop_();
  69. SCK=0;
  70. }
  71. if(ack==1)DATA=0;
  72. else DATA=1; //如果是校验(ack==0),读取完后结束通讯
  73. _nop_();_nop_();_nop_();
  74. SCK=1;
  75. _nop_();_nop_();_nop_();
  76. SCK=0;
  77. _nop_();_nop_();_nop_();
  78. DATA=1;
  79. return val;
  80. }
  81. /*--------------------------------------
  82. ;测量温湿度函数
  83. ;-------------------------------------*/
  84. char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode)
  85. {
  86. unsigned error=0;
  87. unsigned int i;

  88. s_transstart();
  89. switch(mode)
  90. {
  91.   case TEMP : error+=s_write_byte(MEASURE_TEMP);
  92.   break;
  93.   case HUMI : error+=s_write_byte(MEASURE_HUMI);
  94.   break;
  95.   default :
  96.   break;
  97. }
  98. for (i=0;i<65535;i++)
  99. if(DATA==0) break;
  100. if(DATA) error+=1;
  101. *(p_value) =s_read_byte(ACK);
  102. *(p_value+1)=s_read_byte(ACK);
  103. *p_checksum =s_read_byte(noACK);
  104. return error;
  105. }
  106. /*--------------------------------------
  107. ;温湿度补偿函数
  108. ;-------------------------------------*/
  109. void calc_SHT10(float *p_humidity ,float *p_temperature)
  110. {
  111. const float C1=-4.0;
  112. const float C2=+0.0405;
  113. const float C3=-0.0000028;
  114. const float T1=+0.01;
  115. const float T2=+0.00008;
  116. float rh=*p_humidity;
  117. float t=*p_temperature;
  118. float rh_lin;
  119. float rh_true;
  120. float t_C;

  121. t_C=t*0.01 - 40;


  122. rh_lin=C3*rh*rh + C2*rh + C1;
  123. rh_true=(t_C-25)*(T1+T2*rh)+rh_lin;
  124. if(rh_true>100)rh_true=100;
  125. if(rh_true<0.1)rh_true=0.1;
  126. *p_temperature=t_C;
  127. *p_humidity=rh_true+C1;
  128. }


  129. //读状态寄存器
  130. char s_read_statusreg(unsigned char*p_value, unsigned char *p_checksum)
  131. //----------------------------------------------------------------------------------
  132. // reads the status register with checksum(8-bit)
  133. {
  134.        unsigned char error=0;
  135.        s_transstart();                   //transmission start
  136.        error=s_write_byte(STATUS_REG_R);//send command to sensor
  137.        *p_value=s_read_byte(ACK);        //read status register (8-bit)
  138.        *p_checksum=s_read_byte(noACK);   //read checksum (8-bit)
  139.        return error;                     //error=1 in case of no response form the sensor
  140. }

  141. //写状态寄存器
  142. char s_write_statusreg(unsigned char*p_value)
  143. // writes the status register with checksum(8-bit)
  144. {
  145.        unsigned char error=0;
  146.        s_transstart();                   //transmission start
  147.        error+=s_write_byte(STATUS_REG_W);//sendcommand to sensor
  148.        error+=s_write_byte(*p_value);    //send value of status register
  149.        return error;                     //error>=1 in case of no response form the sensor
  150. }

  151. ……………………

  152. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
sht10.zip (343.6 KB, 下载次数: 250)


评分

参与人数 2黑币 +55 收起 理由
wangshuang + 5 共享资料的黑币奖励!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏7 分享淘帖 顶5 踩
回复

使用道具 举报

沙发
ID:243124 发表于 2017-10-26 14:10 来自手机 | 只看该作者
大神太厉害了
回复

使用道具 举报

板凳
ID:168523 发表于 2017-10-28 17:42 | 只看该作者
太棒了
回复

使用道具 举报

地板
ID:240522 发表于 2017-10-28 18:25 | 只看该作者
作为了解,看看,谢谢楼主分享!!!
回复

使用道具 举报

5#
ID:265988 发表于 2018-1-21 13:42 | 只看该作者
真实的·硬件有通过吗?
回复

使用道具 举报

6#
ID:493112 发表于 2019-3-18 20:48 | 只看该作者
厉害了,大神
回复

使用道具 举报

7#
ID:733698 发表于 2020-4-20 21:03 | 只看该作者
要什么条件才会喷灌或排水,设置了温湿度都不会排水?
回复

使用道具 举报

8#
ID:733698 发表于 2020-4-27 16:59 | 只看该作者
怎么改成lcd1602
回复

使用道具 举报

9#
ID:740050 发表于 2020-5-1 12:47 | 只看该作者
euihddd 发表于 2020-4-20 21:03
要什么条件才会喷灌或排水,设置了温湿度都不会排水?

现在知道了吗?求解
回复

使用道具 举报

10#
ID:740050 发表于 2020-5-1 12:50 | 只看该作者
euihddd 发表于 2020-4-20 21:03
要什么条件才会喷灌或排水,设置了温湿度都不会排水?

湿度>=70%   排水
回复

使用道具 举报

11#
ID:728467 发表于 2020-5-1 22:33 来自手机 | 只看该作者
离开的时间 发表于 2020-5-1 12:50
湿度>=70%   排水

能不能改成用LCD1602,真实的硬件能用不?
回复

使用道具 举报

12#
ID:382728 发表于 2021-11-20 14:03 | 只看该作者

大神太厉害了
回复

使用道具 举报

13#
ID:985245 发表于 2021-11-27 19:40 | 只看该作者
请问可以讲解一下农田灌溉系统的各个电路的作用和实现的功能吗?谢谢啦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表