求用单片机设计一个0-80摄氏度的温度检测系统

具体要求测量精度1度,LED显示,不限制传感器类型,速求

第1个回答  2011-12-12

#include<reg52.h>

#include <intrins.h>

#define  uchar  unsigned  char 

#define  uint   unsigned  int

sbit  DATA = P1^0; //DS18B20接入口

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

char  bai,shi,ge; //定义变量

/*延时子函数*/

void delay(uint num)

{

while(num--) ;

}

/*************DS18b20温度传感器函数*********************/

void Init_DS18B20(void)    //传感器初始化

{

  uchar x=0;

  DATA = 1;     //DQ复位

  delay(10);   //稍做延时

  DATA = 0;     //单片机将DQ拉低

  delay(80);  //精确延时 大于 480us    //450

  DATA = 1;    //拉高总线

  delay(20);

  x=DATA;       //稍做延时后 如果x=0则初始化成功 x=1则初始化失败

  delay(30);

}

//读一个字节

ReadOneChar(void)

{

uchar i=0;

uchar dat = 0;

for (i=8;i>0;i--)

  {

   DATA = 0; // 给脉冲信号

   dat>>=1;

   DATA = 1; // 给脉冲信号

   if(DATA)

    dat|=0x80;

   delay(8);

  }

  return(dat);

}

//写一个字节

void WriteOneChar(unsigned char dat)

{

  uchar i=0;

  for (i=8; i>0; i--)

  {

   DATA = 0;

   DATA = dat&0x01;

   delay(10);

   DATA = 1;

   dat>>=1;

  }

delay(8);

}

//读取温度

int ReadTemperature(void)

{

uchar a=0;

uchar b=0;

int t=0;

float tt=0;

Init_DS18B20();

WriteOneChar(0xCC); // 跳过读序号列号的操作

WriteOneChar(0x44); // 启动温度转换

Init_DS18B20();

WriteOneChar(0xCC); //跳过读序号列号的操作

WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度

a=ReadOneChar(); //低位

b=ReadOneChar(); //高位

t=b;

t<<=8;

t=t|a; //得到温度值的各个位的值

t=t*0.0625;   //得到实际的温度值

return(t);

}

/*显示子函数*/

void  display(int bai,int shi,int ge)

{

P0 = 0xff; //对数码管清零,防止串扰

P2=0xfb;

P0=table[bai]; //显示百位

delay(50); //一小段延时动态显示

P0 = 0xff; //对数码管清零,防止串扰

P2=0xf7;

P0=table[shi]; //显示十位

delay(50);

P0 = 0xff;

P2=0xef;

P0=table[ge] & 0x7f; //显示个位

delay(100);

P0 = 0xff;

P2=0xdf;

P0=table[0]; //显示小数位,这里没有处理小数位,默认的为0

delay(50);

}

void  main()

{

int  temp;

while(1)

{  

temp = ReadTemperature(); //读温度

bai = temp / 100; //获取百位

shi = temp % 100 / 10; //获取十位

ge = temp % 10; //获取个位

display(bai,shi,ge); //显示函数

}  

}

第2个回答  2011-12-12
18B20完全可以实现。你留个邮箱发给你。
第3个回答  2011-12-17
AVR单片机的写过18B20的
相似回答
大家正在搜