51单片机温度传感器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

a#include

#define uchar unsigned char

#define uint unsigned int

int table1[]={0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0}; //无小数点int table2[]={0x08,0xcb,0x12,0x82,0xc1,0x84,0x04,0xca,0x00,0x80}; //有小数点int qian,bai,shi,ge;

uchar c[2];

float cc;

void delay(int m);

uchar reset();

void read_temperature();

void display(int a,int b,int c,int d);

void write_byte(char val);

sbit DQ=P1^0;

sbit D1=P2^7;

sbit D2=P2^6;

sbit D3=P2^5;

sbit D4=P2^4;

void main()

{

uint i;

while(1)

{

DQ=1;

read_temperature();

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

{

qian=(int)cc%100/10;

bai=(int)cc%10;

shi=(int)(cc*10)%10;

ge=(int)(cc*100)%10;

display(qian,bai,shi,ge);

}

}

}

void delay(int m)

{

for(;m>0;m--);

}

uchar reset( ) //复位信号

{

uchar presence;

DQ=0;

delay(29);

DQ=1;

delay(3);

presence=DQ;

delay(25);

return(presence);

}

uchar read_byte( ) //读字节

{

uchar i;

uchar value=0;

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

{

value>>=1;

DQ=0;

DQ=1;

delay(1);

if(DQ)

value|=0x80;

delay(6);

}

return(value);

}

void write_byte(char val) //写字节{

uchar i;

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

{

DQ=0;

DQ=val&0x01;

delay(5);

DQ=1;

val=val/2;

}

delay(5);

}

void read_temperature( ) //读温度

{

reset();

write_byte(0xCC);

write_byte(0x44);

delay(300);

reset();

write_byte(0xCC);

write_byte(0xBE);

delay(10);

c[1]=read_byte();

c[0]=read_byte();

cc=(c[0]*256+c[1])*0.0625;

}

void display(int a,int b,int c,int d) //显示函数{

P0=table1[a];

D1=0;

delay(5);

D1=1;

P0=table2[b];

D2=0;

delay(5);

D2=1;

P0=table1[c];

D3=0;

delay(5);

D3=1;

P0=table1[d];

D4=0;

delay(5);

D4=1;

}

相关文档
最新文档