请帮我写一段51单片机驱动DS18B20的代码
时间: 2023-06-03 10:04:21 浏览: 178
DS18B20的51单片机驱动代码
好的,我可以帮你写一段简单的51单片机驱动DS18B20的代码,以下是参考代码:
#include <STC89C5xRC.H>
#define DQ P3_7
unsigned char TempH,TempL; //定义高低温度变量
void Delay1us() //微秒级延时函数
{
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
}
void Write_DS18B20(unsigned char dat) //写入一个字节函数
{
unsigned char i;
for (i = 0; i < 8; i++)
{
DQ = 0;
Delay1us();
DQ = dat & 0x01;
Delay1us();
DQ = 1;
dat >>= 1;
}
}
unsigned char Read_DS18B20() //读取一个字节函数
{
unsigned char dat = 0x00;
unsigned char i;
for (i = 0; i < 8; i++)
{
DQ = 0;
Delay1us();
DQ = 1;
Delay1us();
dat >>= 1;
if(DQ)
dat |= 0x80;
else
dat &= 0x7f;
}
return dat;
}
void Init_DS18B20() //初始化函数
{
DQ = 1;
Delay1us();
DQ = 0;
Delay1us();
DQ = 1;
Delay1us();
}
void Get_DS18B20() //读取温度函数
{
Init_DS18B20();
Write_DS18B20(0xCC); //跳过ROM指令
Write_DS18B20(0x44); //温度转换指令
while(!DQ); //等待转换完成
Init_DS18B20();
Write_DS18B20(0xCC); //跳过ROM指令
Write_DS18B20(0xBE); //读取温度指令
TempL = Read_DS18B20(); //先读低8位
TempH = Read_DS18B20(); //后读高8位
}
void main()
{
while(1)
{
Get_DS18B20(); //读取温度
P0 = TempL; //显示低8位温度
P1 = TempH; //显示高8位温度
}
}
请注意:这只是一个简单的示例代码,具体应用时需要根据实际情况进行改动和调试。
阅读全文