char DHT11_byte ;
unsigned char i ;
unsigned char temp ;
DHT11_byte = 0 ;
for ( i = 0 ; i < 8 ; i ++ )
{
temp = 0 ;
while ( ! a )//a为电平
{
temp ++ ;
if ( temp > 12 )
return 1 ;
udelay ( 5 ) ;
}
temp = 0 ;
while ( a )
{
temp ++ ;
if ( temp > 20 )
return 1 ;
udelay ( 5 ) ;
}
if ( temp > 6 )
{
DHT11_byte <<= 1 ;
DHT11_byte |= 1 ;
}
else
{
DHT11_byte <<= 1 ;
DHT11_byte |= 0 ;
}
}
return DHT11_byte ;
}
能否详细的讲解一下,本人菜鸟,自学,被这几句搞晕了。。。
先把char型转化为8位2进制就好理解点,然后
DHT11_byte <<= 1 ;
DHT11_byte = DHT11_byte << 1;
//位运算,向前左移一位,右边补上0
DHT11_byte |= 1 ;
DHT11_byte = DHT11_byte | 1;
//位运算,位或,只对每一位的0与1取或
for中另外声明了i,最开始也声明了无符号char i,所以是不是char a?
如果不是,那么for中的i值都以for中声明的i为准...
while(a)会判定当a!=0时为真,a == 0时为假,切记,0 != "0",0 == "\0";
大概就这样了,如果哪儿不懂就继续问吧...追问
DHT11_byte <<= 1 ;
DHT11_byte = DHT11_byte << 1;
//位运算,向前左移一位,右边补上0
DHT11_byte |= 1 ;
DHT11_byte = DHT11_byte | 1;
//位运算,位或,只对每一位的0与1取或
for中另外声明了i,最开始也声明了无符号char i,所以是不是char a?
如果不是,那么for中的i值都以for中声明的i为准...
while(a)会判定当a!=0时为真,a == 0时为假,切记,0 != "0",0 == "\0";
大概就这样了,如果哪儿不懂就继续问吧...追问
感谢!temp在里面是什么作用
追答20 == 0001 0100,12 == 0000 1010 ,temp和这两数比较估计是判定某一位的,不好意思啊,电路什么的我不懂...
追问谢谢!
温馨提示:答案为网友推荐,仅供参考
第1个回答 2015-01-10
你这个是读一个字节的数据的吧。追问
xiexie
追答temp应该是超时处理