亿加合和智能车制作

标题: 用K60采集DHT11温湿度传感器代码 [打印本页]

作者: wangyan8b    时间: 2018-3-14 17:20
标题: 用K60采集DHT11温湿度传感器代码
用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);

      
   }

}
作者: wangyan8b    时间: 2018-3-21 18:00
有会的的神吗?程序能运行10元红包。






欢迎光临 亿加合和智能车制作 (http://www.znczz.com/) Powered by Discuz! X3.2