刚刚用C语言编写了一个测温程序,竟然不能用,帮忙分析一下!谢谢了。程序中温度的上限、下限没有涉及。
#include<reg51.h> //51单片机
sbit DQ=P3^7;
sbit ls138A=P2^2; //数码管的位选 是通过74138实现的。
sbit ls138B=P2^3;
sbit ls138C=P2^4;
#define ucha unsigned char
#define uint unsigned int
uint i,num;
ucha table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77
};
ucha aa;
void delay(uint m)//延时程序
{
while(m--);
}
void init_ds18b20()//初始化
{
ucha x;
DQ=0;
delay(80);
DQ=1;
delay(10);
x=DQ;
delay(5);
}
ucha read_ds18b20()//读一个字节
{
ucha i,shuju=0;
for(i=8;i>0;i--)
{
DQ=0;
delay(1);
shuju>>=1;
DQ=1;
delay(10);
if(DQ==1)
{
shuju|=0x80;
}
delay(6);
}
return(shuju);
}
void write_ds18b20(ucha shuju)//写一个字节
{
ucha i;
for(i=8;i>0;i--)
{
DQ=0;
delay(1);
DQ=shuju&0x01;
delay(5);
DQ=1;
shuju>>=1;
}
delay(5);
}
uint Get_temp()//读取温度
{
uint a,b;
init_ds18b20();
write_ds18b20(0xcc);
write_ds18b20(0x44);
delay(20);
init_ds18b20();
write_ds18b20(0xcc);
write_ds18b20(0xBE);
a=read_ds18b20();//低 8 wei
b=read_ds18b20();//高 8 wei
if(b&0xf8)
{
b<<=8;
b=a|b;
b=~b+1;
num=b*0.0625*100;
}
else
{
b<<=8;
b=a|b;
num=b*0.0625*100;
}
return(num);
}
void display(uint c)//数码管显示
{
ucha bai,shi,ge,shifen,baifen;
bai=c/10000;
shi=c/1000%10;
ge=c/100%10;
shifen=c/10%10;
baifen=c%10;
ls138A=0;ls138B=0;ls138C=0;
P0=table[bai];
ls138A=0;ls138B=0;ls138C=1;
P0=table[shi];
ls138A=0;ls138B=1;ls138C=0;
P0=table[ge];
ls138A=0;ls138B=1;ls138C=1;
P0=table[shifen];
ls138A=1;ls138B=0;ls138C=0;
P0=table[baifen];
}
void main()
{
while(1)
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
display(Get_temp());
}
}
void exter0() interrupt 1//每一秒更新一次温度
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==20)
{
aa=0;
}
} |