专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
跪求大神给个G2553连接DHT11的完整程序
2019-03-24 08:42
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
4457
6
1093
我想用串口调试助手检测DHT11测到的数据,无奈水平太菜,所以跪求大神们帮助。 此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
destinydd
2019-03-24 14:59
< #include "msp430G2553.h"
#include"stdio.h"
#define DHT11_OUTPUT P2DIR|=BIT0
#define DHT11_INPUT P2DIR&=~BIT0
#define DHT11_H P2OUT|=BIT0
#define DHT11_L P2OUT&=~BIT0
#define DHT11_IN (P2IN&BIT0)
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define CPU (1000000)
#define delay_us(x) (__delay_cycles((double)x*CPU/1000000.0))
#define delay_ms(x) (__delay_cycles((double)x*CPU/1000.0))
uchar start_DHT11(void);
uchar DHT11_ReadChar(void);
void dht11(void);
uchar DHT11T_Data_H, DHT11T_Data_L, DHT11RH_Data_H, DHT11RH_Data_L,CheckData_temp;
void put(uchar *x)
{
while(*x)
{
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF=*x;
x++;
}
}
void putc(char *x)
{
while(*x)
{
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF=*x;
x++;
}
}
void wellcome()
{
put("************************************* ");
put("******** hello,eeworld! ******** ");
put("******** this is mengzhilv! ******** ");
put("******** Copyright @ 2011 ******** ");
put("************************************* ");
delay_ms(10);
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
UCA0CTL1 |= UCSWRST;
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
P1SEL = BIT1 + BIT2 ;
P1SEL2 = BIT1 + BIT2 ;
UCA0CTL1 |= UCSSEL_2;
UCA0BR0 = 104;
UCA0BR1 = 0;
UCA0MCTL = UCBRS0;
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
delay_us(1000);
wellcome();
put("**********DHT11 TEST********** ");
delay_ms(1000);
while(1)
{
dht11();
}
}
uchar start_DHT11(void)
{
uchar TData_H_temp,TData_L_temp,RHData_H_temp,RHData_L_temp,checktemp;
uchar presence,flag;
uint count;
DHT11_OUTPUT;
DHT11_L; //拉低18ms以上
delay_ms(20);
DHT11_H;
DHT11_INPUT;
delay_us(40);
presence=DHT11_IN;
if(!presence)
{
count=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;
DHT11_H;
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;
}
}
P1OUT |=BIT0;
return flag;
}
uchar DHT11_ReadChar(void)
{
unsigned char dat;
unsigned int count; //计数防止死等
unsigned char i;
for(i=0;i<8;i++)
{
count=2;
while((!DHT11_IN)&&count++); //等待50us低电平结束
delay_us(40); //40us
dat <<= 1; //50us低电平+28us高电平表示'0'
if(DHT11_IN) //50us低电平+70us高电平表示'1'
dat |= 1;
count=2;
while((DHT11_IN)&&count++);
if(count==1) //超时则跳出for循环
break;
}
return dat;
}
void dht11()
{
char c[40];
uchar o;
o=start_DHT11();
P1OUT |=BIT1;
delay_ms(300);
P1OUT &=~BIT1;
delay_ms(300);
if (o)
{
put("DHT11 EXIST AND ACQUIRE SUCCESSFUL! ");
delay_ms(10);
sprintf(c, "%d.%d %d.%d %d ",DHT11RH_Data_H,DHT11RH_Data_L,DHT11T_Data_H,DHT11T_Data_L,CheckData_temp);
putc(c);
}
}
加载中...
查看其它6个回答
一周热门
更多
>
相关问题
相关文章
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#include"stdio.h"
#define DHT11_OUTPUT P2DIR|=BIT0
#define DHT11_INPUT P2DIR&=~BIT0
#define DHT11_H P2OUT|=BIT0
#define DHT11_L P2OUT&=~BIT0
#define DHT11_IN (P2IN&BIT0)
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define CPU (1000000)
#define delay_us(x) (__delay_cycles((double)x*CPU/1000000.0))
#define delay_ms(x) (__delay_cycles((double)x*CPU/1000.0))
uchar start_DHT11(void);
uchar DHT11_ReadChar(void);
void dht11(void);
uchar DHT11T_Data_H, DHT11T_Data_L, DHT11RH_Data_H, DHT11RH_Data_L,CheckData_temp;
void put(uchar *x)
{
while(*x)
{
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF=*x;
x++;
}
}
void putc(char *x)
{
while(*x)
{
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF=*x;
x++;
}
}
void wellcome()
{
put("************************************* ");
put("******** hello,eeworld! ******** ");
put("******** this is mengzhilv! ******** ");
put("******** Copyright @ 2011 ******** ");
put("************************************* ");
delay_ms(10);
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
UCA0CTL1 |= UCSWRST;
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
P1SEL = BIT1 + BIT2 ;
P1SEL2 = BIT1 + BIT2 ;
UCA0CTL1 |= UCSSEL_2;
UCA0BR0 = 104;
UCA0BR1 = 0;
UCA0MCTL = UCBRS0;
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
delay_us(1000);
wellcome();
put("**********DHT11 TEST********** ");
delay_ms(1000);
while(1)
{
dht11();
}
}
uchar start_DHT11(void)
{
uchar TData_H_temp,TData_L_temp,RHData_H_temp,RHData_L_temp,checktemp;
uchar presence,flag;
uint count;
DHT11_OUTPUT;
DHT11_L; //拉低18ms以上
delay_ms(20);
DHT11_H;
DHT11_INPUT;
delay_us(40);
presence=DHT11_IN;
if(!presence)
{
count=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;
DHT11_H;
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;
}
}
P1OUT |=BIT0;
return flag;
}
uchar DHT11_ReadChar(void)
{
unsigned char dat;
unsigned int count; //计数防止死等
unsigned char i;
for(i=0;i<8;i++)
{
count=2;
while((!DHT11_IN)&&count++); //等待50us低电平结束
delay_us(40); //40us
dat <<= 1; //50us低电平+28us高电平表示'0'
if(DHT11_IN) //50us低电平+70us高电平表示'1'
dat |= 1;
count=2;
while((DHT11_IN)&&count++);
if(count==1) //超时则跳出for循环
break;
}
return dat;
}
void dht11()
{
char c[40];
uchar o;
o=start_DHT11();
P1OUT |=BIT1;
delay_ms(300);
P1OUT &=~BIT1;
delay_ms(300);
if (o)
{
put("DHT11 EXIST AND ACQUIRE SUCCESSFUL! ");
delay_ms(10);
sprintf(c, "%d.%d %d.%d %d ",DHT11RH_Data_H,DHT11RH_Data_L,DHT11T_Data_H,DHT11T_Data_L,CheckData_temp);
putc(c);
}
}
一周热门 更多>