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

📄 sensorlib.c

📁 一个数字温度计源代码 MCU是AT89S52 温度传感器是DS18B20 温度测量范围-30 - 100 精度0.5度
💻 C
字号:
//this file contain the method to operate the sensor
//Author;Decell.Zhou


#include "SensorLib.h"
#include "ledLib.h"


void delay15(){//delay for 15us
	unsigned char i;
	for(i = 0;i < 8;i++);
}



//============[write1TS]==============
//Description:generate a write 1 Time Slot to DS18B20
//Author:Decell.Zhou
//Version
//Arg:none
//Return:none
//====================================
void write1TS(void){

	
	sensorDQ = 1;//pull up the bus
	sensorDQ = 0;//generate a time slot
	_nop_ ();//wait for 7us
	_nop_ (); 
	_nop_ (); 
	_nop_ (); 
	_nop_ (); 
	_nop_ ();
	_nop_ ();
	sensorDQ = 1;//pull up the bus
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
	delay15();
	delay15();
	delay15();
	  
}


//============[write0TS]==============
//Description:generate a write 0 Time Slot to DS18B20
//Author:Decell.Zhou
//Version
//Arg:none
//Return:none
//====================================
void write0TS(void){

	sensorDQ = 1;;
	sensorDQ = 0;
	delay15();
	delay15();
	delay15();
	delay15();
	sensorDQ = 1;
	_nop_ ();
	_nop_ ();


}


//===========[readTS]=================
//Description:generate a read Time Slot to DS18B20
//Author:Decell.Zhou
//Version
//Arg:none
//Return:none
//====================================
bit readTS(void){
	
	bit b;

	sensorDQ = 1;//generate a read time slot
	sensorDQ = 0;
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
	sensorDQ = 1;//release the bus
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
	_nop_ ();
	b = sensorDQ;
	delay15();
	delay15();
	delay15();
	_nop_ ();
	_nop_ ();
	return b;

			
}


//===========[writeSensor]============
//Description:write a byte to the DS18B20
//Author:Decell.Zhou
//Version:
//Arg: value |  unsigned char  | the vaule you want to send to DS18B20
//Return:none
//==================================
void writeSensor(unsigned char value){
	unsigned char bitCount;
	
	for(bitCount = 0;bitCount < 8;bitCount++){

		if((value & 0x1) == 1){
			write1TS();
		}else{
			write0TS();
		}
		value = value >> 1;
	}
		

}

//==========[readSensor]==============
//Description:read  a value from the DS18B20
//Author:Decell.Zhou
//Version:
//Arg:none
//Return:the byte read read from the sensor | unsigned char
//===================================
unsigned char readSensor(void){
	unsigned char bitCount;
	bit tmpBit;
	unsigned char value;
	unsigned char valueMsk;

	valueMsk = 0x0;
	
	for(bitCount = 0,value = 0;bitCount < 8;bitCount++){
		tmpBit = readTS();
		//for(i = 0;i < 1000;i++){
		//	ledSetDigit(tmpBit,0,0);
		//}
		valueMsk |= tmpBit;
		value = value + ((valueMsk & 0x1)<< bitCount);
		valueMsk = 0x0;
		tmpBit = 0;
	}
	
	return value;
}

//==========[resetSensor]=============
//Description:generate a reset signal to the Sensor
//Author:Decell.Zhou
//Version;
//Arg:none
//Return:none
//====================================
void resetSensor(void){
	int i;	

	sensorDQ = 1;
	sensorDQ = 0;
	for(i = 0;i < 300;i++);//delay for 500us
	sensorDQ = 1;//release the bus
	while(sensorDQ);//wait for the DS18B20 to pull low the bus
	_nop_ ();
	while(!sensorDQ);
	for(i = 0;i < 300;i++);//delay for 500us;

}


⌨️ 快捷键说明

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