小白跟做江科大51单片机之DS18B02在LCD上显示温度
1.导入LCD1602、Delay相关文件
2.根据原理编写单总线代码
图1 DS18B02原理表示的接口
图2 初始化
#include
sbit OneWire_DQ=P3^7;
unsigned char Onewire_Init()
{
unsigned char i,Answer;
OneWire_DQ=1; //OneWire_DQ在这之前有可能为0
OneWire_DQ=0; //拉低
i = 247; while (--i); //延时500us
OneWire_DQ=1; //主机OneWire_DQ释放总线
i = 32; while (--i); //延时70us
Answer=OneWire_DQ; //读电平
i = 247; while (--i); //延迟480us,用于完成初始化整个过程
return Answer;
}
图3 发送一位数据
void Onewire_WriteBit(unsigned char Bite)
{
unsigned char i;
OneWire_DQ=0; //拉低
i = 4; while (--i); //延时10us,发送一位数据
OneWire_DQ=Bite; //主机释放总线,0表示继续写,1此处释放,表示延时10us发送
i = 24; while (--i); //延时50us
OneWire_DQ=1; //从机OneWire_DQ释放总线,如果Bite==0表示到此处释放,延时60us
}
图4 接收一位数据
unsigned char Onewire_ReadBit()
{
unsigned char i,Bite;
OneWire_DQ=0; //拉低
i = 2; while (--i); //延时5us
OneWire_DQ=1; //释放总线
i = 2; while (--i); //延时5us
Bite=OneWire_DQ;
i = 24; while (--i); //延时50us,为了弥补到60us
return Bite;
}
图5 接收和发送时序
void Onewire_WriteByte(unsigned char Byte)
{
unsigned char i;
for(i=0;i
还没有评论,来说两句吧...