求求基于51单片机的数字温度计设计 单片机AT89C51 测温传...

2024-11-02 07:41:23
推荐回答(1个)
回答1:

  求求基于51单片机的数字温度计设计 单片机AT89C51 测温传...
  nclude reg51.H>

  #define uint unsigned int
  #define uchar unsigned char

  #define Alarm_Value 30//温度报警值

  sbit rs = P2^0;
  sbit lcdcs = P2^2;
  sbit buzzer = P3^4; //蜂鸣器报警
  sbit OUT = P3^5;//光的检测
  sbit DQ = P3^7; //温度传送数据IO口
  uchar TempBuffer[8];
  uint temp_value;//温度值
  light_flag=1;//标志位

  uchar value1[]={"TempShow:"};
  uchar value2[]={"LightY/N:"};
  uchar value3[]={"YES"};
  uchar value4[]={"NO "};

  /*******************************ds18b20子程序*******/

  /***********ds18b20延迟子函数(晶振12MHz )*******/

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

  /**********ds18b20初始化函数***********************/

  void Init_DS18B20(void)
  {
  unsigned char x=0;
  DQ = 1;
  delay_18B20(8);
  DQ = 0;
  delay_18B20(80);
  DQ = 1;
  delay_18B20(14);
  x=DQ;
  delay_18B20(20);
  }

  /***********ds18b20读一个字节**********************/

  unsigned char ReadOneChar(void)
  {
  uchar i=0;
  uchar dat = 0;
  for (i=8;i>0;i--)
  {
  DQ = 0; // 给脉冲信号
  dat>>=1;
  DQ = 1; // 给脉冲信号
  if(DQ)
  dat|=0x80; //先读入低字节
  delay_18B20(4);
  }
  return(dat);
  }

  /*************ds18b20写一个字节********************/

  void WriteOneChar(uchar dat)
  {
  unsigned char i=0;
  for (i=8; i>0; i--)
  {
  DQ = 0;
  DQ = dat&0x01;
  delay_18B20(5);
  DQ = 1;
  dat>>=1;
  }
  }

  /**************读取ds18......春满人间百花吐艳 福临小院四季常安 欢度春节