📄 ds18b20.lst
字号:
C51 COMPILER V8.02 DS18B20 12/20/2008 09:14:28 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN DS18B20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS18B20.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*************************************************************
2 程序名称:数码管显示温度
3 函数说明:数码管显示温度
4 功能:
5 P3_3为温度数据输入端
6 共阳数码管
7 李灿松
8 2008.7.17
9 **************************************************************/
10 #include<reg52.h>
11 //#include<string.h>
12 //#include<ctype.h>
13 #include <intrins.h>
14
15 #define uchar unsigned char
16 #define uint unsigned int
17 sbit TMDAT=P2^7; //定义DS18B20的数据输入端
18 uint sdata=0; //温度数据的整数部分
19 uint xiaoshu1=0; //小数第一位
20 uint xiaoshu2=0; //小数第二位
21 uint xiaoshu;
22 bit flag=1; //温度正负标志
23 sbit P0_7=P0^7; //小数点标志
24 //uchar seg7code[]=
25 //{0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,
26 //0xea,0x20,0xa0,0x60,0x25,0x3c,0x23,0x34,0x76}; //共阳段码
27 //uchar code seg7code[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};
28 uchar code seg7code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
29
30
31 /************************************************************
32 程序名称:延时函数
33 函数说明:数码管显示延时
34 功能:
35 *************************************************************/
36 void Delay(uint tc) //显示延时函数
37 {
38 1 while(tc!=0)
39 1 {
40 2 uint i;
41 2 for(i=0;i<100;i++)
42 2 ;
43 2 tc--;
44 2 }
45 1 }
46
47 /************************************************************
48 程序名称:延时函数
49 函数说明:DS18B20数据读取延时
50 功能:
51 *************************************************************/
52 void dmsec(uint count)
53 {
54 1 uchar i;
55 1 while(count--)
C51 COMPILER V8.02 DS18B20 12/20/2008 09:14:28 PAGE 2
56 1 {
57 2 for(i=0;i<115;i++)
58 2 ;
59 2 }
60 1 }
61
62 /************************************************************
63 程序名称:复位函数
64 函数说明:向DS18B20发送484us复位信号
65 功能:
66 *************************************************************/
67 void tmreast(void)
68 {
69 1 uchar i;
70 1 TMDAT=0;
71 1 for(i=0;i<180;i++);//542US
72 1 TMDAT=1;
73 1 for(i=0;i<15;i++); //47US
74 1 while(TMDAT);
75 1 for(i=0;i<50;i++); //152US
76 1 TMDAT=1;
77 1 for(i=0;i<80;i++); //240US
78 1 }
79
80 /************************************************************
81 程序名称:读位函数
82 函数说明:读取DS18B20一位信号
83 功能:
84 *************************************************************/
85 bit tmrbit(void)
86 {
87 1 uint i;
88 1 bit dat;
89 1 TMDAT=0; //给脉冲信号
90 1 i++;
91 1 TMDAT=1;
92 1 i++;i++ ; //微量延时
93 1 dat=TMDAT; //给脉冲信号
94 1 for(i=0;i<8;i++);
95 1 return(dat);
96 1
97 1 }
98
99 /************************************************************
100 程序名称:读字函数
101 函数说明:读取DS18B20一字节信号
102 功能:
103 *************************************************************/
104 uchar tmrbyte(void)
105 {
106 1 uchar i,j,dat;
107 1 dat=0;
108 1 for(i=1;i<=8;i++)
109 1 {
110 2 j=tmrbit();
111 2 dat=(j<<7)|(dat>>1);
112 2 }
113 1 TMDAT=1;
114 1 return(dat);
115 1 }
116
117 /*uchar tmrbyte(void)
C51 COMPILER V8.02 DS18B20 12/20/2008 09:14:28 PAGE 3
118 {
119 uchar i;
120 uchar value=0;
121 for(i=8;i>0;i--)
122 {
123 TMDAT=1;_nop_();_nop_();
124 value>>=1;
125 TMDAT=0;_nop_();_nop_();_nop_();_nop_(); //4 us
126 TMDAT=1;_nop_();_nop_();_nop_();_nop_(); //4 us
127 if(TMDAT)value|=0x80;
128 for(i=0;i<20;i++); //66 us
129 }
130 TMDAT=1;
131 return(value);
132 } */
133
134
135
136 /************************************************************
137 程序名称:写函数
138 函数说明:
139 功能:
140 *************************************************************/
141 void tmwbyte(uchar dat) //写一个字节
142 {
143 1 uchar i,j;
144 1 bit testb;
145 1 for(j=1;j<=8;j++)
146 1 {
147 2 testb=dat&0x01;
148 2 dat=dat>>1;
149 2 if(testb)
150 2 {
151 3 TMDAT=0; //写1
152 3 i++;i++;
153 3 TMDAT=1;
154 3 for(i=0;i<20;i++);
155 3
156 3 }
157 2 else
158 2 {
159 3 TMDAT=0; //xie0
160 3 for(i=0;i<20;i++);
161 3 TMDAT=1;
162 3 i++;i++;
163 3 }
164 2 }
165 1 }
166 /*
167 //向1-WIRE 总线上写1个字节
168 void tmwbyte(uchar val)
169 {
170 uchar i;
171 for(i=8;i>0;i--)
172 {
173 TMDAT=1;_nop_();_nop_(); //从高拉倒低
174 TMDAT=0;_nop_();_nop_();_nop_();_nop_(); //5 us
175 TMDAT=val&0x01; //最低位移出
176 for(i=0;i<15;i++); //55 us 15us~120us
177 val=val/2; //右移1位
178 }
179 TMDAT=1;
C51 COMPILER V8.02 DS18B20 12/20/2008 09:14:28 PAGE 4
180 }*/
181
182 /************************************************************
183 程序名称:温度转换函数
184 函数说明:将读取的DS18B20的数据进行转换
185 功能:
186 *************************************************************/
187 void trstar(void)
188 {
189 1 tmreast();
190 1 dmsec(1);
191 1 tmwbyte(0xcc); //跳过序列号命令
192 1 tmwbyte(0x44); //发送转换命令44H
193 1 }
194
195
196 /************************************************************
197 程序名称:读温度函数
198 函数说明:读取转换后的温度
199 功能:
200 *************************************************************/
201 void temp(void)
202 {
203 1 uchar a,b;
204 1 tmreast(); //复位
205 1 dmsec(1); //延时
206 1 tmwbyte(0xcc); //跳过序列号命令
207 1 tmwbyte(0xbe); //发送读取命令
208 1 a=tmrbyte(); // 读取地位温度
209 1 b=tmrbyte(); //读取高位温度
210 1 if(b>0x7f)
211 1 {
212 2 a=~a;b=~b+1; //补码转换,取反加一
213 2 flag=0; //温度为负时flag=0
214 2
215 2 }
216 1 sdata=a/16+b*16;
217 1 xiaoshu1=(a&0x0f)*10/16;
218 1 xiaoshu2=(a&0x0f)*100/16%10;
219 1 xiaoshu=xiaoshu1*10+xiaoshu2;
220 1 /* sdata=45;
221 1 xiaoshu1=3;
222 1 xiaoshu2=2;
223 1 xiaoshu=xiaoshu1*10+xiaoshu2;
224 1 */
225 1
226 1 }
227
228 void DS18B20R(void)
229 {
230 1 trstar(); //温度转换
231 1 dmsec(5); //不断读取数据 , 延时
232 1 temp(); //读取数据后将温度存在TMP中,读温度
233 1 }
234
235
236 /************************************************************
237 程序名称:显示函数
238 函数说明:显示读取的数据
239 功能:
240 *************************************************************/
241 void LED()
C51 COMPILER V8.02 DS18B20 12/20/2008 09:14:28 PAGE 5
242 {
243 1 if(flag==1)
244 1 {
245 2 P2=0xfe;
246 2 P0=seg7code[sdata/10];
247 2 Delay(2);
248 2 P2=0xfd;
249 2 P0=seg7code[sdata%10];
250 2 P0_7=0; //小数点标志
251 2 Delay(2);
252 2 P2=0xfb;
253 2 P0=seg7code[xiaoshu1];
254 2 Delay(2);
255 2 P2=0xf7;
256 2 P0=seg7code[xiaoshu2];
257 2 Delay(2);
258 2 //P2=P2|0xf0;
259 2 // P0=0xff;
260 2 }
261 1 if(flag==0)
262 1 {
263 2 P2=0xfe;
264 2 P0=seg7code[11]; //负号
265 2 Delay(8);
266 2 P2=0xfd;
267 2 P0=seg7code[sdata/10];
268 2 Delay(8);
269 2 P2=0xfb;
270 2 P0=seg7code[sdata%10];
271 2 Delay(8);
272 2 P2=0xf7;
273 2 P0=seg7code[xiaoshu1];
274 2 Delay(8);
275 2 //P2=P2|0xf0;
276 2 // P0=0xff;
277 2 }
278 1
279 1 }
280
281 /************************************************************
282 程序名称:主函数
283 函数说明:数码管显示温度数据
284 功能:
285 *************************************************************/
286 main()
287 {
288 1 trstar(); //下面三句也可不要
289 1 Delay(1);
290 1 flag=1;
291 1 while(1)
292 1 {
293 2 DS18B20R();
294 2 LED();
295 2 }
296 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 548 ----
CONSTANT SIZE = 12 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V8.02 DS18B20 12/20/2008 09:14:28 PAGE 6
DATA SIZE = 8 2
IDATA SIZE = ---- ----
BIT SIZE = 1 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -