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

📄 ds18b20.c.bak

📁 M8+1302+18b20+8位数码管的sch和gcc源程序
💻 BAK
字号:
#define ds18b20_c
#include "main.h"
/*
lsb first
复位脉冲 低500us,高500us
发出cch,跳过rom匹配
发出44h,转换温度
等待1s,可查询dq为高为止
复位脉冲
发出beh,读9个字节,前2个字节分别为温度的低高位
复位脉冲
结束
*/
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)
{
	_delay_us(38);//20us
}
uchar read_ds18b20(void)
{
	uchar data=0;
	uchar i=0;
	for(i=0;i<8;i++)
	{
		data>>=1;
		//set_ds18b20_dq_ddr();
		clr_ds18b20_dq();
		_delay_us(1);//1us
		set_ds18b20_dq();
		_delay_us(2);//2us
		//clr_ds18b20_dq_ddr();
		if(in_ds18b20_dq()) data|=0x80;
		_delay_us(118);//60us
	}
	return(data);
}
void write_ds18b20(uchar data)
{
	uchar i=0;
	//set_ds18b20_dq_ddr();
	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)
{
	reset_ds18b20();
	ack_ds18b20();
	_delay_ms(1);
	write_ds18b20(ds18b20_skip_rom);
	write_ds18b20(ds18b20_read_ram);
	temperature_low=0;
	temperature_high=0;
	temperature_low=read_ds18b20();
	temperature_high=read_ds18b20();
	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]=0x40;//-
		temp=~temp;
		data=temp/100;
		if(data==0) display_buffer[2]=0;//null
		else display_buffer[2]=pgm_read_byte(display_code+data);
		temp%=100;
		data=temp/10;
		if(data==0) display_buffer[3]=0;//null
		else 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;
		if(data==0) display_buffer[2]=0;//null
		else display_buffer[2]=pgm_read_byte(display_code+data);
		temp%=100;
		data=temp/10;
		if(data==0) display_buffer[3]=0;//null
		else 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 + -