qq_52114764 2022-02-15 10:27
浏览 14
已结题

51单片机中温度传感器ds18b20无法正常工作,我的代码如下

#include<STC15F2K60S2.H>
unsigned char tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X02,0xF8,0x80,0x90};
unsigned char wd;
sbit DQ = P1^4; //单总线接口

//单总线延时函数
void Delay_OneWire(unsigned int t) //STC89C52RC
{
while(t--);
}

//通过单总线向DS18B20写一个字节
void Write_DS18B20(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
DQ = 0;
DQ = dat&0x01;
Delay_OneWire(5);
DQ = 1;
dat >>= 1;
}
Delay_OneWire(5);
}

//从DS18B20读取一个字节
unsigned char Read_DS18B20(void)
{
unsigned char i;
unsigned char dat;

for(i=0;i<8;i++)
{
    DQ = 0;
    dat >>= 1;
    DQ = 1;
    if(DQ)
    {
        dat |= 0x80;
    }        
    Delay_OneWire(5);
}
return dat;

}

//DS18B20设备初始化
bit init_ds18b20(void)
{
bit initflag = 0;

  DQ = 1;
  Delay_OneWire(12);
  DQ = 0;
  Delay_OneWire(80);
  DQ = 1;
  Delay_OneWire(10); 
initflag = DQ;     
  Delay_OneWire(5);

  return initflag;

}
unsigned char wdget()
{
unsigned char low,high,temp;
init_ds18b20();
Write_DS18B20(0XCC);
Write_DS18B20(0X44);
Delay_OneWire(500);

init_ds18b20();
Write_DS18B20(0XCC);
Write_DS18B20(0XBE);
Delay_OneWire(500);

low=Read_DS18B20();
high=Read_DS18B20();
temp=high<<4;
temp=temp|(low>>4);
return temp;

}

void ch()
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
}
void dly(int ms)
{
int i,j;
for(i=0;i<ms;i++)
{
for(j=845;j>0;j--);
}
}

void display()
{
P2=0XC0;
P0=0X01;
P2=0XFF;
P0=tab[wd/10];
dly(2);
P2=0XC0;
P0=0X02;
P2=0XFF;
P0=tab[wd%10];
dly(2);
}
void main()
{
ch();
while(1)
{
wd=wdget();
display();
}
}

运行结果如图

img

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 2月23日
    • 创建了问题 2月15日

    悬赏问题

    • ¥15 webstorm上开发的vue3+vite5+typeScript打包时报错
    • ¥15 vue使用gojs,需求在link中的虚线上添加方向箭头
    • ¥15 CSS通配符清除内外边距为什么可以覆盖默认样式?
    • ¥15 SPSS分类模型实训题步骤
    • ¥100 求ASMedia ASM1184e & ASM1187e 芯片datasheet/规格书
    • ¥15 求解决扩散模型代码问题
    • ¥15 工创大赛太阳能电动车项目零基础要学什么
    • ¥20 limma多组间分析最终p值只有一个
    • ¥15 nopCommerce开发问题
    • ¥15 torch.multiprocessing.spawn.ProcessExitedException: process 1 terminated with signal SIGKILL