智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1302|回复: 1
打印 上一主题 下一主题

[采集类] 用K60采集DHT11温湿度传感器代码

[复制链接]

1

主题

2

帖子

0

精华

注册会员

Rank: 2

积分
60
威望
34
贡献
20
兑换币
21
注册时间
2018-1-26
在线时间
3 小时
跳转到指定楼层
1#
发表于 2018-3-14 17:20:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用51的程序改半天,没改出来。
#include "include.h"
//毫秒级延时
void time_delay_ms(u32 ms)
{
  u16 i;
  while(ms--)
  {
    for(i=0;i<1200;i++);
  }
}
//微秒级延时
void time_delay_us(u32 us)
{

  while(us--)
  {
   
  }
}
//全局变量
u8  U8FLAG;
float ftemp2;
u8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;//----温度高8位== U8T_data_H
u8  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;//----湿度高8位== U8RH_data_H
u8  U8comdata;//----校验 8位 == U8checkdata

/***FUNC+*********************************************************************/
/* Name   : com                                                    */
/* Descrp : 判断时序是否超时程序                                                   */
/* Input  : None.                                                            */
/* Output : None.                                                            */
/* Return : None.                                                            */
/***FUNC-*********************************************************************/
void  COM(void)
      {
     
               u8 i;
         
       for(i=0;i<8;i++)          
            {
               
                       U8FLAG=2;       
                   while((!GPIO_Get(PTC6))&&U8FLAG++);
                        time_delay_us(10);
                        time_delay_us(10);
                        time_delay_us(10);
                          U8temp=0;
             if(GPIO_Get(PTC6))
             {
               U8temp=1;
               U8FLAG=2;
                 while((GPIO_Get(PTC6))&&U8FLAG++);
                   //超时则跳出for循环                  
                    if(U8FLAG==1)break;
                   //判断数据位是0还是1         
                     
                // 如果高电平高过预定0高电平值则数据位为 1
                    
                   U8comdata<<=1;
                      U8comdata|=U8temp;        //0
             }//rof


/***FUNC+*********************************************************************/
/* Name   : RH                                                    */
/* Descrp : 湿度读取程序                                                   */
/* Input  : None.                                                            */
/* Output : None.                                                            */
/* Return : None.                                                            */
/***FUNC-*********************************************************************/
float RH(void)
        {  int a;
          //主机拉低18ms
           /*设置PTC6输出为DQ高电平,板子P13_2 */
           //P2_0=0;
           GPIO_Ctrl(PORTC,6,0);
           time_delay_ms(2000);
           //P2_0=1;
           GPIO_Ctrl(PORTC,6,1);
         //总线由上拉电阻拉高 主机延时20us
           //Delay_10us();
           //Delay_10us();
           //Delay_10us();
           //Delay_10us();
           time_delay_us(20);
         //主机设为输入 判断从机响应信号
           //P2_0=1;
           GPIO_Ctrl(PORTC,6,1);
         //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
           a=GPIO_Get(PTC6);
           //time_delay_ms(1000);
           if(a==0)                 //T !          
           {
           U8FLAG=2;
         //判断从机是否发出 80us 的低电平响应信号是否结束         
           while((!a)&&U8FLAG++);
           U8FLAG=2;
         //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
           while((a)&&U8FLAG++);
         //数据接收状态                 
           COM();
           U8RH_data_H_temp=U8comdata;
           COM();
           U8RH_data_L_temp=U8comdata;
           COM();
           U8T_data_H_temp=U8comdata;
           COM();
           U8T_data_L_temp=U8comdata;
           COM();
           U8checkdata_temp=U8comdata;
           P2_0=1;
         //数据校验
         
           U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
           if(U8temp==U8checkdata_temp)
           {
                     U8RH_data_H=U8RH_data_H_temp;
                     U8RH_data_L=U8RH_data_L_temp;
                  U8T_data_H=U8T_data_H_temp;
                     U8T_data_L=U8T_data_L_temp;
                     U8checkdata=U8checkdata_temp;
           }//fi
           }//fi
           ftemp2= U8temp;
           return ftemp2;
        }
//主函数
void main(void)
{
   u8  i,j;
   PLL_Init(PLL96);            //初始化PLL为96M
   float ftemp2;               //温湿度
   UART_Init (UART1,115200);
   
   char data[100];
   
   
   while(1)
   {   
     
       //调用温湿度读取子程序
      ftemp2=RH();
      sprintf(data,"您发送的数据是:%f\n",ftemp2);//打印数据
      
      UART_Put_Str (UART1, data);     //方法2,更方便
      
      time_delay_ms(2000);

      
   }

}
回复

使用道具 举报

1

主题

2

帖子

0

精华

注册会员

Rank: 2

积分
60
威望
34
贡献
20
兑换币
21
注册时间
2018-1-26
在线时间
3 小时
2#
 楼主| 发表于 2018-3-21 18:00:15 | 只看该作者
有会的的神吗?程序能运行10元红包。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|亿加合和智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-5-4 15:05 , Processed in 0.072380 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表