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

📄 ds18b20.c

📁 MSP430单片机用12864液晶绘制DS18B20温度曲线源代码
💻 C
字号:
//******************************************************************************
//                MSP430F149
//            -----------------
//        /|\|              XIN|-
//         | |                 | 32kHz
//         --|RST          XOUT|-
//           |                 |
//           |                 |
//           |           P2.5  |<----TEMP_DQ 
//           |                 |
//
//	Copyright (c) WHUT,All Rights Reserved.
//	[Author]:tkin
//  [Email]:tkin1992@qq.com
//	[Date]:2011/11/25
// 	Built with IAR Assembler for MSP430 5.30.1 (5.30.1.50284)
//******************************************************************************
#include <msp430x14x.h>
#include "DS18B20.h"

#define CPU_F ((double)8000000) 
#define delayus(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) 
#define delayms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

#define uchar unsigned char
#define uint unsigned int

//=========================================
//函数功能:初始化DS18B20
//=========================================
void Init_DS18B20()
{
	//uchar x;
 	CLR_TEMP_DQ;  
 	delayus(560);  		//480~960us
 	SET_TEMP_DQ;      
	delayus(60);		//>=480us
 	//P2DIR &= ~(BIT5);
 	//x = TEMP_DQ_In;   //稍做延时后,如果x=0则初始化成功,x=1则初始化失败
 	//P2DIR |= BIT5;
 	delayus(500);
}

//=========================================
//函数功能:读一字节
//=========================================
uchar ReadOneChar()
{
	uchar i = 0;
 	uchar dat = 0;
 	for(i=0;i<8;i++)
	{
  		CLR_TEMP_DQ;
		delayus(15);
  		dat >>= 1;
  		SET_TEMP_DQ;
  		P2DIR &= ~(BIT5);	//设置为输入  
  		if(TEMP_DQ_In)
  		{
    		dat |= 0x80;
  		} 
  		P2DIR |= BIT5;		//设置为输出
  		delayus(45);
 	}
 	return dat;
}

//=========================================
//函数功能:写一个字节
//=========================================
void WriteOneChar(uchar dat)
{
	uchar i = 0;
 	for(i=0;i<8;i++)
 	{
		CLR_TEMP_DQ;
		delayus(15);
		if(dat & 0x01)
		{
			SET_TEMP_DQ;
		}
		else
		{
			CLR_TEMP_DQ;
		}
		delayus(45);
		SET_TEMP_DQ;
		dat >>= 1;
 	}
}

//=========================================
//函数功能:读取温度
//=========================================
uint Get_Temp()
{
	uchar a = 0,b = 0;
 	uint temp = 0;
 	float f_temp = 0;
 	Init_DS18B20();
 	WriteOneChar(0xCC);  //跳过读序号列号的操作
 	WriteOneChar(0x44);  //启动温度转换
 	Init_DS18B20();
 	WriteOneChar(0xCC);  //跳过读序号列号的操作
 	WriteOneChar(0xBE);  //读取温度寄存器
 	a = ReadOneChar();   //读低8位
 	b = ReadOneChar();  //读高8位
 	temp = (b << 8) | a;
 	f_temp = temp * 0.0625;
 	temp= f_temp * 10 + 0.5;   //放大10倍输出并四舍五入
 	return temp;
}

⌨️ 快捷键说明

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