给你ds18b20温度传感器代码你参考,我的空间还有些资料
/****************************************
//DS18B20温度传感器//
//作者:jammylee
//日期:2008-2-25
//版本:V1.0
//晶振:12MHZ
****************************************/
//包含头文件
#include<reg51.h>
#include<stdio.h>
/*****************************************************/
typedef unsigned char uint8; //定义八位无符号变量
/*****************************************************/
//定义引脚(根据硬件改变)
sbit highbit = P2^7;
sbit lowbit = P2^6;
sbit DQ = P3^0; //温度传感器数据引脚通信定义
/**********************************************************************************************/
unsigned char Code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //定义数字显示数组
//0, 1, 2 3 4 5 6 7 8 9
/**********************************************************************************************/
//定义延时子函数
void mDelay(uint8 Delay)
{
while(Delay--);
}
/************************************************************/
//温度传感器DS18B20的初始化函数
Init_DS18B20(void)
{
uint8 x = 0;
DQ = 1; //DQ复位信号
mDelay(8); //延时
DQ = 0; //将DQ电平拉低
mDelay(80); //延时大于480us
DQ = 1; //将DQ电平拉高
mDelay(14); //延时
x = DQ; //如果x=0则初始化成功,x=1则初始化失败
mDelay(20); //延时
}
/************************************************************/
//读一个字节
ReadOneChar(void)
{
uint8 i = 0;
uint8 dat = 0;
for(i=8;i>0;i--)
{
DQ = 0; //低电平脉冲信号
dat>>=1; //dat右移一位
DQ = 1; //高低平脉冲信号
if(DQ)
{
dat |= 0x80;
}
mDelay(4);//延时
}
return(dat); //返回dat值
}
/************************************************************/
//写一个字节
WriteOneChar(uint8 dat)
{
uint8 i = 0;
for(i=8;i>0;i--)
{
DQ = 0; //低电平脉冲信号
DQ = dat&0x01;
mDelay(5);//延时
DQ = 1; //高电平脉冲信号
dat >>= 1;//dat右移一位
}
mDelay(4);
}
/************************************************************/
//读取温度
ReadTemperature(void)
{
uint8 L = 0; //定义温度高八位
uint8 H = 0; //定义温度低八位
uint8 temp = 0;
Init_DS18B20(); //温度传感器DS18B20初始化
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
L = ReadOneChar(); //读取温度值低位
H = ReadOneChar(); //读取温度值高位
L = L>>4;
temp = H<<4;
temp = temp|L;
return(temp);
}
/******************************************************************/
//温度显示函数
void DisplayTemperture(uint8 temp)
{
P0 = Code[temp%10];
lowbit = 0;
mDelay(100);
lowbit = 1;
P0=Code[temp/10];
highbit = 0;
mDelay(100);
highbit = 1;
}
/*******************************************************************/
//主函数
void main(void)
{
uint8 temp;
while(1) //主循环
{
temp = ReadTemperature();
DisplayTemperture(temp);
}
}
温馨提示:内容为网友见解,仅供参考