1 #include "reg52.h"
2 #include "macroconst.h"
3 uint temp=0;
4 uchar zerotemp=1;
5 uint temph=0;
6 uint templ=0;
7 sbit dq=P1^3;
8
9 void delay18b20(uint i) //---------------------18b20延时
10 {
11 1 while(i--);
12 1 }
13
14 void init18b20(void)//---------------------------初始化18b20
15 {
16 1 unsigned char x=0;
17 1 dq = 1; //DQ复位
18 1 delay18b20(8); //稍做延时
19 1 dq = 0; //单片机将DQ拉低
20 1 delay18b20(80); //精确延时 大于 480us
21 1 dq = 1; //拉高总线
22 1 delay18b20(10);
23 1 x=dq; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
24 1 delay18b20(5);
25 1 }
26 uchar readoneword(void)//------------------------------读18b20
27 {
28 1 uchar dat=0;
29 1 uchar i=0;
30 1 for(i=8;i>0;i--)
31 1 {
32 2 dq=0; //给脉冲信号
33 2 dat>>=1;
34 2 dq=1; //给脉冲信号
35 2 if(dq)
36 2 dat|=0x80;
37 2 delay18b20(5);
38 2 }
39 1 return(dat);
40 1 }
41 void writeoneword(uchar com)//--------------------------写入18b20
42 {
43 1 uchar i=0;
44 1 for(i=8;i>0;i--)
45 1 {
46 2 dq=0;
47 2 dq=com&0x01;
48 2 delay18b20(5);
49 2 dq=1;
50 2 com>>=1;
51 2 }
52 1 delay18b20(5);
53 1 }
54 void readtemp(void) //---------------------------读温度
55 { uchar a=0;
C51 COMPILER V9.01 18B20 10/20/2010 15:51:24 PAGE 2
56 1 uint b=0,t=0;
57 1 init18b20();
58 1 writeoneword(0xCC);
59 1 writeoneword(0x44);
60 1 delay18b20(200);
61 1 init18b20();
62 1 writeoneword(0xCC);
63 1 writeoneword(0xBE);
64 1 a=readoneword();
65 1 b=readoneword();
66 1
67 1 b<<=8;
68 1 temp=a+b;
69 1 if(temp&0x8000)
70 1 {
71 2 zerotemp=0;
72 2 temp=~temp; // 取反加1
73 2 temp +=1;
74 2 }
75 1 else
76 1 temph=temp>>4;
77 1 templ=temp&0x0F; templ=templ*6/10;//小数近似处理
78 1 }
79
80
81 /***************往1602液晶写温度************************/
82
83 //void write_temp(uchar add)//---------------------写温度
84 //{
85 // uchar bai,shi,ge;
86 // bai=(temph/100);
87 // shi=(temph%100)/10;
88 // ge=(temph%100)%10;
89 // write_com(0x80+add);
90 // write_date(0x30+shi);
91 // write_date(0x30+ge);
92 // write_date('.');
93 // write_date(templ+0x30);
94 // write_date(0xdf);
95 // write_date('C');
96 //
97 //}
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 243 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 2
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|