测温范围 -55℃~+125℃,固有测温分辨率0.5℃。
工作电源: 3~5V/DC
1.5 在使用中不需要任何外围元件
1.6 测量结果以9~12位数字量方式串行传送
温度的读取
DS18B20在出厂时以配置为12位,读取温度时共读取16位,所以把后11位的2进制转化为10进制后在乘以0.0625便为所测的温度,还需要判断正负。前5个数字为符号位,当前5位为1时,读取的温度为负数;当前5位为0时,读取的温度为正数。16位数字摆放是从低位到高位。
温度读取流程图
三.数码管
此系统共有四个数码管,每个数码管需要八个I/O口,而单片机的I/O口是有限的,故此系统采用动态数码管显示方式。单片机通过软件设置 ,每次选择控制其中的一个数码管,由于时间的间隔短,四个数码管看起来是一起显示的。
四.主程序 #include
unsigned char table[]= {
0xC0,0xF9,0xA4,0xB0, 0x99,0x92,0x82,0xF8,
0x80,0x90,}; //不带小数点的编码 extern unsigned int temp; extern float f_temp; unsigned int i;
//unsigned int displayBuffer[6]={1,2,3,4,5,6}; void LCD_init(void) { }
/* double Shi(unsigned char Dis[]) { WORD i; } } */ return sum; double sum; int k; sum=0;
for(i=0,k=-4;i<11;i++,k++) {
sum+=Dis[i]*pow(2,k) P2=0x0f; P0=0x00;
void led(signed int m,signed int n,signed int p,signed int q) {
P2=0xef;
}
P0=table[q]; delay(5); P2=0xdf; P0=table[p]; delay(5); P2=0xbf; P0=table[n]+0x80; delay(5); P2=0x7f; P0=table[m]; delay(5);
unsigned int display(unsigned int y,signed int f,signed int g) { SWORD a,b,c,d;
a=y/1000 + f ;
b=(y00)/100+g ; c=(y0)/10; d=(y)/1;
if(b<=9&&b>=0)
for(i=16;i>0;i--)
led(a,b,c,d);
else if(b>9)
{a+=b/10;b=b; for(i=16;i>0;i--)
led(a,b,c,d);}
else
{ b=0-b;
if(b==1)f-=1;b=10-(b); if(b==10)b=0; for(i=16;i>0;i--)
led(a,b,c,d);}
return f; }
void main(void) {
unsigned int e,Sum1,k; signed int h,j; LCD_init(); h=0;j=0;