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

📄 ds18b20.c

📁 智能打铃系统(MCU)端程序
💻 C
字号:
#include <REG52.H>
#include <intrins.h>

#define uint unsigned int


sbit DQ=P3^6;

void delay_us(unsigned char us);
unsigned char _18b20_init(void);
unsigned char _18b20_read();
void Read_Temperature(unsigned char *p);
void _18b20_write(unsigned char commond);

void delay(unsigned char useconds)
{
for(;useconds>0;useconds--);
}


unsigned char _18b20_init(void)
{
  unsigned char presence;
  EA=0;
  DQ = 0;        //拉低总线
  delay(29);    // 保持 480us
  DQ = 1;       // 释放总线
  delay(3);     // 等待回复
  presence = DQ; // 读取信号
  delay(25);    // 等待结束信号
  return(presence); // 返回   0:正常 1:不存在
}     

//从 1-wire 总线上读取一个字节
unsigned char _18b20_read(void)
{

  unsigned char i;
  unsigned char value = 0;
  for (i=8;i>0;i--)
  {
    value>>=1;
    DQ = 0; 
	_nop_();
	_nop_();
	_nop_();
    DQ = 1;
    delay(1);  
    if(DQ)value|=0x80;
    delay(6); 
  }
  return(value);
}

//向 1-WIRE 总线上写一个字节
void _18b20_write(char val)
{
  unsigned char i;
  EA=0;
  for (i=8; i>0; i--) // 一次写一位
  {
    DQ = 0; // 
	_nop_();
	_nop_();
	_nop_();
    DQ = val&0x01;
    delay(5); // 
    DQ = 1;
    val=val/2;
  }
  EA=1;
  delay(5);
}

//读取和显示温度
void Read_Temperature(unsigned char *p)
{

  unsigned char i;
  unsigned char  x;
  unsigned char th,tl;
 
  for(i=0;i<10;i++)
  ;
  _18b20_init();
  for(i=0;i<10;i++)
  ;
  _18b20_write(0xCC); // Skip ROM
  _18b20_write(0x44); // 转换温度
  for(i=0;i<254;i++)
  ;
  _18b20_init();
  for(i=0;i<10;i++)
  ;
  _18b20_write(0xCC); //Skip ROM
  _18b20_write(0xbe); // 读取寄存器
  tl=_18b20_read();//读出温度低8位
  th=_18b20_read();//读出温度高8位
  tl &= 0xf0;
  tl >>= 4;
  *(p+3)=tl/2+'0';
  *(p+2)='.';
  x=((th&0x07)<<4)+tl;
  *p=x/10+'0';//显示温度十位数
  *(p+1)=x%10+'0';//显示温度个位数

}

⌨️ 快捷键说明

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