| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4431 人关注过本帖
标题:想用ds18b20控制风扇转速,总是程序总是有错,望帮忙检查一下
只看楼主 加入收藏
Michael_Lu
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-6-7
结帖率:0
收藏
 问题点数:0 回复次数:1 
想用ds18b20控制风扇转速,总是程序总是有错,望帮忙检查一下
#include<reg52.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
//void wenkong();
/*********************** 定义数据接口 **************************/

sbit wd=P2^0;     //温度传感器信号线
 

sbit IN1=P2^1; // 风扇in1  put1  负极
sbit IN2=P2^2; //  风扇in2  put2  正极


/*********************** 定义全局变量 **************************/
uchar fen,dd,ee,KG,dw,yt,ds,cd,i,yd,li,miao,MS,zr,SD,sm,sm1,sm2,sm3;
char x,bz,count,second,minute,hour;
uint temp;
float f_temp;

/***********************    功能:延时函数 0   *************************************/
void delay(uchar d)
{
     uchar x,y;
      for(x=d;x>0;x--)
       for(y=110;y>0;y--);
}








/***************************************************************************************
******************************* 功能:18B20 所有函数************************************/
/*******************  18B20复位,初始化函数    **************************/
void dsreset(void)   
{
  uint i;
  wd=0;
  i=103;
  while(i>0)i--;
  wd=1;
  i=4;
  while(i>0)i--;
}
/*******************  18B20 读1位 函数    **************************/
bit tempreadbit(void)   
{
   uint i;
   bit dat;
   wd=0;i++;          //i++ 起延时作用
   wd=1;i++;i++;
   dat=wd;
   i=8;while(i>0)i--;
   return (dat);
}
/*******************  18B20 读1个字节 函数    **************************/
uchar tempread(void)   
{
  uchar i,j,dat;
  dat=0;
  for(i=1;i<=8;i++)
  {
    j=tempreadbit();
    dat=(j<<7)|(dat>>1);   //读出的数据最低位在最前面,这样刚好一个字节在DAT里
  }
  return(dat);
}
/*******************  18B20 写一个字节数据 函数    **************************/
void tempwritebyte(uchar dat)  
{
  uint i;
  uchar j;
  bit testb;
  for(j=1;j<=8;j++)
  {
    testb=dat&0x01;
    dat=dat>>1;
    if(testb)     //写 1
    {
      wd=0;
      i++;i++;
      wd=1;
      i=8;while(i>0)i--;
    }
    else
    {
      wd=0;       //写 0
      i=8;while(i>0)i--;
      wd=1;
      i++;i++;
    }
  }
}
/*******************  18B20 开始获取温度并转换 函数    **************************/
void tempchange(void)   
{
  dsreset();
  delay(5);
  tempwritebyte(0xcc);  // 写跳过读ROM指令
  tempwritebyte(0x44);  // 写温度转换指令
}
/*******************  18B20 读取寄存器中存储的温度数据 函数    **************************/
uint get_temp()      
{
  uchar a,b;
  dsreset();
  delay(5);
  tempwritebyte(0xcc);
  tempwritebyte(0xbe);
  a=tempread();         //读低8位
  b=tempread();         //读高8位
  temp=b;
  temp<<=8;            //两个字节组合为1个字
  temp=temp|a;
  f_temp=temp*0.0625;      //温度在寄存器中为12位 分辨率位0.0625°
  temp=f_temp*10+0.5;    //乘以10表示小数点后面只取1位,加0.5是四舍五入
  f_temp=f_temp+0.05;
  return temp;         //temp是整型
}
/*******************  18B20 发送数据 函数    **************************/
void comm(char *parr)         
{
    do
    {
     SBUF = *parr++;  //发送数据                          
     while(!TI);      //等待发送完成标志为1
     TI =0;           //标志清零
    }while(*parr);    //保持循环直到字符为'\0'
}


 



/**********************    功能:主函数  ******************************/
void main()
{   
   
//    count=20;second=0;minute=0;hour=0;P1=0xff;yd=0;
    //li=0;miao=0;bz=0;MS=0;KG=0;zr=0;sm=0;sm1=0;sm2=0;sm3=0;

  if(temp<=150)
    {
    while (1)
         {
             IN1=0;
             IN2=1;
             delay (3000);
             IN1=1;
             IN2=1;
             delay (3000);
          }
    }  // 温度<=15.0℃  一档
  else if(temp>=151&&temp<=320)
    {
    while (1)
         {
             IN1=0;
             IN2=1;
             delay (1500);
             IN1=1;
             IN2=1;
             delay (1500);
         }
    }// 15.1℃<=温度<=32.0℃  开二档
 else if(temp>=321&&temp<=400)
    {
    while (1)
         {
             IN1=0;
             IN2=1;
             delay (750);
             IN1=1;
             IN2=1;
             delay (750);
         }
     }// 32.1℃<=温度<=40.0℃  开三档
 }
      
搜索更多相关主题的帖子: 温度传感器 include minute second 信号线 
2013-06-08 13:21
S311070111
Rank: 2
等 级:论坛游民
帖 子:18
专家分:33
注 册:2013-6-13
收藏
得分:0 
程序封装的很不错啊,虽然没有仔细看,但是感觉主程序应该没有问题,可能是18B20的驱动函数有错吧?楼主先好好看看20的驱动是否好使
2013-06-13 23:11
快速回复:想用ds18b20控制风扇转速,总是程序总是有错,望帮忙检查一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028575 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved