#include

#include

#include "LCD1602.h"

/********************************************************

宏定义

********************************************************/

#define uint unsigned int

#define uchar unsigned char

#define noACK 0

#define ACK   1

#define STATUS_REG_W 0x06

#define STATUS_REG_R 0x07

#define MEASURE_TEMP 0x03

#define MEASURE_HUMI 0x05

#define RESET        0x1e

enum { TEMP, HUMI };

typedef union               //定义共用同类型

{

unsigned int i;

float f;

} value;

/********************************************************

位定义

********************************************************/

sbit SCK = P1 ^ 0;

sbit DATA = P1 ^ 1;

/********************************************************

变量定义

********************************************************/

uchar wendu[6];

uchar shidu[6];

/********************************************************

50us延时函数

********************************************************/

void delay_50us(uint t)

{

uint j;

for (; t>0; t--)

for (j = 19; j>0; j--);

}

/*******************************************************

液晶显示函数

********************************************************/

void displaywendu(void)

{

uchar i;

write_com(0x80+0x40);

write_data('T');

write_data(':');

for (i = 0; i<3; i++)

{

write_data(wendu[i]);

delay_50us(1);

}

for (i = 0; i<1; i++)

{

write_data('.');

delay_50us(1);

}

for (i = 4; i<5; i++)

{

write_data(wendu[i]);

delay_50us(1);

}

write_data(0xDF);

write_data('C');

}

/********************************************************

液晶显示函数

********************************************************/

void displayshidu(void)

{

uchar i;

write_com(0x80);

write_data('H');

write_data(':');

for (i = 0; i<3; i++)

{

write_data(shidu[i]);

delay_50us(1);

}

for (i = 0; i<1; i++)

{

write_data('.');

delay_50us(1);

}

for (i = 4; i<5; i++)

{

write_data(shidu[i]);

delay_50us(1);

}

write_data('%');

write_data('R');

write_data('H');

}

/********************************************************

SHT11写字节程序

********************************************************/

char s_write_byte(unsigned char value)

{

unsigned char i, error = 0;

for (i = 0x80; i>0; i >>= 1)             //高位为1,循环右移

{

if (i&value) DATA = 1;          //和要发送的数相与,结果为发送的位

else DATA = 0;

SCK = 1;

_nop_(); _nop_(); _nop_();        //延时3us

SCK = 0;

}

DATA = 1;                           //释放数据线

SCK = 1;

error = DATA;                       //检查应答信号,确认通讯正常

_nop_(); _nop_(); _nop_();

SCK = 0;

DATA = 1;

return error;                     //error=1 通讯错误

}

/********************************************************

SHT11读字节程序

********************************************************/

char s_read_byte(unsigned char ack)

{

unsigned char i, val = 0;

DATA = 1;                           //释放数据线

for (i = 0x80; i>0; i >>= 1)             //高位为1,循环右移

{

SCK = 1;

if (DATA) val = (val | i);             //读一位数据线的值

SCK = 0;

}

DATA = !ack;                        //如果是校验,读取完后结束通讯;

SCK = 1;

_nop_(); _nop_(); _nop_();          //延时3us

SCK = 0;

_nop_(); _nop_(); _nop_();

DATA = 1;                           //释放数据线

return val;

}

/********************************************************

SHT11启动传输

********************************************************/

void s_transstart(void)

{

DATA = 1; SCK = 0;                   //准备

_nop_();

SCK = 1;

_nop_();

DATA = 0;

_nop_();

SCK = 0;

_nop_(); _nop_(); _nop_();

SCK = 1;

_nop_();

DATA = 1;

_nop_();

SCK = 0;

}

/********************************************************

SHT11连接复位

********************************************************/

void s_connectionreset(void)

{

unsigned char i;

DATA = 1; SCK = 0;                    //准备

for (i = 0; i<9; i++)                  //DATA保持高,SCK时钟触发9次,发送启动传输,通迅即复位

{

SCK = 1;

SCK = 0;

}

s_transstart();                   //启动传输

}

/********************************************************

SHT11温湿度检测

********************************************************/

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);           //读第一个字节,高字节 (MSB)

*(p_value + 1) = s_read_byte(ACK);          //读第二个字节,低字节 (LSB)

*p_checksum = s_read_byte(noACK);        //read CRC校验码

return error;                   // error=1 通讯错误

}

/********************************************************

SHT11温湿度值标度变换及温度补偿

********************************************************/

void calc_sth10(float *p_humidity, float *p_temperature)

{

const float C1 = -4.0;              // 12位湿度精度 修正公式

const float C2 = +0.0405;           // 12位湿度精度 修正公式

const float C3 = -0.0000028;        // 12位湿度精度 修正公式

const float T1 = +0.01;             // 14位温度精度 5V条件  修正公式

const float T2 = +0.00008;          // 14位温度精度 5V条件  修正公式

float rh = *p_humidity;             // rh:      12位 湿度

float t = *p_temperature;           // t:       14位 温度

float rh_lin;                     // rh_lin: 湿度 linear值

float rh_true;                    // rh_true: 湿度 ture值

float t_C;                        // 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;              //返回湿度结果

}

/********************************************************

主函数

********************************************************/

void main(void)

{

unsigned int temp, humi;

value humi_val, temp_val;        //定义两个共同体,一个用于湿度,一个用于温度

unsigned char error;            //用于检验是否出现错误

unsigned char checksum;         //CRC

LcdInitiate();

……………………

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

c语言对sht11编程,SHT11数字温湿度传感器 含源代码和仿真图相关推荐

  1. 有关温湿度传感器DHT11的C语言编程,数字温湿度传感器DHT11 操作C语言源代码

    1.数字温湿度传感器DHT11 操作C语言源代码 2.带校验 3.带读操作超时处理 //IO定义 #defineP_DataIN_DHT11PB0_IN #defineP_DataOUT_DHT11P ...

  2. DFRobot高精度低功耗数字温湿度传感器SHT40

    SHT40数字温湿度传感器介绍: SHT4X是业内知名的Sensirion公司推出的第四代数字温湿度传感器系列.继承自Sensirion温湿度传感器在业界有口皆和质量,SHT40 可在测量范围内提供始 ...

  3. SHT2x系列数字温湿度传感器

    SHT2x系列数字温湿度传感器 SHT2x系列数字温湿度传感器 SHT2x系列和SHT1x系列相比电压范围缩小了(2.1~3.6V),同时功率明显比之前的系列要小.其它参数基本差不多.最大的区别就是传 ...

  4. 数字温湿度传感器DHT11

    相对湿度和温度测量 全部校准,数字输出 卓越的长期稳定性 无需额外部件 超长的信号传输距离 超低能耗 4引脚安装 DHT11产品概述 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合 ...

  5. STM32应用(八)数字温度传感器DS18B20、数字温湿度传感器DHT11(软件模拟I2C)

    文章目录 1.DS18B20 数字温度传感器实验 1.1 DS18B20简介 1.2 硬件与IO口配置 1.3 实物图与接线 1.4 工程配置 1.5 驱动和检测代码编写 1.5.1 ds18b20. ...

  6. 【正点原子STM32连载】第四十章 DHT11数字温湿度传感器 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

  7. 【正点原子MP157连载】第二十七章 DHT11数字温湿度传感器实验-摘自【正点原子】STM32MP1 M4裸机CubeIDE开发指南

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  8. 小白学数字温湿度传感器DHT11模块

    [本系列文章还将陆续介绍其他的传感器模块,欢迎订阅我的博客] 温度和湿度对我们的生活有极大的影响,对它的测量也是很有必要的. DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器, ...

  9. 数字温湿度传感器(DHT11)

    一.简介 DHT11概述(官方描述) DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器.它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性 ...

最新文章

  1. python模块之email: 电子邮件编码解码 (二、编码邮件)
  2. 翻译:WebApi 认证--用户认证Oauth解析
  3. leetcode 21 Merge Two Sorted Lists
  4. C语言指针函数MFC版Demo
  5. 唯一的hashCodes不足以避免冲突
  6. 利用R和Octave绘制函数图像和求解方程
  7. 樱桃OTC前工程师感恩自白
  8. 最详细的手机资料名词术语解释
  9. 如何在Windows 10宿主机与Windows 98虚拟机之间共享数据
  10. TB6612电机驱动板
  11. phpMyAdmin 登陆超时(1440秒未活动),请重新登录问题
  12. 域名解析中TTL是什么意思?
  13. 【261期】为什么 BigDecimal 类不能使用 equals() 方法做等值比较?
  14. THD用百分比和分贝表示的关系
  15. Java基础知识面试题(2021最新)
  16. vue使用ruoyi框架自制icon图标
  17. html5+自动播放轮播插件,15个超强的jQuery/HTML5图片轮播插件
  18. 高通和LG携手于2018年开始测试5G车辆互联网;Google 宣布攻破 SHA-1 加密│IoT黑板报...
  19. 教你一波Lucas(卢卡斯)定理在数论解题中的应用
  20. PHP实现图片上传功能

热门文章

  1. SRPG游戏开发(四十一)第九章 战斗系统 - 三 战斗动画(Combat Animation)
  2. SRPG游戏开发(九)第五章 颜色映射与职业动画 - 一 颜色映射流程(Flow Chart)
  3. Windows下载Hadoop,本地执行MapReduce
  4. Springboot + elementUI实现上传用户头像
  5. Redis-Lua语言:简单小巧但功能强大
  6. dz论坛程序备份搬家
  7. 【数据结构与算法】学习笔记——第一章 绪论1
  8. Android之模仿QQ保存账号密码
  9. HDWiki数据库结构说明
  10. BurpSuit官方实验室之SQL注入