📄 main.lst
字号:
247 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
248 //+ 函数: GemTemp
249 //+ 功能: 读取温度
250 //+ 参数: 无
251 //+ 返回: 无
252 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
253 void GemTemp (void)
254 {
255 1 read_bytes (9);
256 1 if (CRC(9) == 0) //校验正确
257 1 {
258 2 Temperature = temp_buff[1]*0x100 + temp_buff[0];
259 2 Temperature /= 16;
260 2 // SetTemp = Temperature;
261 2 delay(1);
262 2 }
263 1 }
264
265 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
266 //+ 函数: CRC
267 //+ 功能: 查表校验
268 //+ 参数: j
269 //+ 返回: 无
270 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
271 uchar CRC (uchar j)
272 {
273 1 uchar i,crc_data = 0;
274 1 for(i = 0; i < j; i ++) //查表校验
275 1 crc_data = CrcTable[crc_data^temp_buff[i]];
276 1 return (crc_data);
277 1 }
278
279
280 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
281 //+ 函数: GetKey
282 //+ 功能: 取键值
283 //+ 参数: 无
284 //+ 返回: uchar
285 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
286 void GetKey(void)
287 {
288 1
289 1 if(!key_up | !key_do)
290 1 {
291 2 kdelay(50);
292 2 if(!key_up & !key_do)
293 2 {
294 3 kdelay(100);
295 3 if(!key_up & !key_do)
296 3 DisFlag = ~DisFlag;
297 3 } //两键同时按下。
298 2
299 2 if (!DisFlag)
300 2 {
301 3
C51 COMPILER V8.08 MAIN 11/06/2007 17:19:43 PAGE 6
302 3 if(!key_do)
303 3 {
304 4 kdelay(100);
305 4 if(!key_do)
306 4 {
307 5 if (SetTemp > LoTemp)
308 5 SetTemp--;
309 5 else
310 5 SetTemp = LoTemp;
311 5 }
312 4 }
313 3
314 3 if(!key_up)
315 3 {
316 4 kdelay(100);
317 4 if(!key_up)
318 4 {
319 5 if (SetTemp < HiTemp)
320 5 SetTemp++;
321 5 else
322 5 SetTemp = HiTemp;
323 5 }
324 4 }
325 3 }
326 2 }
327 1
328 1 }
329
330 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
331 //+ 函数: timer0() interrupt 1
332 //+ 功能: 定时器0用作显示
333 //+ 输入: 无
334 //+ 返回: 无
335 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
336 /*void timer0() reentrant interrupt 1 using 3
337 {
338 uchar j, tmp;
339 uchar BitCou;
340
341 TL0 = 0x00;
342 TH0 = 0x00;
343
344 } */
345
346 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
347 //+ 函数: display
348 //+ 功能: 显示数值
349 //+ 输入: 无
350 //+ 返回: 无
351 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
352 void display(void)
353 {
354 1 uchar i, j, tmp;
355 1
356 1 DisCon[0] = 12;
357 1
358 1 if (!ErFlag)
359 1 {
360 2 led_r = 0;
361 2 led_y = 1;
362 2 led_g = 1;
363 2 Error = 0;
C51 COMPILER V8.08 MAIN 11/06/2007 17:19:43 PAGE 7
364 2 DisCon[0] = 10; // E
365 2 DisCon[1] = 12; //nul
366 2 if (Ld)
367 2 DisCon[2] = 1;
368 2 if (!Sw)
369 2 DisCon[1] = 2;
370 2 if (!Flag)
371 2 DisCon[2] = 3;
372 2 }
373 1 else
374 1 {
375 2 if (DisFlag)
376 2 {
377 3 DisCon[1] = Temperature / 10;
378 3 DisCon[2] = Temperature - DisCon[1] * 10;
379 3 }
380 2 else
381 2 {
382 3 DisCon[0] = 14;
383 3 DisCon[1] = SetTemp / 10;
384 3 DisCon[2] = SetTemp - DisCon[1] * 10;
385 3 }
386 2 }
387 1
388 1 for (i = 0; i < 3; i ++)
389 1 {
390 2 tmp = DisMode[DisCon[i]];
391 2 for(j = 0; j < 8; j++)
392 2 {
393 3 if (tmp & 0x01)
394 3 Qd = 1;
395 3 else
396 3 Qd = 0;
397 3 Sck = 1;
398 3 tmp >>= 1;
399 3 Sck =0;
400 3 }
401 2 Swbt(i,1);
402 2 delay(100);
403 2 Swbt(i,0);
404 2 }
405 1 }
406
407 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
408 //+ 函数: TemperatuerResult
409 //+ 功能: 读取温度全过程
410 //+ 参数: 无
411 //+ 返回: 无
412 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
413 void TemperatuerResult(void)
414 {
415 1 // p = id_buff;
416 1 // ReadID();
417 1 // Config18b20();
418 1 Init18b20 ();
419 1 WriteByte(0xcc); //skip rom
420 1 WriteByte(0x44); //Temperature convert
421 1 Init18b20 ();
422 1 WriteByte(0xcc); //skip rom
423 1 WriteByte(0xbe); //read Temperature
424 1 p = temp_buff;
425 1 GemTemp();
C51 COMPILER V8.08 MAIN 11/06/2007 17:19:43 PAGE 8
426 1 }
427
428 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
429 //+ 函数: main
430 //+ 功能:
431 //+ 参数: 无
432 //+ 返回: 无
433 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
434 void main(void)
435 {
436 1
437 1 uchar Count;
438 1
439 1 Sck = 0;
440 1 DisFlag = 1;
441 1 Error = ErFlag = 1;
442 1
443 1 Init18b20();
444 1 if (Ld |!Sw |!Flag)
445 1 {
446 2 ErFlag = 0;
447 2 display();
448 2 }
449 1 else
450 1 {
451 2 if (Flag)
452 2 {
453 3 Config18b20();
454 3 TemperatuerResult();
455 3 SetTemp = temp_buff[2];
456 3 }
457 2 while(1)
458 2 {
459 3 if (Count < 10)
460 3 {
461 4 display();
462 4 Count ++;
463 4 }
464 3 else
465 3 {
466 4 Count = 0;
467 4 if (Flag)
468 4 TemperatuerResult();
469 4 }
470 3
471 3 if ((Temperature <= (SetTemp - 1)) && Error)
472 3 {
473 4 k1 = 0;
474 4 led_y = 0;
475 4 led_g = 1;
476 4 }
477 3
478 3 if ((Temperature >= (SetTemp + 1)) && Error)
479 3 {
480 4 k1 = 1;
481 4 led_y = 1;
482 4 led_g = 0;
483 4 }
484 3
485 3 GetKey();
486 3 }
487 2 }
C51 COMPILER V8.08 MAIN 11/06/2007 17:19:43 PAGE 9
488 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 724 ----
CONSTANT SIZE = 270 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 13 3
IDATA SIZE = 9 ----
BIT SIZE = 4 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -