阅读背景:

ds18b20温度传感器主程序

来源:互联网 
#include<reg52.h>
#include<intrins.h>
#include "./delay/delay.h"
#include <stdio.h>
#include "./display/display.h"

sbit ds= P2^3;
bit ack = 0;
#define SUCC 1
#define ERR 0

void ds18b20_init()
{
	//P0 = 0x00;
	ds = 0;
	delay_us(200);
	delay_us(200);
	ds = 1;
	delay_us(30);
	if(ds == 0)  
	{
		ack = SUCC;
	}
	else  
	{
		ack = ERR;
	}
	delay_us(200);
}
void ds18b20_write_byte(unsigned char byte)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		ds = 1;
		ds = 0;
		_nop_();
		_nop_();
		ds = byte & 0x01;
		byte >>= 1;
		delay_us(30);
	}
	delay_us(30);
	ds = 1;
}


bit ds18b20_read_bit()
{
	bit tmp;
	ds = 1;
	ds = 0;
	_nop_();
	_nop_();
	ds = 1;
	tmp = ds;
	delay_us(30);

	return tmp;
}


unsigned char ds18b20_read_byte()
{
	unsigned char i,j,k = 0;
	for(i = 0;i < 8;i++)
	{
		j = ds18b20_read_bit();
		k = (j << 7) | (k >> 1);//j <<= 7;k >>= 1;k += j;
	}
	return k;
}


void main()
{
	unsigned char a;
	unsigned int b,temp;
	float temp_f;
	unsigned char disbuf[20];

	LCD_Init();
	while(1)
	{
		ds18b20_init();
		ds18b20_write_byte(0xcc);
		ds18b20_write_byte(0x44);
		delay_us(20);
		ds18b20_init();
		ds18b20_write_byte(0xcc);
		ds18b20_write_byte(0xbe);
		a = ds18b20_read_byte();
		b = ds18b20_read_byte();
		temp = (b << 8) + a;
		temp_f = (float)temp * 0.0625;
		sprintf(disbuf,"temp is %7.3f",temp_f);
		LCD_Write_String(0,0,disbuf);
		
	}
}#include<reg52.h>
#include<intrins.h>
#include 



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: