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

📄 ds18b20.c

📁 avr的ds18b20驱动
💻 C
字号:
#include "AVR/io.h"
#include "avr/iom8.h"
#include "avr/interrupt.h"
#include "1602.h"
#include <util/delay.h>
//定义18b20硬件相关
#define DS18B20_OUT PORTD
#define DS18B20_IN PIND
#define DS18B20_DDR DDRD
#define DS18B20_BIT 0
#define DQ_1 sbi(DS18B20_OUT,DS18B20_BIT)
#define DQ_0 cbi(DS18B20_OUT,DS18B20_BIT)
#define DQ_IN cbi(DS18B20_DDR,DS18B20_BIT)
#define DQ_OUT sbi(DS18B20_DDR,DS18B20_BIT)
#define DQ_NUM DS18B20_IN&(1<<DS18B20_BIT)

/********************************************************
函数名称:DS18B20_INIT(void)
函数功能:DS18B20复位 
注意事项:主机发送复位脉冲最少480US,DS18B20等待15~60US 
提示说明:无 
输    入: 
返    回:1:失败 0:成功 

********************************************************/
uchar DS18B20_INIT(void)
{
	uchar temp;
	DQ_OUT;
	DQ_1;    
	asm("nop");
	DQ_0;
	_delay_us(500);//延时 480us-960us之间
	DQ_1;
	DQ_IN;
	_delay_us(60);
	temp=DQ_NUM;
	_delay_us(240);
	return temp;
}
/********************************************************
函数名称:uchar DS18B20_R(void)
函数功能:DS18B20读取1个字节
注意事项:
提示说明:
输    入: 
返    回:unsigned char

********************************************************/
uchar DS18B20_R(void)
{
	uchar i;
	uchar temp=0;
	
	for(i=8;i>0;i--)
	{
		temp>>=1;
		DQ_OUT;
		DQ_0;
		DQ_1;
		DQ_IN;
		if(DQ_NUM)
		temp|=0x80;
		_delay_us(60);
		
	}
	return(temp);
	
}
/********************************************************
函数名称:void DS18B20_W(uchar dat)
函数功能:DS18B20写入1个字节
注意事项:
提示说明:
输    入: unsigned char dat
返    回:无

********************************************************/
void DS18B20_W(uchar dat)
{
	uchar i;
	DQ_OUT;
	for(i=8;i>0;i--)
	{
		DQ_0;_delay_us(4);
		if(dat&0x01)DQ_1;
		_delay_us(80);
		DQ_1;
		dat>>=1;
	}
	_delay_us(100);
	}

void char_to_ASCII(unsigned char i,unsigned char *p)  //整数到ASCII
{
	p[0]=i/100+48;
	p[1]=(i/10)%10+48;
	p[2]=i%10+48;
	p[3]=0;
}
int main(void)
{
	uchar a,b,c;uchar disbuf[4];
	lcd_init();
	while(1)
	{
	
	if(DS18B20_INIT())
	lcd_string(0,0,"no");
	else
	lcd_string(0,0,"yes");
	_delay_us(10);
	DS18B20_W(0xcc);
	DS18B20_W(0x44);
	_delay_ms(750);
	DS18B20_INIT();
	_delay_us(10);
	DS18B20_W(0xcc);
	DS18B20_W(0xbe);	
	a=DS18B20_R();
	b=DS18B20_R();
	c=(b<<4)+(a>>4);
	char_to_ASCII(a,disbuf);
	lcd_string(4,0,disbuf);
	char_to_ASCII(b,disbuf);
	lcd_string(7,0,disbuf);
	char_to_ASCII(c,disbuf);
	lcd_string(0,1,disbuf);
	}


while(1);
}

⌨️ 快捷键说明

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