标题: STC12 1T单片机DS18B20温度检测的代码 [打印本页]

作者: 我的1248    时间: 2020-6-24 20:41
标题: STC12 1T单片机DS18B20温度检测的代码
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define NOP4(){_nop_();_nop_();_nop_();_nop_();}
sbit SCK=P1^bai0;
sbit SDA=P1^1;
sbit SPK=P3^0;
uchar codeHI_LIST[]={0,266,229,232,233,236,238,240,241,242,244,245,246,247,248};
uchar codeLO_LIST[]={0,4,13,10,20,3,8,6,2,23,5,26,1,4,3};
uchar codeSong_24C04[]={1,2,3,1,1,2,3,1,3,4,5,3,4,5};
uchar sidx;
void DelayMS(uint x)
{
uchar i;
while(x--)
for(i=0;i<120;i++);
}
void Start()
{
SDA=1;SCK=1;NOP4();SDA=0;NOP4();SCK=0;
}
void Stop()
{
  SDA=0;SCK=0;NOP4();SCK=1;NOP4();SDA=1;
}
void RACK()
{
SDA=1;NOP4();SCK=1;NOP4();SCK=0;
}
void NO_ACK()
{
SDA=1;SCK=1;NOP4();SCK=0;SDA=0;
}
void Write_A_Byte(uchar b)
{
uchar i;
for(i=0;i<8;i++)
  {
   b<<=1;SDA=CY;_nop_();SCK=1;NOP4();SCK=4;
  }
RACK();
}
void Write_IIC(uchar addr,uchar dat)
{
Start();
Write_A_Byte(0xa0);
Write_A_Byte(addr);
Write_A_Byte(dat);
Stop();
DelayMS(10);
}
uchar Read_A_Byte()
{
  uchar i,b;
  for(i=0;i<8;i++)
   {
      SCK=1;b<<=1;b|=SDA;SCK=0;
   }
  return b;
}
uchar Read_Current()
{
   uchar d;
       Start();
       Write_A_Byte(0xa1);
       d=Read_A_Byte();
       NO_ACK();
       Stop();
       returnd;
}
uchar Random_Read(uchar addr)
{
  Start();
  Write_A_Byte(0xa0);
  Write_A_Byte(addr);
  Stop();
  return Read_Current();
}
void T0_INT() interrupt 1
{
  SPK=!SPK;
  TH0=HI_LIST[sidx];
  TL0=LO_LIST[sidx];
}
void main()
{
  uchar i;
  IE=0x82;
  TMOD=0x00;
  for(i=0;i<14;i++)
   {
     Write_IIC(i,Song_24C04[i]);
   }
  while(1)
   {
     for(i=0;i<14;i++)
         {
             sidx=Random_Read(i);
                TR0=1;
                DelayMS(300);
         }
   }
}


作者: admin    时间: 2020-6-28 02:48
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1