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

📄 ds18b20.c

📁 M8+1302+18b20+8位数码管的sch和gcc源程序
💻 C
字号:
#define ds18b20_c
#include "main.h"
void reset_ds18b20(void)
{
	clr_ds18b20_dq();
	_delay_us(198);//100us
	_delay_us(198);//100us
	_delay_us(198);//100us
	_delay_us(198);//100us
	set_ds18b20_dq();
	_delay_us(38);//20us
}
void ack_ds18b20(void)
{
	while(in_ds18b20_dq());
    while(!(in_ds18b20_dq()));
	_delay_us(38);//20us
}
uchar read_ds18b20(void)
{
	uchar data=0;
	uchar i=0;
	for(i=0;i<8;i++)
	{
		data>>=1;
		clr_ds18b20_dq();
		_delay_us(1);//1us
		set_ds18b20_dq();
		_delay_us(2);//2us
		if(in_ds18b20_dq()) data|=0x80;
		_delay_us(118);//60us
	}
	return(data);
}
void write_ds18b20(uchar data)
{
	uchar i=0;
	for(i=0;i<8;i++)
	{
		if(data&0x01){
			clr_ds18b20_dq();
			_delay_us(14);//8us
			set_ds18b20_dq();
			_delay_us(108);//55us
		}
		else
		{
			clr_ds18b20_dq();
			_delay_us(108);//55us
			set_ds18b20_dq();
			_delay_us(14);//8us
		}
		data>>=1;
	}	
}
void convert_ds18b20(void)
{
	reset_ds18b20();
    ack_ds18b20();
    _delay_ms(1);
    write_ds18b20(ds18b20_skip_rom);
    write_ds18b20(ds18b20_convert_tem);
}
void read_temperature(void)
{
	uchar low=0;
	uchar high=0;
	reset_ds18b20();
	ack_ds18b20();
	_delay_ms(1);
	write_ds18b20(ds18b20_skip_rom);
	write_ds18b20(ds18b20_read_ram);
	low=read_ds18b20();
	high=read_ds18b20();
	if(high!=0xff)
	{
		temperature_low=low;
		temperature_high=high;
	}
	else if(low!=0xff)
	{
		temperature_low=low;
		temperature_high=high;
	}
	convert_ds18b20();
}
void display_temperature(void)
{
	uchar temp=0;
	uchar data=0;
	temp=temperature_high<<4;
	temp+=temperature_low>>4;
	if(temp>0x80)//负
	{		
		display_buffer[0]=0;
		temp=~temp;
		data=temp/100;
		display_buffer[2]=0x40;//-
		temp%=100;
		data=temp/10;
		display_buffer[3]=pgm_read_byte(display_code+data);
		data=temp%10;
		display_buffer[4]=pgm_read_byte(display_code+data);		
	}
	else
	{
		display_buffer[0]=0;//null
		data=temp/100;
		display_buffer[2]=0;//pgm_read_byte(display_code+data);
		temp%=100;
		data=temp/10;
		display_buffer[3]=pgm_read_byte(display_code+data);
		data=temp%10;
		display_buffer[4]=pgm_read_byte(display_code+data);		
	}
	display_buffer[1]=0;//空
	display_buffer[5]=0;//空
	display_buffer[6]=0x63;//o
	display_buffer[7]=0x39;//c
}

⌨️ 快捷键说明

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