ds08b20驱动程序
源代码在线查看: b.lst
C51 COMPILER V7.50 B 10/16/2008 21:44:09 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE B
OBJECT MODULE PLACED IN b.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE b.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*****************************************
2
3 说明:
4 用短路子短接 P0 口、P2.4-P2.6、P3.7 的接线柱
5 下载完程序通电后,数码管的后三位会显示测得到温度值
6 当周围温度发生变化时,显示的温度值也会发生相应变化
7 测温范围为 -55℃ ~ 125℃
8 以 0.5℃ 递增
9
10 中国矿业大学 电子协会
11 刘滨 2008年9月
12
13 *****************************************/
14 #include
15 #define uchar unsigned char
16 #define uint unsigned int
17
18 uchar P0_scan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
19 uchar dis[3];
20 uchar TEMP;
21
22 //管脚定义
23 sbit dq = P3^7;
24
25
26 /*************** 短延时 ****************/
27 void delay(uint s)
28 {
29 1 while(s--);
30 1 }
31
32 /**************** 延时1ms *****************/
33 void delay_1ms(unsigned int t)
34 {
35 1 unsigned char i,j;
36 1 for(t;t>0;t--)
37 1 {
38 2 for(i=34;i>0;i--)
39 2 for(j=13;j>0;j--);
40 2 }
41 1 }
42
43 /****************** DS18B20 *********************/
44 void rst(void)
45 {
46 1 dq=1;
47 1 delay(8);
48 1 dq=0;
49 1 delay(80);
50 1 dq=1;
51 1 delay(14);
52 1 delay(20);
53 1 }
54
55 uchar readbyte(void)
C51 COMPILER V7.50 B 10/16/2008 21:44:09 PAGE 2
56 {
57 1 uchar i=0;
58 1 uchar date=0;
59 1 for(i=8;i>0;i--)
60 1 {
61 2 dq=0;
62 2 date>>=1;
63 2 dq=1;
64 2 if(dq) date|=0x80;
65 2 delay(4);
66 2 }
67 1 return(date);
68 1 }
69
70 void writebyte(uchar date)
71 {
72 1 uchar i=0;
73 1 for(i=8;i>0;i--)
74 1 {
75 2 dq=0;
76 2 dq=date&0x01;
77 2 delay(5);
78 2 dq=1;
79 2 date>>=1;
80 2 }
81 1 }
82 uchar readtemp(void)
83 {
84 1 uchar a=0;
85 1 uchar b=0;
86 1 uchar temp1;
87 1 uint t=0;
88 1 float tt;
89 1 rst();
90 1 writebyte(0xcc);
91 1 writebyte(0x44);
92 1 rst();
93 1 writebyte(0xcc);
94 1 writebyte(0xbe);
95 1 a=readbyte();
96 1 b=readbyte();
97 1 t=b;
98 1 t 99 1 t=t|a;
100 1 tt=t*0.0625;
101 1 temp1=(uchar)tt;
102 1 return(temp1);
103 1 }
104
105 /************************ 主函数 *************************/
106 void main()
107 {
108 1 while(1)
109 1 {
110 2 TEMP = readtemp()-5; //读出温度值
111 2 dis[0]=TEMP%10;dis[1]=(TEMP/10)%10;dis[2]=TEMP/100;
112 2
113 2 P0 = P0_scan[dis[0]];
114 2 P2 = 0xf7;
115 2 delay_1ms(5);
116 2 P2 = 0xff;
117 2
C51 COMPILER V7.50 B 10/16/2008 21:44:09 PAGE 3
118 2 P0 = P0_scan[dis[1]];
119 2 P2 = 0xfb;
120 2 delay_1ms(5);
121 2 P2 = 0xff;
122 2
123 2 P0 = P0_scan[dis[2]];
124 2 P2 = 0xfd;
125 2 delay_1ms(5);
126 2 P2 = 0xff;
127 2 }
128 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 285 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 14 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)