📄 ceshi2.lst
字号:
C51 COMPILER V6.12 CESHI2 04/29/2009 12:39:00 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE CESHI2
OBJECT MODULE PLACED IN ceshi2.obj
COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE .\sucess\ceshi2.c DEBUG OBJECTEXTEND PRINT(.\ceshi2.lst) OBJECT(ceshi2.obj)
-
stmt level source
1 #include<reg52.h>
2 #include<stdio.h>
3 #include<intrins.h>
4
5 #define uchar unsigned char
6 #define uint unsigned int
7
8 sbit dula=P2^6;
9 sbit wela=P2^7;
10 sbit dq=P2^2;
11 sbit feng=P2^3;
12
13 uint c1_temper,c2_temper;
14 uint L_temper;
15 uint H_temper;
16
17 uchar code1[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
18 uchar code2[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
19
20 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,
21 0xBf,0x86,0xDb,0xCf,0xE6, 0xEd,0xEd,0x87,0xFf,0xEf};
22
23 void delay_ms(uint z);
24 void delay_us();
25 void dq_reset();
26 void write_cmd(uchar z);
27 void get_firstid();
28 void get_seconedid();
29 void write_bit(uchar dd);
30 void deal_temper();
31 void deal_ds1();
32
33 void display_temper(uint wengdu);
34 void init();
35
36 uchar keyscanf();
37 uchar read_byte();
38 uint get_temper();
39 uchar read_bit();
40 uchar read_date();
41
42 /******************延迟****************/
43
44 void delay_ms(uint z)//毫秒级的延迟
45 {
46 1 uint x,y;
47 1 for(x=z;x>0;x--)
48 1 for(y=110;y>0;y--);
49 1 }
50
51 void delay_us()//延时微秒
52 {
53 1 _nop_();
54 1 }
C51 COMPILER V6.12 CESHI2 04/29/2009 12:39:00 PAGE 2
55
56 /*****************复位*************************/
57
58 void dq_reset()
59 {
60 1 uchar t;
61 1 uchar dd;
62 1 dq=0;
63 1 for(t=250;t>0;t--);
64 1 dq=1;
65 1 for(t=5;t>0;t--);
66 1 dd=dq;
67 1 for(t=150;t>0;t--);
68 1 return;
69 1 }
70
71 /******************读位写位**********************/
72
73 uchar read_bit()
74 {
75 1 uchar t;
76 1 uchar dd;
77 1
78 1 dq=0;
79 1 delay_us();delay_us();
80 1 dq=1;
81 1 for(t=3;t>0;t--);
82 1 dd=dq;//get the signal
83 1 for(t=20;t>0;t--);
84 1 return dd;
85 1 }
86
87 void write_bit(uchar dd)
88 {
89 1 uchar t;
90 1
91 1 if(dd==1)
92 1 {
93 2 dq=0;
94 2 delay_us();
95 2 dq=1;
96 2 for(t=30;t>0;t--);
97 2 }
98 1 else
99 1 {
100 2 dq=0;
101 2 for(t=30;t>0;t--);
102 2 dq=1;
103 2 delay_us();
104 2 delay_us();
105 2 }
106 1 }
107
108 /******************写命令写数据***********************/
109
110 void write_cmd(uchar z)//写命令
111 {
112 1 uchar i;
113 1 uchar temp;
114 1 uchar cmd=z;
115 1
116 1 for(i=0;i<8;i++)
C51 COMPILER V6.12 CESHI2 04/29/2009 12:39:00 PAGE 3
117 1 {
118 2 temp=cmd&0x01;
119 2 if(temp)
120 2 {
121 3 write_bit(1);
122 3 }
123 2 else
124 2 {
125 3 write_bit(0);
126 3 }
127 2 cmd=_cror_(cmd,1);
128 2 }
129 1
130 1 }
131
132 /*****************温度******************************/
133
134 uchar read_byte()//读字节
135 {
136 1 uchar i;
137 1 uchar temp;
138 1 uchar dd;
139 1
140 1 temp=0x00;
141 1 for(i=0;i<8;i++)
142 1 {
143 2 temp=_cror_(temp,1);
144 2 dd=read_bit();
145 2 if(dd==1)
146 2 {
147 3 temp=temp|0x80;
148 3 }
149 2 else
150 2 {
151 3 temp=temp|0x00;
152 3 }
153 2 }
154 1 return(temp);
155 1 }
156
157 uint get_temper()//get centigrad for the ram
158 {
159 1
160 1 uchar LSB_temper;
161 1 uchar MSB_temper;
162 1 uint c_temper=0;
163 1 float f_temper=0;
164 1
165 1 dq_reset();
166 1 write_cmd(0xcc);
167 1 write_cmd(0xbe);//读存储器内的温度
168 1
169 1 LSB_temper=read_byte();
170 1 MSB_temper=read_byte();
171 1
172 1 dq_reset();//复位
173 1
174 1 c_temper=MSB_temper;
175 1 c_temper=(c_temper<<8);
176 1 c_temper=c_temper|LSB_temper;
177 1 f_temper=c_temper*0.0625;
178 1 c_temper=f_temper*10+0.5;
C51 COMPILER V6.12 CESHI2 04/29/2009 12:39:00 PAGE 4
179 1
180 1 return (c_temper);
181 1 }
182
183 /******************获取序列号************************/
184
185 void get_firstid()
186 {
187 1 uchar t;
188 1 uchar w=0;
189 1 uchar d1,d2;
190 1 uchar temp=0x00;
191 1
192 1 dq_reset();
193 1 write_cmd(0xf0);//搜索序列号命令
194 1
195 1 for(t=0;t<64;t++)
196 1 {
197 2 d1=read_bit();
198 2 d2=read_bit();
199 2 if((t>0)&&(t%8==0))
200 2 {
201 3 code1[w]=temp;
202 3 temp=0x00;
203 3 ++w;
204 3 }
205 2 temp=_cror_(temp,1);
206 2
207 2 if( (d1==1) && (d2==0) )
208 2 {
209 3 temp=temp|0x80;
210 3 write_bit(1);
211 3 }
212 2 else if( (d1==0) && (d2==1))
213 2 {
214 3 temp=temp|0x00;
215 3 write_bit(0);
216 3 }
217 2 else if( (d1==0) && (d2==0) )
218 2 {
219 3 temp=temp|0x00;
220 3 write_bit(0);
221 3 }
222 2 }
223 1 }
224
225 void get_seconedid()
226 {
227 1 uchar t;
228 1 uchar w=0;
229 1 uchar d1,d2;
230 1 uchar temp=0x00;
231 1
232 1 dq_reset();
233 1 write_cmd(0xf0);//搜索序列号命令
234 1
235 1 for(t=0;t<64;t++)
236 1 {
237 2 d1=read_bit();
238 2 d2=read_bit();
239 2 if((t>0)&&(t%8==0))
240 2 {
C51 COMPILER V6.12 CESHI2 04/29/2009 12:39:00 PAGE 5
241 3 code2[w]=temp;
242 3 temp=0x00;
243 3 ++w;
244 3 }
245 2 temp=_cror_(temp,1);
246 2
247 2 if( (d1==1) && (d2==0) )
248 2 {
249 3 temp=temp|0x80;
250 3 write_bit(1);
251 3 }
252 2 else if( (d1==0) && (d2==1))
253 2 {
254 3 temp=temp|0x00;
255 3 write_bit(0);
256 3 }
257 2 else if( (d1==0) && (d2==0) )
258 2 {
259 3 temp=temp|0x80;
260 3 write_bit(1);
261 3 }
262 2 }
263 1 }
264
265 /*******************温度处理**************************/
266 void deal_temper()
267 {
268 1 uchar key=0;
269 1 while(1)
270 1 {
271 2 key=keyscanf();
272 2 if(key!=0)
273 2 {
274 3 deal_ds1();
275 3 }
276 2 }
277 1 }
278
279 void deal_ds1()
280 {
281 1 uchar t;
282 1
283 1 while(1)
284 1 {
285 2 dq_reset();
286 2 write_cmd(0xcc);
287 2 write_cmd(0x44);//温度转换
288 2 c1_temper=get_temper();
289 2 for(t=20;t>0;t--)
290 2 {
291 3 display_temper(c1_temper);
292 3 }
293 2 }
294 1 }
295
296 /*********************按键选择************************/
297
298 uchar keyscanf()
299 {
300 1 uchar temp;
301 1 uchar ke=0;
302 1
C51 COMPILER V6.12 CESHI2 04/29/2009 12:39:00 PAGE 6
303 1 P3=0xf7;
304 1 temp=P3;
305 1 temp=temp&0xf0;
306 1 while(temp!=0xf0)
307 1 {
308 2 switch(temp)
309 2 {
310 3 case 0xe0: ke=1;break;
311 3 case 0xd0: ke=2;break;
312 3 case 0xb0: ke=3;break;
313 3 case 0x70: ke=4;break;
314 3 }
315 2 temp=P3;
316 2 temp=temp&0xf0;
317 2 delay_ms(5);
318 2 }
319 1 return ke;
320 1 }
321
322 /******************温度显示***********************/
323
324 void display_temper(uint wengdu)//显示当前温度值
325 {
326 1 uchar xx,yy,zz;
327 1 uint temp;
328 1
329 1 temp=wengdu;
330 1 xx=temp/100;
331 1 yy=temp%100/10;
332 1 zz=temp%10;
333 1
334 1 wela=1;
335 1 P0=0xfe;
336 1 wela=0;
337 1
338 1 P0=0x00;
339 1 dula=1;
340 1 P0=table[xx];
341 1 dula=0;
342 1 delay_ms(2);
343 1
344 1 P0=0xff;
345 1 wela=1;
346 1 P0=0xfd;
347 1 wela=0;
348 1
349 1 P0=0x00;
350 1 dula=1;
351 1 P0=(table[yy]+0x80);
352 1 dula=0;
353 1 delay_ms(2);
354 1
355 1 P0=0xff;
356 1 wela=1;
357 1 P0=0xfb;
358 1 wela=0;
359 1
360 1 P0=0x00;
361 1 dula=1;
362 1 P0=table[zz];
363 1 dula=0;
364 1 delay_ms(1);
C51 COMPILER V6.12 CESHI2 04/29/2009 12:39:00 PAGE 7
365 1 }
366
367 /****************初始化与主函数******************/
368
369 void init()//初始化
370 {
371 1 L_temper=100;
372 1 H_temper=320;
373 1
374 1 dula=0;
375 1 wela=0;
376 1 }
377
378 void main()
379 {
380 1 init();
381 1 while(1)
382 1 {
383 2 get_firstid();
384 2 get_seconedid();
385 2 delay_us();
386 2 deal_temper();
387 2 }
388 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 789 ----
CONSTANT SIZE = 20 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 24 13
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -