单片机——ds18b20

该博客介绍了如何利用单片机配合DS18B20传感器获取环境温度,并将读取到的温度值在LCD1302显示器上进行显示。通过初始化、发送指令和读取数据的步骤,实现温度的实时监测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

获取当前环境温度值,并在lcd上显示
#include <reg52.h>
#include "intrins.h"
#include "./delay/delay.h"
#include "stdio.h"
#include "./lcd1302/lcd1302.h"
bit ack = 0;
sbit ds = P1^0;
void ds_reset()
{
   ds = 1;
   ds = 0;
   delay_us(200);
   delay_us(200);
 
   ds = 1;
   delay_us(30);
 
   if(ds == 0)
  {
     ack = 1;
  }
  else
  {
     ack = 0;
    }
  
  delay_us(200);
  delay_us(100);
}
void ds_send_byte(unsigned char byte)
{
   unsigned char i;
  
   for(i = 0; i < 8; i++)
   {
     ds = 0;
     _nop_();
     _nop_();
    
     ds = byte & 0x01;
     byte >>= 1;
      delay_us(30);
     ds = 1;
    }
  
  delay_us(30);
}
bit ds_read_bit()
{
   bit temp;
   ds = 1;
   ds = 0;
   _nop_();
   _nop_();
 
   ds = 1;
   temp = ds;
   delay_us(30);
   return temp;
}
unsigned char ds_read_byte()
{
   unsigned char i,j,k;
 
   for(i = 0; i < 8; i++)
   {
     j = ds_read_bit();
     k = (j << 7) | (k >> 1);
    }
  return k;
}
void main()
{
   unsigned char a;
   unsigned int b,temp;
   float wendu;
   unsigned char disbuf[20];
 
    lcd_init();
   while(1)
  {
      ds_reset();
       ds_send_byte(0xcc);
     ds_send_byte(0x44);
   
     ds_reset();
     ds_send_byte(0xcc);
     ds_send_byte(0xbe);
   
     a = ds_read_byte();
     b = ds_read_byte();
   
     temp = (b << 8) | a;
     wendu = (float)temp * 0.0625;
     sprintf(disbuf,"temp is %7.3f",wendu);
     lcd_str_display(0,0,disbuf);
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值