找回密码
 注册
关于网站域名变更的通知
查看: 185|回复: 3
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-6-16 11:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
基于51单片机的农田自动灌溉系统的设计SHT10传感器的proteus仿真原理图如下:7 g' E  F: L; N5 k2 y* h

5 o$ N% w) }3 Y  }) \: y) c' z  W
# q: y6 N+ E4 e2 h单片机源程序如下:
. l# a, v7 a% S2 N/ T% o# ]. q
  • #include"SHT10.h"
  • #define uchar unsigned char
  • /*--------------------------------------
  • ;启动传输函数
  • ;-------------------------------------*/
  • void s_transstart(void)
  • {
  • DATA=1; SCK=0; //Initial state
  • _nop_();
  • SCK=1;
  • _nop_();
  • DATA=0;
  • _nop_();
  • SCK=0;
  • _nop_();_nop_();_nop_();
  • SCK=1;
  • _nop_();
  • DATA=1;
  • _nop_();
  • SCK=0;
  • }
  • /*--------------------------------------
  • ;连接复位函数
  • ;-------------------------------------*/
  • void s_connectionreset(void)
  • {
  • unsigned char i;
  • DATA=1; SCK=0;
  • for(i=0;i<9;i++)
  • {
  • SCK=1;
  • SCK=0;
  • }
  • s_transstart();
  • }
  • /*--------------------------------------
  • ;SHT10写函数
  • ;-------------------------------------*/
  • char s_write_byte(unsigned char value)
  • {
  • unsigned char i,error=0;
  • for (i=0x80;i>0;i/=2) //shift bit for masking
  • {
  • if (i & value) DATA=1; //masking value with i , write to SENSI-BU
  • else DATA=0;
  • SCK=1; //clk for SENSI-BUS
  • _nop_();_nop_();_nop_(); //pulswith approx. 3 us
  • SCK=0;
  • }
  • DATA=1; //release DATA-line
  • SCK=1; //clk #9 for ack
  • error=DATA; //check ack (DATA will be pulled down by SHT11),DATA在第9个上升沿将被SHT10自动下拉为低电
  • _nop_();_nop_();_nop_();
  • SCK=0;
  • DATA=1; //release DATA-line
  • return error; //error=1 in case of no acknowledge //返回:0成功,1失败
  • }
  • /*--------------------------------------
  • ;SHT10读函数
  • ;-------------------------------------*/
  • char s_read_byte(unsigned char ack)
  • {
  • unsigned char i,val=0;
  • DATA=1;
  • for (i=0x80;i>0;i/=2)
  • { SCK=1;
  • if (DATA) val=(val | i);
  • _nop_();_nop_();_nop_();
  • SCK=0;
  • }
  • if(ack==1)DATA=0;
  • else DATA=1; //如果是校验(ack==0),读取完后结束通讯
  • _nop_();_nop_();_nop_();
  • SCK=1;
  • _nop_();_nop_();_nop_();
  • SCK=0;
  • _nop_();_nop_();_nop_();
  • DATA=1;
  • return val;
  • }
  • /*--------------------------------------
  • ;测量温湿度函数
  • ;-------------------------------------*/
  • char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode)
  • {
  • unsigned error=0;
  • unsigned int i;
  • s_transstart();
  • switch(mode)
  • {
  •   case TEMP : error+=s_write_byte(MEASURE_TEMP);
  •   break;
  •   case HUMI : error+=s_write_byte(MEASURE_HUMI);
  •   break;
  •   default :
  •   break;
  • }
  • for (i=0;i<65535;i++)
  • if(DATA==0) break;
  • if(DATA) error+=1;
  • *(p_value) =s_read_byte(ACK);
  • *(p_value+1)=s_read_byte(ACK);
  • *p_checksum =s_read_byte(noACK);
  • return error;
  • }
  • /*--------------------------------------
  • ;温湿度补偿函数
  • ;-------------------------------------*/
  • void calc_SHT10(float *p_humidity ,float *p_temperature)
  • {
  • const float C1=-4.0;
  • const float C2=+0.0405;
  • const float C3=-0.0000028;
  • const float T1=+0.01;
  • const float T2=+0.00008;
  • float rh=*p_humidity;
  • float t=*p_temperature;
  • float rh_lin;
  • float rh_true;
  • float t_C;
  • t_C=t*0.01 - 40;
  • rh_lin=C3*rh*rh + C2*rh + C1;
  • rh_true=(t_C-25)*(T1+T2*rh)+rh_lin;
  • if(rh_true>100)rh_true=100;
  • if(rh_true<0.1)rh_true=0.1;
  • *p_temperature=t_C;
  • *p_humidity=rh_true+C1;
  • }
  • //读状态寄存器
  • char s_read_statusreg(unsigned char*p_value, unsigned char *p_checksum)
  • //----------------------------------------------------------------------------------
  • // reads the status register with checksum(8-bit)
  • {
  •        unsigned char error=0;
  •        s_transstart();                   //transmission start
  •        error=s_write_byte(STATUS_REG_R);//send command to sensor
  •        *p_value=s_read_byte(ACK);        //read status register (8-bit)
  •        *p_checksum=s_read_byte(noACK);   //read checksum (8-bit)
  •        return error;                     //error=1 in case of no response form the sensor
  • }
  • //写状态寄存器
  • char s_write_statusreg(unsigned char*p_value)
  • // writes the status register with checksum(8-bit)
  • {
  •        unsigned char error=0;
  •        s_transstart();                   //transmission start
  •        error+=s_write_byte(STATUS_REG_W);//sendcommand to sensor
  •        error+=s_write_byte(*p_value);    //send value of status register
  •        return error;                     //error>=1 in case of no response form the sensor
  • }
  • ……………………5 R- m, O: N# c

$ g& x: K$ g3 v# I* U) @& w

该用户从未签到

2#
发表于 2022-6-16 11:25 | 只看该作者
- x/ B! j; c1 M4 c0 V! T3 n
学习学习,了解了解。
, \2 _; Q. `) u# m4 pThanks♪(・ω・)ノ

该用户从未签到

3#
发表于 2022-6-16 13:58 | 只看该作者
* v! D3 K7 I/ B! \) C
学习了解。1 m1 b. J8 m' U, c1 y9 L
Thanks♪(・ω・)ノ

该用户从未签到

4#
发表于 2022-6-16 14:49 | 只看该作者
了解,学习。(*^▽^*)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-19 02:24 , Processed in 0.109375 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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