作者:刘老师,华清远见嵌入式学院讲师。

在FS_11C14平台DHT11传感器程序:

/*******************************************************************************
        * Function Name : Read_Temp_Hum
        * Description : Read Temp & Hum.
        * Input : - temp : temp buf pointer.
        * - hum : hum buf pointer.
        * Output : - temp[0] : temp x. part
        * - temp[1] : temp .x part
        * - hum[0] : hum x. part
        * - hum[1] : hum .x part
        * Return : - 1, checksum ok
        * - 0, checksum fail
        *******************************************************************************/
        uint32_t Read_Temp_Hum(uint8_t *temp, uint8_t *hum)
        {
                uint32_t cnt_last;
                uint8_t hum_10, hum_01, temp_10, temp_01, chksum, chk;
                uint32_t tc1, tc;
                uint32_t i;

p3_2_counter = 0;
                cnt_last = p3_2_counter;

GPIOIntDisable(PORT1, 5);
                GPIOSetDir(PORT1, 5, 1);      // Set PIO1_5 to output

GPIOSetValue(PORT1, 5, 0);
                delay_ms(30);
                GPIOSetValue(PORT1, 5, 1);

GPIOSetDir(PORT1, 5, 0);

GPIOSetInterrupt(PORT1, 5, 0, 0, 0);
                GPIOIntEnable(PORT1, 5);

for(i=0; i<3; i++)             //waiting 80uS low level and 80 uS high level
                {
                        GPIOSetInterrupt(PORT1, 5, 0, 0, i&0x01);
                        while(p3_2_counter == cnt_last);
                        cnt_last = p3_2_counter;
                }

for(i=0; i<40; i++)
                {                    // Loop to receive 40 bit data
                        GPIOSetInterrupt(PORT1, 5, 0, 0, 1);
                        while(p3_2_counter == cnt_last);
                        cnt_last = p3_2_counter;
                        tc1 = p3_2_tc;

GPIOSetInterrupt(PORT1, 5, 0, 0, 0);
                        while(p3_2_counter == cnt_last);
                        cnt_last = p3_2_counter;

if(p3_2_tc < tc1)
                        {
                                tc = tc1 - p3_2_tc;
                        }
                        else
                        {
                                tc = 48000 - (p3_2_tc - tc1);
                        }

if(i < 8)                         //one byte
                        {
                                hum_10 <<= 1;
                                if(tc >= 2328)
                                hum_10 |= 0x01;
                        }
                        else if(i < 16) // two byte
                        {
                                hum_01 <<= 1;
                                if(tc >= 2328)
                                hum_01 |= 0x01;
                        }
                        else if(i < 24) // three byte
                        {
                                temp_10 <<;= 1;
                                if(tc >= 2328)
                                temp_10 |= 0x01;
                        }
                        else if(i < 32) // four byte
                        {
                                temp_01 <<= 1;
                                if(tc >= 2328)
                                temp_01 |= 0x01;
                        }
                        else // five byte checksum
                        {
                                chksum <<= 1;
                                if(tc >= 2328)
                                chksum |= 0x01;
                        }
                }

GPIOSetInterrupt(PORT1, 5, 0, 0, 1);
                while(p3_2_counter == cnt_last);

GPIOIntDisable(PORT1, 5);

*temp = temp_10;
                *(temp+1) = temp_01;

*hum = hum_10;
                *(hum+1) = hum_01;

chk = hum_10;          // Calculate to Checksum
                chk += hum_01;
                chk += temp_10;
                chk += temp_01;

if(chk == chksum)        // Received data is OK
                return 1;
                else
                return 0;
        }

/*******************************************************************************
        * Function Name : Temp_Hum_Test
        * Description : Temp & Hum func test.
        * Input : None
        * Output : None
        * Return : None
        *******************************************************************************/
        void Temp_Hum_Test(void)
        {
                uint8_t temp[2], hum[2];
                char buf[20];
                uint32_t i;

OLED_ClearScreen();
                OLED_DisStrLine(0, 0, "Temp & Hum");

while(1)
                {
                        i = Read_Temp_Hum(temp, hum);

if(i)
                        {
                                if(temp[0]&0x80)
                                {
                                        temp[0] &= 0x7f;
                                        snprintf(buf, 16, "Temp: -%d.%d ", temp[0], temp[1]);
                                }
                                else
                                {
                                        snprintf(buf, 16, "Temp: %d.%d ", temp[0], temp[1]);
                                }
                                OLED_DisStrLine(2, 0, (uint8_t *)buf);
                                snprintf(buf, 16, "Hum: %d.%d ", hum[0], hum[1]);
                                OLED_DisStrLine(3, 0, (uint8_t *)buf);

printf("\r\nTemp: %d.%d Hum: %d.%d", temp[0], temp[1], hum[0], hum[1]);
                        }
                        else
                        {
                                printf("\r\nfail");
                        }
                        delay_ms(500);
                }
        }

/**** End of File ****/

文章来源:华清远见嵌入式学院原文地址:http://www.embedu.org/Column/Column858.htm

更多相关嵌入式免费资料查看华清远见讲师博文>>

FS_11C14温湿度传感器(二)的更多相关文章

  1. 在树莓派上读取DHT11温湿度传感器-python代码实现及常见问题(全面简单易懂)

    最近由于自己的课题需要,想要用在树莓派上使用DHT11温湿度传感器来读取空气中温湿度,遇到了几个问题,解决之后也对之前的知识进行了回顾,总结,特整理如下,希望能给也在学习树莓派的小伙伴们带来一些帮助. ...

  2. 数字温湿度传感器DHT11--操作源代码

    //IO定义 #define P_DataIN_DHT11 PB0_IN #define P_DataOUT_DHT11 PB0_OUT //宏定义 #define BSET_DHT11 P_Data ...

  3. Arduino和C51开发DHT11温湿度传感器

    技术:51单片机.Arduino.DHT11.温湿度传感器.传感器   概述 学习单片机离不开对传感器的学习,本文主要介绍DHT11温湿度传感器的使用方法,同学也可以了解更多的传感器,这对你以后开发产 ...

  4. 树莓派使用DHT11温湿度传感器

    一.相关介绍 DHT11介绍: DHT11是一款比较便宜的温湿度传感器模块.读取数据只需要占用一个IO口.能够同时测量温度和相对湿度. DHT11的数据手册可以看这里:http://wenku.bai ...

  5. DHT11温湿度传感器编程思路以及代码的实现(转载)

    源自:https://blog.csdn.net/qq_34952376/article/details/81193938 在我们刚开始进入单片机的学习中,练习写传感器的时序是必不可少的,其实我比较推 ...

  6. [开源硬件DIY] 自制一款精致炫酷的蓝牙土壤温湿度传感器,用于做盆栽呵护类产品(API开放,开发者可自行DIY微信小程序\安卓IOS应用)

    目录 前言: 1. 成品展示 2. 原理图解析 3. pcb设计 4. 嵌入式对外提供接口 4.1 蓝牙广播 4.2 蓝牙服务和属性 4.3 数据包格式 4.4 数据通信模型 重要 . 前言: 本期给 ...

  7. Homekit_温湿度传感器

    本款产品为Homekit相关产品需要使用苹果手机进行操作,有兴趣的可以去以下链接购买: https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-112 ...

  8. DH11数字温湿度传感器

    DH11数字温湿度传感器是一种集温度.湿度一体的复合传感器,它能把温度和湿度物理量通过温.湿度敏感元件和相应电路转化成方便计算机.PLC.智能仪表等数据采集设备直接读取的数字量.DHT11由电阻式感湿 ...

  9. STM32读取温湿度传感器DHT11和DHT21(AM2301)系列问题

    1.DHT11和DHT21传感器 这两种传感器都是奥松公司的产品,具体的传感器说明书在其官网上有(www.aosong.com). DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合 ...

随机推荐

  1. JavaScript - UnderScore

    UnderScore 第一步 call(this) (function() {}.call(this)); 一些简单的初始化操作 (function() { var root = this; var ...

  2. hdu 4025 2011上海赛区网络赛E 压缩 ***

    直接T了,居然可以这么剪枝 题解链接:点我 #include<cstdio> #include<map> #include<cstring> #define ll ...

  3. (译)【Unity教程】使用Unity开发Windows Phone上的横版跑酷游戏

    译者注: 目前移动设备的跨平台游戏开发引擎基本都是采用Cocos2d-x或者Unity.一般而言2d用cocos2d-x 3d用unity,但是对于Windows Phone开发者, cocos2d- ...

  4. ok6410,mmu,内存管理

    MMU 一.MMU学习 MMU其实就是一个页表.将虚拟地址通过查表的方式,对应到物理地址去他由一个或一组芯片组成,一般存在与协处理器中. 1.将虚拟地址转化为物理地址 2.访问权限管理 1.1得出mm ...

  5. linux系统定时任务

    crontab常用的几个命令如下 sudo crontab -l #显示所有的定时任务 sudo crontab -e #编辑任务 sudo crontab -r #删除所有的任务 编辑任务时的书写方 ...

  6. Android adb的使用

    参考:http://blog.csdn.net/veryitman/article/details/6437090 1. 进入shell 进入设备shell adb shell 2. 安装 apk & ...

  7. JS 正则表达式详解

    在此提供相关的链接,请访问: http://www.cnblogs.com/dolphinX/p/3486214.html http://www.cnblogs.com/dolphinX/p/3486 ...

  8. 映射一对多双向关联关系 cascade、inverse、属性

    当类与类之间建立了关联,就可以方便的从一个对象导航到另一个对象.或者通过集合导航到一组对象.例如: 对于给定的Emp对象,如果想获得与它关联的Dept对象,只要调用如下方法 Dept dept=emp ...

  9. Linux学习笔记(1)Linux虚拟机安装过程中的知识点及常用管理工具

    1. VMware的相关知识 (1)建议的VMware的配置: CPU 主频1GHz以上 内存 1GB以上 硬盘 分区空闲空间8GB以上 (2)VMware创建快照 快照的作用是保存虚拟机的现有状态, ...

  10. 性能测试中TPS和并发用户数

    并发用户数与TPS之间的关系 1.  背景 在做性能测试的时候,很多人都用并发用户数来衡量系统的性能,觉得系统能支撑的并发用户数越多,系统的性能就越好:对TPS不是非常理解,也根本不知道它们之间的关系 ...