⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 温度.c

📁 程序功能: 用温度传感器DS18B20读取外界温度,然后用单片机读取传感器里面的两个装 有温度值的寄存器温度.最后用单片机处理,将数值显示在数码管上.
💻 C
字号:
/**************************************************************************

程序功能: 用温度传感器DS18B20读取外界温度,然后用单片机读取传感器里面的两个装
有温度值的寄存器温度.最后用单片机处理,将数值显示在数码管上.

制作人: 陈小宝   成玉燕 
        魏永瑜   杨  阳

****************************************************************************/
#include<reg51.h>
#define uchar unsigned char 
#define uint  unsigned int 

sbit dq=P0^0;//数据线

uchar m,n,k,l;//这几个变量用来传递数码管显示的数据
uchar init_flag=0;//初始化成功与否的标志

/*
void delay(uchar m1,uchar n1)
 {
  uchar i,j;
  for(i=0;i<m1;i++)
  for(j=0;j<n1;j++);
 }

/***************************数据处理函数*****************************/
void date_convert(uint t)//对显示数据进行处理;
 {	
   t=(t*100)/16; 
   m=(t/1000);//千位
   n=(t%1000)/100;//百位
   k=(t%100)/10;//十位
   l=t%10;   
}
/*
void display()//LED显示内容
{	
	P2=led_show_date[m];
	P0=0xf7;
	delay(10,25);

	P0=0xfb;
	P2=(led_show_date[n])&0x7f;//将小数点显示
	delay(10,25);

	P0=0xfd;
	P2=led_show_date[k];
	delay(10,25);

	P0=0xfe;
	P2=led_show_date[l];
	delay(10,25); 	
 
}*/

/*****************DS18B20初始化*************/
void init_ds18b20()			
 {
  uint i;
  dq=1;//先将数据线复位	
  dq=0;//然后数据线拉低
  for(i=0;i<65;i++);//延时大于480us
  dq=1;//然后再将数据线拉高
  for(i=0;i<8;i++);//延时14us后读取数据
  if(dq==0)
   {
    init_flag=1;
   }
 while(!dq);//等待传感器的低电平结束
 }
/*****************写一个数据*************/
void writeonechar(uchar dat)
 {
   uchar i,j;
   for(i=0;i<8;i++)
    {
     dq=0;//将数据线拉低
     dq=dat&0x01;
	   
     for(j=0;j<8;j++);//延时60us
     dq=1;//再将数据线拉高
     dat>>=1;
	 for(j=0;j<1;j++);//小延时
    }
  }
/*****************读一个数据*************/
uchar readonechar(void)
{
 uchar i,j;
 uchar dat=0;
 for(i=0;i<8;i++)
  {
   dq=0;//拉低数据线产生读时序
   dat>>=1;
   for(j=0;j<1;j++);//小延时
   dq=1;//重新拉高数据线
   if(dq)
    {
	 dat|=0x80;
	} 
   for(j=0;j<8;j++);//延时60us等待读时序过去
   dq=1;//再次拉高数据线
   for(j=0;j<1;j++);//小延时
  }
 return(dat);
}
/******************读取温度函数***************/
void ReadTemperature(void)
  {
     uchar a=0;
     uchar b=0;
	 uint t=0;
     init_ds18b20();
     if(init_flag)
       { 
         writeonechar(0xcc); // 跳过读序号列号的操作
         writeonechar(0x44); // 启动温度转换        
         init_flag=0;
       } 
     init_ds18b20();
     if(init_flag)
       {
         writeonechar(0xcc); //跳过读序号列号的操作
         writeonechar(0xbe); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
         
         a=readonechar();
		 b=readonechar();
		 t=b&(0x07);//将高5位去掉
         t<<=8;
         t=t|a;
		 
		 date_convert(t);//对采集的温度进行转换
         init_flag=0;
        }
  }
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -