最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

DS18b20温度测量程序。单片机C51控制

来源:动视网 责编:小OO 时间:2025-09-25 12:53:45
文档

DS18b20温度测量程序。单片机C51控制

//DS18B20的读写程序,数据脚P3.3////温度传感器18B20汇编程序,采用器件默认的12位转化////最大转化时间750微秒,显示温度-55到+125度,显示精度////为0.1度,显示采用4位LED共阳显示测温值////P0口为段码输入,P24~P27为位选///***************************************************/#include"reg51.h"#include"intrins.h"//_nop_();延时函数用#define
推荐度:
导读//DS18B20的读写程序,数据脚P3.3////温度传感器18B20汇编程序,采用器件默认的12位转化////最大转化时间750微秒,显示温度-55到+125度,显示精度////为0.1度,显示采用4位LED共阳显示测温值////P0口为段码输入,P24~P27为位选///***************************************************/#include"reg51.h"#include"intrins.h"//_nop_();延时函数用#define
//DS18B20的读写程序,数据脚P3.3                     //

//温度传感器18B20汇编程序,采用器件默认的12位转化   //

//最大转化时间750微秒,显示温度-55到+125度,显示精度 //

//为0.1度,显示采用4位LED共阳显示测温值            //

//P0口为段码输入,P24~P27为位选                       //

/***************************************************/

#include "reg51.h"

#include "intrins.h"                            //_nop_();延时函数用

#define  Disdata P1                             //段码输出口

#define  discan  P0                             //扫描口

#define  uchar unsigned char

#define  uint  unsigned int

sbit     DQ=P3^2;                               //温度输入口

uint     h; 

//**************温度小数部分用查表法***********//

uchar code ditab[16]=

{0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};

//

uchar dd[10]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};

//共阳LED段码表        "0"  "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9" "不亮" "-"              

uchar  scan_con[4]={0x00,0x01,0x02,0x03};  //列扫描控制字

uchar   temp_data[2]={0x00,0x00};             //读出温度暂放

uchar   display[4]={0x00,0x00,0x00,0x00,};     //显示单元数据,共4个数据和一个运算暂用

//

//

//

/***********11微秒延时函数**********/

//

void delay(uint t)

{

for(;t>0;t--);

}

//

/***********显示扫描函数**********/

scan()

  uchar k;

for(k=0;k<3;k++)

  {P0=0xff;

   dd[k]=dd[display[k]];

   dd[k]=dd[k]*16;

   dd[k]=dd[k]|scan_con[k];

   P0=dd[k];

   delay(90);

   P0=0xff;

  

  }

//

//

/***********18B20复位函数**********/

ow_reset(void)

{

char presence=1;

while(presence)

{

while(presence)

{

DQ=1;_nop_();_nop_();

DQ=0;    //

delay(50); // 550us

DQ=1;    // 

delay(6); // 66us

presence=DQ; // presence=0继续下一步

   }

delay(45);    //延时500us

presence = ~DQ;

}

DQ=1;

//

//

/**********18B20写命令函数*********/

//向 1-WIRE 总线上写一个字节

void write_byte(uchar val)

{

uchar i;

for (i=8; i>0; i--) //

{

DQ=1;_nop_();_nop_(); 

DQ = 0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us

DQ = val&0x01;      //最低位移出

delay(6);           //66us

val=val/2;          //右移一位

}

DQ = 1;

delay(1); 

}

//

/*********18B20读1个字节函数********/

//从总线上读取一个字节

uchar read_byte(void)

{

uchar i;

uchar value = 0;

for (i=8;i>0;i--)

{

DQ=1;_nop_();_nop_();

value>>=1;

DQ = 0;             //

_nop_();_nop_();_nop_();_nop_();   //4us

DQ = 1;_nop_();_nop_();_nop_();_nop_();   //4us 

if(DQ)value|=0x80;

delay(6);           //66us

}

DQ=1;

return(value);

}

//

/***********读出温度函数**********/

//

read_temp()

{

ow_reset();       //总线复位

write_byte(0xCC); // 发Skip ROM命令

write_byte(0xBE); // 发读命令

temp_data[0]=read_byte(); //温度低8位

temp_data[1]=read_byte(); //温度高8位

ow_reset();

write_byte(0xCC); // Skip ROM

write_byte(0x44); // 发转换命令

}

//

/***********温度数据处理函数**********/

void work_temp()

{

display[3]=temp_data[0]&0x0f;

display[0]=ditab[display[3]];  //小数部分

display[3]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x07)<<4);

display[2]=display[3]/10%10;

display[1]=display[3]%10;

}

// 

//

/**************主函数****************/

main()

{

Disdata=0xff;    //初始化端口

discan=0xff;

ow_reset();       // 开机先转换一次

write_byte(0xCC); // Skip ROM

write_byte(0x44); // 发转换命令

for(h=0;h<500;h++)

   {scan();}          //开机显示"0000"2秒

while(1)

{

read_temp();         //读出18B20温度数据

work_temp();         //处理温度数据

   scan();        //显示温度值2秒

}

}

//

//*********************结束**************************//

文档

DS18b20温度测量程序。单片机C51控制

//DS18B20的读写程序,数据脚P3.3////温度传感器18B20汇编程序,采用器件默认的12位转化////最大转化时间750微秒,显示温度-55到+125度,显示精度////为0.1度,显示采用4位LED共阳显示测温值////P0口为段码输入,P24~P27为位选///***************************************************/#include"reg51.h"#include"intrins.h"//_nop_();延时函数用#define
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top