微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 大家帮我看看这段程序怎么错了 关于ds18b20的程序

大家帮我看看这段程序怎么错了 关于ds18b20的程序

时间:10-02 整理:3721RD 点击:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit ds=P1^0;
uchar code table[]={
0xC0,0xF9,0xA4,0xB0,  
0x99,0x92,0x82,0xF8,  
0x80, 0x90};
uint temp;
float f_temp;
void delay(uint z)   //延迟
{
  uint x,y;
  for(x=z;x>0;x--)
    for(y=110;y>0;y--);
}
void reset()       //复位
{
   uchar i;
   ds=0;
   i=103;
   while(i>0)i--;
   ds=1;
   i=4;
   while(i>0)i--;
}
bit read_bit()    //读一位
{
   uint i;
   bit dat;
   ds=0;i++;
   ds=1;i++;i++;
   dat=ds;
   i=8;
   while(i>0)i--;
   return (dat);
}
uchar tmpread()     //读一个字节
{
   uchar j,i,dat;
   dat=0;
   for(i=1;i<8;i++)
   {
      j=read_bit();
      dat=(j<<7)|(j>>1);
   }
   return (dat);
}
void write(uchar dat)   //写
{
   uint i;
   uchar j;
   bit testb;
   for(j=1;j<=8;j++)
   {
     testb=dat&0x01;
     dat=dat>>1;
     if(testb)
     {
        ds=0;i++;i++;
        ds=1;
        i=8;
        while(i>0)i--;
     }
     else
     {
        ds=0;
        i=8;
        while(i>0)i--;
        ds=1;i++;i++;
     }
   }
}
void stop()    //开始获取温度并转换
{
   reset();
   delay(1);
   write(0xcc);
   write(0x44);
}
uint read_data()    //读温度
{
   uchar a,b;
   reset();
   delay(1);
   write(0xcc);
   write(0xbe);
   a=tmpread();
   b=tmpread();
   temp=b;
   temp<<=8;
   temp=temp|a;
   f_temp=temp*0.0625;
   temp=f_temp*10+0.5;
   return (temp);   
}
void display(uint temp)   //显示程序
{
   uchar ad1,ad2,ad3;
   ad1=temp/100;
   ad2=temp%100/10;
   ad3=temp%10;
  
   P0=0xff;
   P0=table[ad1];
   P2=0x01;
   delay(1);
   P0=0xff;
   P0=table[ad2];
   P2=0x02;
   delay(1);
   P0=0xff;
   P0=table[ad3];
   P2=0x04;
   delay(1);
}
void main()
{
   uchar a;
   do
   {
      stop();
      for(a=10;a>0;a--)
      {
          display(read_data()) ;
      }   
   }while(1);
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top