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

📄 ds18b20.c

📁 单片机接口技术实用子程序配套源代码:里面有许多基本实用的例子
💻 C
字号:
//-----------------------函数声明,变量定义--------------------------------------------------------
#include <reg51.h>
sbit DQ=P1^0;                          // 将p1.0口模拟时钟输出
#define jump_ROM 0xCC                   //跳过ROM命令
#define start    0x44               	//启动转换命令
#define read_EEROM 0xBE	                //读存储器命令
unsigned char TMPH,TMPL;                //温度值
//--------------------------------------------------------------------------------------------------
// 函数名称: delay
// 入口参数: N
// 函数功能:延时子程序,实现(16*N+24)us的延时 
// 系统采用11.0592MHz的时钟时,延时满足要求,其它情况需要改动
//--------------------------------------------------------------------------------------------------
  void delay(unsigned  int N)  
  {
  int i; 
  for(i=0;i<N;i++);
  }
//--------------------------------------------------------------------------------------------------
// 函数名称: Reset
// 入口参数: 无
// 返回deceive_ready
// 函数功能:复位 
//--------------------------------------------------------------------------------------------------   
unsigned char Reset(void) 
{
   unsigned  char deceive_ready;
   DQ=0;                               //拉低DQ线  
   delay(29);                          //延时至少480us~960us
   DQ=1;                               //将DQ线设置位逻辑高    
   delay(3);                           //延时等待deceive_ready响应 
   deceive_ready=DQ;                   //采样deceive_ready信号
   delay(25);                          //等待时序结束
   return(deceive_ready);              //有deceive_ready信号时返回0,否则返回1
}
//--------------------------------------------------------------------------------------------------
// 函数名称:read_bit
// 入口参数: 无
// 返回接收的数据
// 函数功能:读一个bit子程序 
//--------------------------------------------------------------------------------------------------
unsigned char read_bit(void)
{
unsigned char i;
DQ=0;                                 //拉低DQ线开始时序
DQ=1;                                 //升高DQ线                        
for(i=0;i<3;i++);					    //延时至时序开始15us
return(DQ);                           //返回DQ值
}
//--------------------------------------------------------------------------------------------------
// 函数名称: write_bit
// 入口参数: bitval
// 函数功能:写一个bit子程序 
//--------------------------------------------------------------------------------------------------
void write_bit(unsigned char bitval)
  {
    DQ=0;                            //拉低DQ线开始时序
    if(bitval==1)
    DQ=1;                             //如果写逻辑为高
    delay(5);                         //延时  
    DQ=1;                             //升高DQ线 
}
//--------------------------------------------------------------------------------------------------
// 函数名称: write_byte
// 入口参数: val
// 函数功能:写一个byte子程序 
//--------------------------------------------------------------------------------------------------
void write_byte(unsigned char val)
{
unsigned char i,temp;
for(i=0;i<8;i++)
{
temp=val>>i;                         //将val位右移i位赋值给比temp
temp=temp&0x01;                      //取temp最低位
write_bit(temp);
delay(5);                           //延时至时序结束
}
}
//--------------------------------------------------------------------------------------------------
// 函数名称: read_byte
// 返回接收的数据 value
// 函数功能:读一个byte子程序 
//--------------------------------------------------------------------------------------------------
unsigned char read_byte(void)
{unsigned char i,m,receive_data;
   m=1;receive_data=0;                          //初始化
   for(i=0;i<8;i++)
  {
  if(read_bit()) 
   {
   receive_data=receive_data+(m<<i);
   }                                            //每读一位数据据,左移一位  
  delay(6);                                    //延时至时序结束 
}  
return(receive_data);                           //返回value
}
//--------------------------------------------------------------------------------------------------
// 函数名称: main
// 函数功能: 主函数
//--------------------------------------------------------------------------------------------------
void main()
     {
     Reset();
     write_byte(jump_ROM);     //发跳过ROM命令
	 write_byte(start);        //发启动转换命令
	 Reset();
     write_byte(jump_ROM);     //发跳过ROM命令
     write_byte(read_EEROM);     //发跳过ROM命令
     TMPL=read_byte();           //读低8位温度值
	 TMPH=read_byte();           //读高8位温度值
      }

    

⌨️ 快捷键说明

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