注册
登录
电子工程世界-论坛
返回首页
EEWORLD首页
频道
EE大学堂
下载中心
Datasheet
专题
单片机
物联网
汽车电子
嵌入式
手机/便携
模拟电子
家用电子
网络通信
电源管理
工业控制
测试测量
半导体设计/制造
安防电子
传感器
医疗电子
wylloong的个人空间
https://home.eeworld.com.cn/space-uid-488614.html
[收藏]
[复制]
[分享]
[RSS]
空间首页
动态
记录
日志
相册
主题
分享
留言板
个人资料
借用开发板
论坛
淘帖
Collection
查看新帖
最新回复
社区活动
联系管理员
我的空间
帖子
日志
收藏
好友
勋章
积分
安全验证
请完成以下验证码
日志
msp430 DHT11
已有 2698 次阅读
2013-7-24 18:59
最近使用DHt11测温度和湿度,结果显示在1602上面,1602的显示看过没有问题,但是
“8bit湿度整数数据 + 8bit湿度小数数据+8bit温度整数数据 + 8bit温度小数数据”所得结果的末8位不等于8bit校验位等于,求各位大神看看程序具体哪里出错了?
#include
#include \"cry1602.c\"
///////////////引脚定义///////////////////////
#define DHT11_OUTPUT P2DIR|=BIT0 //P2.0
#define DHT11_INPUT P2DIR&=~BIT0 //P2.0
#define DHT11_H P2OUT|=BIT0 //P2.0
#define DHT11_L P2OUT&=~BIT0 //P2.0
#define DHT11_IN (P2IN&BIT0)
uchar shuzi[] = {\"0123456789.\"};
uchar tem[2];
///////////////DHT11输出数据//////////////////
unsigned char DHT11T_Data_H; //温度高8位
unsigned char DHT11T_Data_L; //温度低8位
unsigned char DHT11RH_Data_H; //湿度高8位
unsigned char DHT11RH_Data_L; //适度低8位
/////////////函数声明///////////////////////
unsigned char start_DHT11(void);
unsigned char DHT11_ReadChar(void);
void dht11(void);
void Delayus(int n);
////////////////////////////////////////////
//函数名称:Delayus
//功能:延时(us),定时器查询方法
//调用:无
//返回:无
///////////////////////////////////////////
void Delayus(int n)
{
CCR0 = n;
TACTL |= TACLR;
TACTL |= MC_1;
while(!(TACTL & BIT0)); //等待
TACTL &= ~MC_1; //停止计数
TACTL &= ~BIT0; //清除中断标志
}
///////////主函数///////////////////
void main(void)
{
unsigned int readflag = 0;
WDTCTL = WDTPW + WDTHOLD;
TACTL|= TASSEL_2 + ID_3; //时钟选择SMCLK,1/8分频,计数器1M频率
unsigned char humidity=0;
unsigned char temperature = 0;
LcdReset(); //显示提示信息
Disp1Char(8,0,\'C\'); //显示温度单位
while(1)
{
readflag = start_DHT11();
if(1)
{
temperature = DHT11T_Data_H;//温度值,没有考虑小数
humidity = DHT11RH_Data_H; //湿度值,没有考虑小数
tem[0]=temperature/10; //验证是否执行到此
tem[1]=temperature%10;
Disp1Char(2,0,shuzi[tem[0]]);
Disp1Char(3,0,shuzi[tem[1]]);
}
Disp1Char(1,1,shuzi[readflag]); //读出readflag的值
}
}
////////////////////////////////////////////
//函数名称:start_DHT11
//功能:DHT11初始化及读取湿度值和温度值
//调用:DHT11_ReadChar()
//返回:无
///////////////////////////////////////////
unsigned char start_DHT11(void)
{
unsigned char TData_H_temp = 0; //温度高8位中间变量
unsigned char TData_L_temp = 0; //温度低8位中间变量
unsigned char RHData_H_temp =0; //湿度高8位中间变量
unsigned char RHData_L_temp = 0; //湿度低8位中间变量
unsigned char CheckData_temp = 0; //校验位8位中间变量
char checktemp = 0; //校验值
unsigned char flag = 0;
unsigned int count = 0;
DHT11_OUTPUT; //设置P2.0输出 #define DHT11_OUTPUT P2DIR|=BIT0
DHT11_H; //输出高 #define DHT11_H P2OUT|=BIT0
Delayus(10); //延时10us
DHT11_L; //输出低 #define DHT11_L P2OUT&=~BIT0
//拉低18ms以上
Delayus(30000);
DHT11_H; //输出高
DHT11_INPUT; //设置P2.0输入 #define DHT11_INPUT P2DIR&=~BIT0
Delayus(60); //延时60us
if(!(DHT11_IN)) //检测P2.O输入电平,若为低电平
{
count=2; //计数值设置为2
while((!DHT11_IN)&&count++);
count=2;
while((DHT11_IN)&&count++);
RHData_H_temp = DHT11_ReadChar();
RHData_L_temp = DHT11_ReadChar();
TData_H_temp = DHT11_ReadChar();
TData_L_temp = DHT11_ReadChar();
CheckData_temp = DHT11_ReadChar();
DHT11_OUTPUT; //设置P2.0输出
DHT11_H; //P2.0输出高,释放总线
checktemp = (RHData_H_temp + RHData_L_temp + TData_H_temp + TData_L_temp); //判断校验位是否正确
if (checktemp == CheckData_temp)
{
DHT11RH_Data_H = RHData_H_temp;
DHT11RH_Data_L = RHData_L_temp;
DHT11T_Data_H = TData_H_temp;
DHT11T_Data_L = TData_L_temp;
flag=1;
}
}
return flag; //返回flag,若返回1说明读取正确
}
////////////////////////////////////////////
//函数名称:DHT11_ReadChar
//功能:DHT11读取1字节数据
//调用:
//返回:无
///////////////////////////////////////////
unsigned char DHT11_ReadChar(void)
{
unsigned char dat=0;
unsigned int count; //计数防止死等
unsigned char i;
for(i=0;i<8;i++)
{
count=2;
while((!DHT11_IN)&&count++); //等待50us低电平结束,程序进入死循环退出 #define DHT11_IN (P2IN&BIT0)
Delayus(35);
dat <<= 1;
if(DHT11_IN) //50us低电平+28us高电平表示\'0\',50us低电平+70us高电平表示\'1\'
{
dat |= 1;
}
count=2;
while((DHT11_IN)&&count++); //程序进入死循环退出
/*while(DHT11_IN);
if(count==1) //超时则跳出for循环
{
break;
}*/
}
return dat;
}
本文来自论坛,点击查看完整帖子内容。
收藏
邀请
举报
全部
作者的其他最新日志
•
MSP430G2553 AD转换中1602输出温度
评论 (
0
个评论)
涂鸦板
您需要登录后才可以评论
登录
|
注册
评论
wylloong
加为好友
给我留言
打个招呼
发送消息
热门文章
头条资讯
新品 | 只需一对铜线,即可完成以太网传输的标准化建设
谷歌无人车离奇车祸曝光:人类安全员睡着后,误触关闭了自动驾驶
融合创新,推动中国集成电路产业供给侧改革 ——2017年中国半导体市场年会暨第六届中国集成电路产业创新大会今日于南京举行
学习、旅行、锻炼,人生不能俭省的三件事
莫大康:中国存储器梦初探
预告:银行业务光凭“刷脸”真的靠谱吗?
新增数据手册
M620-H228-02-01
PWC02E16-23CP
0805F50003R9CFT
H1206CA18R2CEW-W
CH437A113KA80A4
RN732ELTD6421D10
热搜器件
1N2977RB
R5F524UBADFP
MAX1791EUB T
D38999/26JC35SN-LC
RN731JTTD92R0F50
22-65-1060
推荐下载
Module3 F28x–Digital I O.ppt
基于msp430单片机温湿度控制器
一种通用数据库操作构件的研究
msp430最新常用子函数.h.zip
teamviewer source code vc++
基于单片机STC89C52的LED数码管温度显示及报警器的实现
推荐关注
《 Python编程:从入门到实践(第3版)》读书笔记0:书籍开箱,资料收集
给女朋友送花该注意什么?
强悍的I.MX8MP 核心板
上海哪个在线花店的送花服务最好?
有人能推荐一些上海的花店么?
为什么要选择有机硅OCA胶膜进行车载全贴合?