原创 DS18b20 C程序

2010-6-11 08:41 2105 3 3 分类: MCU/ 嵌入式

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit out="P3"^5;
sbit led="P3"^4;
sbit A0=ACC^0;
sbit A1=ACC^1;
sbit A2=ACC^2;
sbit A3=ACC^3;
sbit A4=ACC^4;
sbit A5=ACC^5;
sbit A6=ACC^6;
sbit A7=ACC^7;
uchar disp[]={0,0,0};
uchar tab[]={0xc0,0xf9,0xa4,0xb0,
   0x99,0x92,0x82,0xf8,0x80,0x90};
uint temp;
uchar a,b;
uchar xiaoshu;
ulong tt;
void delay2us(unsigned char i)
{    
 while(--i);
}


void delay(uint t)
{
 uint i;
 while(t--)
 for(i=0;i<125;i++);
}
void start()
{
 out=0;
 delay2us(250);
 out=1;
 delay2us(30);
}
void write(unsigned char dat)
{
 uchar i;
 ACC=dat;
 for(i=8;i>0;i--)
 {
  if(A0)
  {
   out=0;
   delay2us(1);
   out=1;
   delay2us(27);
  }
  else
  {
   out=0;
   delay2us(32);
   out=1;
  }
  ACC>>=1;
 }
}
bit tbit (void)
{
 bit dat;
 out=0;
 delay2us(2);
 out=1;
 _nop_();
 dat=out;
 delay2us(26);
 return(dat);
}
uchar read(void)
{
 unsigned char i,j,date=0;
 for(i=8;i>0;i--)
 {
  j=tbit();
  date=(j<<7)|(date>>1);
 }
 return(date);
}
void display()
{
 uchar i;
 int t="100";
 uchar scan;
 while(--t>=0)
 {
  scan=4;
  for(i=0;i<3;i++)
  {
   P0=0xff;
   P2=~scan;
   P0=tab[disp];
   if(i==1)
   P0=tab[disp]&0x7f;
   delay(4);
   scan<<=1;
  }
  
 }
 
}
void main()
{
 out=1;
 while(1)
 {
  start();
  write(0xcc);
  write(0x44);
  display();
  start();
  write(0xcc);
  write(0xbe);
  a=read();
  b=read();
  xiaoshu=a;
  temp=(b<<4)|(a>>4);
  tt=temp;
  xiaoshu=xiaoshu&0x0f;
  xiaoshu=xiaoshu*625/1000;
  disp[2]=tt/10;
  disp[1]=tt%10;
  disp[0]=xiaoshu%10;
  display();
 }
}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
3
关闭 站长推荐上一条 /4 下一条