以温度温度传感器为例

由三根线,分别为电源,信号,地线

使用GPIO口对信号线进行读操作

//初始化GPIO PC0端口
void dht11_init()
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOC, &GPIO_InitStruct);

//延迟100ms
delay_ms(100);
}

下面是取设置的数据操作

原理就是搞懂时序是怎么回事,

开始:至少拉低18ms 在拉高 20~40us,然后得到确认码(低电平小于100US) 然后接收数据时序(取35US时返回的数据)

//起始信号 是由主机产生,输出模式
void dht11_start()
{
DHT11_OUT; //输出模式
PCout(0) = 0;
delay_ms(20); //至少拉低18ms
PCout(0) = 1;
delay_us(30); //拉高 20~40us
}

//dht11响应 输入模式
//如果dht11一直为高 或者一直为低
//都表明DHT11没有响应,电路有问题
//返回值
//1 无响应 0 表示有响应
u8 dht11_ack()
{
int ret =0;
DHT11_IN; //输入模式
//循环计算 大致的时间

while(0 == PCin(0))
{
ret++;
delay_us(1);
if(ret == 100) return 1;
}

ret = 0;
while(1 == PCin(0))
{
ret++;
delay_us(1);
if(ret == 100) return 1;
}

//如果能执行到这一行,说明有响应
return 0;
}

//接收数据
//统计高电平的时长, 0 1 低电平都一样
u8 dht11_read_bit()
{
int ret=0; //用于统计高电平的时长
//耗完低电平
while(0==PCin(0));

while(1==PCin(0))
{
ret++;
delay_us(1);
}

if(ret < 50) return 0;
else return 1;
}

//读取0 1 第二种实现方式
u8 dht11_read_bit2()
{
//耗完高电平
while(1==PCin(0));
//耗完低电平
while(0==PCin(0));
delay_us(35); //延时一半的时间
return PCin(0); //直接返回当前值
}

//读取一个字节
u8 dht11_read_byte()
{
u8 i=0;
u8 data = 0;
for(;i<8;i++)
{
data<<=1;
data += dht11_read_bit2();
}

return data;
}

//一次性读取40位
void dht11_read_data(u8 *wendu, u8 *shidu)
{
u8 data[5] = {0};
u8 i =0;
dht11_start();//起始信号
if(dht11_ack()) //反馈信号
{
printf("dht11 err\r\n");
}

for(;i<5;i++)
{
data[i] = dht11_read_byte();
}
/*
data[0] 温度整数部分
data[1] 温度小数部分
data[2] 温度整数部分
data[3] 温度小数部分
data[4] 校验码
*/

//校验和
if(data[0] + data[1] + data[2] + data[3] == data[4])
{
*wendu = data[2];
*shidu = data[0];
} else {
printf("data err\r\n");
}

}

ONE WIRE的更多相关文章

  1. Reg于Wire的不同点

    Reg 比喻为“相机” Reg型,是always中被赋值的信号,往往代表触发器,但不一定是触发器 Wire 比喻为“镜子” Wrie型,assign指定的组合逻辑的信号 好好想想 ,还是能有个大致的概 ...

  2. wire与reg的区别?转载大神!

    本文转自:http://www.cnblogs.com/thymon/archive/2010/06/09/1754541.html //------------------------------- ...

  3. Android和Java的轻巧Wire协议缓冲器

    Wire协议缓冲器 一个人必须有一个代码! -奥马尔小 由于我们的团队和项目增长,数据的种类和数量也随之增加. 成功将您简单的数据模型转换为复杂的! 无论您的应用程序将数据存储到磁盘或网络传送信号,该 ...

  4. [USACO07NOV]电话线Telephone Wire

    [USACO07NOV]电话线Telephone Wire 时间限制: 1 Sec  内存限制: 128 MB 题目描述 电信公司要更换某个城市的网线.新网线架设在原有的 N(2 <= N &l ...

  5. 【USACO07NOV】电话线Telephone Wire

    题目描述 电信公司要更换某个城市的网线.新网线架设在原有的 N(2 <= N <= 100,000)根电线杆上, 第 i 根电线杆的高度为 height_i 米(1 <= heigh ...

  6. BZOJ_1705_[Usaco2007 Nov]Telephone Wire 架设电话线_DP

    BZOJ_1705_[Usaco2007 Nov]Telephone Wire 架设电话线_DP Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是 ...

  7. reg 和wire 区别

    reg相当于存储单元,wire相当于物理连线 Verilog 中变量的物理数据分为线型和寄存器型.这两种类型的变量在定义时要设置位宽,缺省为1位.变量的每一位可以是0,1,X,Z.其中x代表一个未被预 ...

  8. Verilog中关于wire使用的一些小知识

    1.Verilog中如果wire连接到常量,而常量没有说明他的位宽,那么将会默认为32位 如: input [:] x ; wire [:] a; assign a = + x; 上述代码在综合的时候 ...

  9. 使用google wire解决依赖注入

    使用google wire解决依赖注入 google wire是golang的一个依赖注入解决的工具,这个工具能够自动生成类的依赖关系. 当我们写代码的时候,都希望,类都是一个个独立的结构,互不耦合, ...

  10. wire [7:0] regAddr; 理解

    首先要指出的是wire[7,0]a和wire[8,1]a这样的表达在verilog中是错误的,应该写成wire[7:0]a和wire[8:1]a wire[7:0]a表示定义了一个wire型数据,该数 ...

随机推荐

  1. angular 实战系列 之 mvvm模式

    什么是MVVM模式 mvvm模式是mvc模式的一种变体,其中第一个m表示model,可以认为是数据对象的抽象,v代表view,vm代表view model ,是对view中的数据抽象(注1).mvvm ...

  2. 自定义生命周期的设计(iOS篇)

    自定义生命周期的设计(iOS篇) 首先要确定一点,我们的App,要基于XIB文件进行编程,而不是在每个相应的ViewController里面去手动创建页面的每个控件.这样做的好处是,将页面布局与业务逻 ...

  3. 2013年全球IT公司市值排行榜

    开源的应用快速开发平台 排名 公司 市值 国家 荣誉 1 苹果 5006.1 美国 全球市值最大的公司 2 谷歌 2324.4 美国 全球最伟大的互联网公司 3 三星 2290.7 韩国 全球最大的智 ...

  4. 搜狗主页页面CSS学习小记

    1.边框的处理   要形成上图所示的布局效果,即,点选后,导航下面的边框不显示而其他的边框形成平滑的形状.相对于把导航的下面边框取消然后用空白覆盖掉下面搜索栏的边框比较而言,sougou有很好的方法来 ...

  5. ASP.NET MVC:多语言的三种技术处理策略

    ASP.NET MVC:多语言的三种技术处理策略 背景 本文介绍了多语言的三种技术处理策略,每种策略对应一种场景,这三种场景是: 多语言资源信息只被.NET使用. 多语言资源信息只被Javascrip ...

  6. Java网络请求getInputStream异常

    今天调试网络请求部分时,当getInputStream失败时直接抛出异常.解决方法时在getInputStream之前获取ResponseCode if( connection.getResponse ...

  7. 用maven来创建web工程

    大约已经一个月没有写博客了,一个是最近太忙,另外啊还是人慢慢的变懒,最近在拆pool,用到了maven,因此呢把自己的一些心得记下来了,供大家参考,欢迎指正. 1.配置maven环境: 首先下载mav ...

  8. hdu4474 Yet Another Multiple Problem

    Yet Another Multiple Problem Description There are tons of problems about integer multiples. Despite ...

  9. 初识sql server 2000-数据库的连接

    这段时间主要进行学生信息管理系统的实现,所以与数据库打交道是难免的,我也是刚敲过5个数据库例子的小鸟,对数据库的理解还欠佳,不足之处大鸟飞过还请指点. 安装完sql server2000之后,首先要做 ...

  10. D3D游戏降帧的动态创建D3D设备以及ShellCode HOOK玩法

    欢迎转载,转载请注明出处:http://blog.csdn.net/gnorth/article/details/9327971 说白了,也就是HOOK掉Present,这种代码,其实百度上某些地方有 ...