找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5049|回复: 4
收起左侧

SHT11温湿度传感器的单片机驱动程序 有成品图

[复制链接]
ID:140725 发表于 2017-3-5 23:56 | 显示全部楼层 |阅读模式
SHT11是一个一体化的温湿度传感器.
下图是SHT11温度测量的结果:
204847baeod4xxoz300o8q.jpg.thumb.jpg


下图是SHT11湿度测量的结果:
2048457717r5i45rhiyfj3.jpg.thumb.jpg

SHT11测温度的程序:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #include<math.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. sbit led1=P1^7;
  7. sbit led2=P1^6;
  8. sbit DATA=P1^1;
  9. sbit SCK=P1^0;
  10. #define noACK 0
  11. #define ACK 1 //adr command r/w
  12. #define STATUS_REG_W 0x06 //0000 0110
  13. #define STATUS_REG_R 0x07 //0000 0111
  14. #define MEASURE_TEMP 0x03 //0000 0011
  15. #define MEASURE_HUMI 0x05 //0000 0101
  16. #define RESET 0x1e        //0001 1110
  17. sbit dula=P2^6;
  18. sbit wela=P2^7;
  19. uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  20. uchar code table_dian[]={ 0xbf,0x86,0xdb,0xcf, 0xe6,0xed,0xfd,0x87, 0xff,0xef,0xf7,0xfc,0xb9,0xd1,0xf9,0xf1};
  21. uchar error=0;

  22. void delayms(uint z)
  23. {
  24.         uint i,j;
  25.         for(i=z;i>0;i--)
  26.         for( j=110;j>0;j--);
  27. }

  28. //启动时序
  29. void transstart()
  30. {
  31.         SCK=1;
  32.         _nop_();
  33.         DATA=0;
  34.         _nop_();
  35.         SCK=0;
  36.         _nop_();
  37.         _nop_();
  38.         _nop_();
  39.         SCK=1;
  40.         _nop_();
  41.         DATA=1;
  42.         _nop_();
  43.         SCK=0;
  44. }

  45. //写入命令子函数
  46. uchar write_byte(uchar value)
  47. {
  48.         uchar i;
  49.         for(i=0x80;i>0;i=i/2)
  50.         {
  51.                 if(i&value) DATA=1;
  52.                 else DATA=0;
  53.                 SCK=1;
  54.                 _nop_();
  55.                 _nop_();
  56.                 _nop_();
  57.                 SCK=0;
  58.         }
  59.         DATA=1;
  60.         SCK=1;
  61.         error=DATA;
  62.         SCK=0;
  63.         return error;
  64. }

  65. //从传感器读数据
  66. uchar read_byte(bit ack)
  67. {
  68.         uchar i,val=0;
  69.         DATA=1;
  70.         for(i=0x80;i>0;i=i/2)
  71.         {
  72.                 SCK=1;
  73.                 if(DATA) val=val|i;
  74.                 SCK=0;
  75.         }
  76.         DATA=!ack;
  77.         SCK=1;
  78.         _nop_();
  79.         _nop_();
  80.         _nop_();
  81.         SCK=0;
  82.         DATA=1;
  83.         return val;
  84. }

  85. //
  86. void connectionreset()
  87. {
  88.         uchar i;
  89.         DATA=1;
  90.         SCK=0;
  91.         for(i=0;i<9;i++)
  92.         {
  93.                 SCK=1;
  94.                 SCK=0;
  95.         }
  96.         transstart();
  97. }

  98. //测量函数,温度和湿度
  99. uint measure()
  100. {
  101.         uchar value_1,value_2;
  102.         uint tempvalue;
  103.         transstart();
  104.         error+=write_byte(MEASURE_TEMP);
  105.         if(error!=0) connectionreset();
  106.         else
  107.         {
  108.                 while(DATA==1)
  109.                 _nop_();
  110.                 if(DATA==0)
  111.                 {
  112.                         value_1=read_byte(ACK);
  113.                         value_2=read_byte(noACK);
  114.                         tempvalue=value_2+value_1*256;
  115.                 }
  116.                 //转换成 16 位的 int 型
  117.                 else error=1;
  118.         }
  119.         return tempvalue;
  120. }

  121. //数码管显示函数
  122. void display(float dis_value)
  123. {
  124.         float value;
  125.         int qian,bai,shi,ge;
  126.         value=dis_value*100;
  127.         qian=(int)value/1000;
  128.         bai=(int)value%1000/100;
  129.         shi=(int)value%100/10;
  130.         ge=(int)value%10;
  131.        
  132.         dula=1;
  133.         P0=table[qian];
  134.         dula=0;
  135.         P0=0xff;
  136.         wela=1;
  137.         P0=0xfe;
  138.         wela=0;
  139.         delayms(3);

  140.         dula=1;
  141.         P0=table_dian[bai];
  142.         dula=0;
  143.         P0=0xff;
  144.         wela=1;
  145.         P0=0xfd;
  146.         wela=0;
  147.         delayms(3);

  148.         dula=1;
  149.         P0=table[shi];
  150.         dula=0;
  151.         P0=0xff;
  152.         wela=1;
  153.         P0=0xfb;
  154.         wela=0;
  155.         delayms(3);

  156.         dula=1;
  157.         P0=table[ge];
  158.         dula=0;
  159.         P0=0xff;
  160.         wela=1;
  161.         P0=0xf7;
  162.         wela=0;
  163.         delayms(3);

  164.         wela=1;
  165.         P0=0xff;
  166.         wela=0;
  167. }

  168. //计算温度值子函数
  169. float calc_temp(uint tempvalue)
  170. {
  171.         uchar i;
  172.         const float d1=-39.9;
  173.         const float d2=+0.01;
  174.         float temp_final;
  175.         tempvalue=tempvalue&0x3fff; //取出低 14 位
  176.         temp_final=d1+d2*((float)tempvalue);
  177.         for(i=100;i>0;i--)
  178.                 display(temp_final);
  179.         return temp_final;
  180. }

  181. //主函数
  182. void main()
  183. {
  184.         float dis_tempvalue;
  185.         uint tempvalue;
  186.         while(1)
  187.         {
  188.                 connectionreset();
  189.                 error=0;
  190.                 tempvalue=measure();
  191.                 if(error==0)
  192.                 {
  193.                         led1=0;
  194.                         delayms(200);
  195.                         led1=1;
  196.                         delayms(200);
  197.                         dis_tempvalue=calc_temp(tempvalue);
  198.                 }
  199.                 else
  200.                 {
  201.                         continue;
  202.                 }
  203.         }
  204. }
复制代码



0.png

下载:
测湿度.rar (21.71 KB, 下载次数: 52)

测温度.rar (20.34 KB, 下载次数: 29)

相关帖子

回复

使用道具 举报

ID:168456 发表于 2017-3-6 09:30 | 显示全部楼层
我这边有飞思卡尔的,有人用吗
回复

使用道具 举报

ID:151348 发表于 2017-3-6 15:44 | 显示全部楼层
绽放吧... 发表于 2017-3-6 09:30
我这边有飞思卡尔的,有人用吗

飞思卡尔的温湿度传感器?
回复

使用道具 举报

ID:312978 发表于 2019-7-24 15:54 | 显示全部楼层
谢谢!分享!
回复

使用道具 举报

ID:312978 发表于 2019-7-25 14:52 | 显示全部楼层
温湿度传感器?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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