• 大小: 4KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-06-05
  • 语言: 其他
  • 标签:

资源简介

基于AT89S52单片机的数字温度计基于AT89S52单片机的数字温度计基于AT89S52单片机的数字温度计

资源截图

代码片段和文件信息

//ds18b20做的温度计(共阴四位数码管)
#include
#define  uchar  unsigned char
sbit DQ=0xB0;    //已修改为p3的0号端口
uchar data    temp_data[2]={0x000x00};   // 用来存放从18B20读得的高8位和低8位数据
uchar data    display[5]={0x000x000x000x000x00};
unsigned char code ditab[16]={0x000x010x010x020x030x030x04
                              0x040x050x060x060x070x080x080x090x09}; //共阴数码管
uchar code table[11] ={0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f0x00};
    // 0123456789百位或当最高位十位为0时不显示
uchar code table1[10]= {0xcf0x860xdb0xcf0xe60xed0xfd0x870xff0xef};
    // 0.,1.,2.,3.,4.,5.,6.,7.,8.,9.各位带有小数点的显示


void delay_18b20(unsigned int i)
{
while(i--);
}

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




ReadOneChar(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 ;
      delay_18b20(4) ;
    }

      return (dat) ;
}



WriteOneChar(unsigned char dat)
{
    unsigned char i = 0 ;
    for (i = 8 ; i > 0 ; i--)
    {
      DQ = 0 ;
      DQ = dat&0x01 ;
     delay_18b20(5) ;

      DQ = 1 ;
      dat>>=1 ;
    }
}



Read_Temperature(void)

       Init_DS18B20() ;
 
       WriteOneChar(0xCC) ;    // 跳过读序号列号的操作
       WriteOneChar(0x44) ;    // 启动温度转换

       Init_DS18B20() ;
       WriteOneChar(0xCC) ;    //跳过读序号列号的操作
       WriteOneChar(0xBE) ;    //读取温度寄存器 
       temp_data[0] = ReadOneChar() ;     //温度低8位
       temp_data[1] = ReadOneChar() ;

评论

共有 条评论

相关资源