51单片机温度传感器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;
}