⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.c

📁 个人单片机入门程序集合 。很适合刚学单片机的人。用的是keil proteus
💻 C
字号:
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char

sbit DQ=P2^5;

uchar code str9[]="THE TEMPRETURE:";


delaytp(int d)
{
        while(--d);


}





reset(void)
{
   unsigned char x=0;
   DQ = 1;    //DQ复位
   delaytp(8);  //稍做延时
   DQ = 0;    //单片机将DQ拉低
   delaytp(80); //精确延时 大于 480us
   DQ = 1;    //拉高总线
   delaytp(14);
   x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
   delaytp(20);
}



//读一个字节
unsigned char read_byte(void)
{
  unsigned char i=0;
  unsigned char dat = 0;
  for (i=8;i>0;i--)
  {
     DQ = 0; // 给脉冲信号
     dat>>=1;
     DQ = 1; // 给脉冲信号
     if(DQ)
        dat|=0x80;        /*LSB to MSB*/
     delaytp(4);
   }
   return(dat);
}



//写一个字节
write_byte(unsigned char dat)
{
   unsigned char i=0;
   for (i=8; i>0; i--)
   {
      DQ = 0;
      DQ = dat&0x01;
      delaytp(5);
      DQ = 1;
      dat>>=1;
   }
}




//读取温度

  

//读取温度
unsigned char read_temperature(void)
{
   uchar  tplsb;
   uchar  tpmsb;
   uchar  xstemp;

   reset();
   write_byte(0xCC); // 跳过读序号列号的操作
   write_byte(0x44); // 启动温度转换
   reset();
   write_byte(0xCC); //跳过读序号列号的操作
   write_byte(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
   tplsb=read_byte();
   tpmsb=read_byte();
   xstemp=tplsb&0x0f;
   tpmsb=tpmsb<<4;
   tplsb=tplsb>>4;

return(tplsb|tpmsb);
}



unsigned char tempdisplay(void)
{   
   unsigned char iii,i,r=0,j;
   unsigned char t,stra[3];
   float tt=0;
     lcd_wrcmd(0x0f);
          lcd_wrcmd(0x81);
       for(j=0;j<16;j++)lcd_wrdata(str9[j]);
while(1)
      
{
       t=read_temperature();
        if(t<TLL||t>THH)
        P2_4=0;
        else  P2_4=1;
         xstemp=xstemp*625;
         xiaoshu[0]=xstemp/1000+'0';
         xiaoshu[1]=xstemp%1000/100+'0';
         xiaoshu[2]=xstemp%100/10+'0';
         xiaoshu[3]=xstemp%10+'0';

        stra[0]=t/100+'0';
        stra[1]=t%100/10+'0';
       stra[2]=t%10+'0';
       if(stra[0]=='0')
          r=1;
       lcd_wrcmd(0xc2+r);
       for(i=r;i<3;i++)
       lcd_wrdata(stra[i]);
        lcd_wrdata('.');
        for(i=0;i<4;i++)
        lcd_wrdata(xiaoshu[i]);
         lcd_wrdata(2);
       lcd_wrdata(0x43);
         lcd_wrcmd(0xcf);
        iii=getkey();
          
            if(iii==13)
          {
                 state=1;
                 lcd_wrcmd(0x0c);
                 lcd_wrcmd(1);
                 lcd_wrcmd(0x80);
                 break;
           }


}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -