📄 w014.lst
字号:
253 1
254 1 return(presence) ; //返回presence
255 1 }
256
257 /*******************************************************************/
258 /* */
259 /* 读一个字节数据 */
260 /* */
261 /*******************************************************************/
262 ReadOneChar(void)
263 {
264 1 unsigned char i = 0 ;
265 1 unsigned char dat = 0 ;
266 1
267 1 for (i = 8 ; i > 0 ; i--)
268 1 {
269 2 DQ = 0 ;
270 2 dat >>= 1 ;
271 2 DQ = 1 ;
272 2
273 2 if(DQ)
274 2 dat |= 0x80 ;
275 2 Delay(4) ;
276 2 }
277 1
278 1 return (dat) ;
279 1 }
280
281 /*******************************************************************/
282 /* */
283 /* 写一个字节数据 */
284 /* */
285 /*******************************************************************/
286 WriteOneChar(unsigned char dat)
287 {
288 1 unsigned char i = 0 ;
289 1 for (i = 8 ; i > 0 ; i--)
290 1 {
291 2 DQ = 0 ;
292 2 DQ = dat&0x01 ;
293 2 Delay(5) ;
294 2
295 2 DQ = 1 ;
296 2 dat>>=1 ;
297 2 }
298 1 }
299
300 /*******************************************************************/
301 /* */
302 /* 读取温度数据 */
C51 COMPILER V8.02 W014 06/07/2007 21:46:16 PAGE 6
303 /* */
304 /*******************************************************************/
305 ReadTemperature(void)
306 {
307 1 DS18B20_Init() ;
308 1
309 1 WriteOneChar(0xCC) ; //跳过读序号列号的操作
310 1 WriteOneChar(0x44) ; //启动温度转换
311 1
312 1 DS18B20_Init() ;
313 1 WriteOneChar(0xCC) ; //跳过读序号列号的操作
314 1 WriteOneChar(0xBE) ; //读取温度寄存器
315 1
316 1 temp_data[0] = ReadOneChar() ; //读温度低8位
317 1 temp_data[1] = ReadOneChar() ; //读温度高8位
318 1 }
319
320 /*******************************************************************/
321 /* */
322 /* 温度数据转换和显示 */
323 /* */
324 /*******************************************************************/
325 TemperatureDisplay()
326 {
327 1 dis_data[4]=temp_data[0]&0x0f ; //temp_data[0]低4为有效
328 1 dis_data[3]=ditab[dis_data[4]]+0x30; //查表得小数位的值
329 1
330 1 dis_data[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
331 1 dis_data[2]=dis_data[4]%10+0x30; //个位
332 1 dis_data[1]=(dis_data[4]/10)%10+0x30; //十位
333 1 dis_data[0]=dis_data[4]/100+0x30; //百位
334 1
335 1 if(dis_data[0]==0x30) //百位为0,不显示
336 1 {
337 2 dis_data[0]=0x20;
338 2
339 2 if(dis_data[1]==0x30) //十位为0,不显示
340 2 dis_data[1]=0x20 ;
341 2 }
342 1
343 1 LCD_DisplayPosit(0x48) ;
344 1 LCD_WriteDate(dis_data[0]) ; //百位数显示
345 1 LCD_DisplayPosit(0x49) ;
346 1 LCD_WriteDate(dis_data[1]) ; //十位数显示
347 1 LCD_DisplayPosit(0x4a) ;
348 1 LCD_WriteDate(dis_data[2]) ; //个位数显示
349 1 LCD_DisplayPosit(0x4c) ;
350 1 LCD_WriteDate(dis_data[3]) ; //小数位数显示
351 1 LCD_WriteMytab() ; //自定义字符(度的符号)写入CGRAM
352 1 Delay(5) ;
353 1 LCD_DisplayPosit(0x4d) ;
354 1 LCD_WriteDate(0x00) ; //显示自定义字符(度的符号)
355 1
356 1 }
357
358 /*******************************************************************/
359 /* */
360 /* DS18B20 OK 界面显示 */
361 /* */
362 /*******************************************************************/
363 void DS18B20_OkMenu ()
364 {
C51 COMPILER V8.02 W014 06/07/2007 21:46:16 PAGE 7
365 1 LCD_DisplayLine(dis_code1,dis_code2);
366 1 }
367
368 /*******************************************************************/
369 /* */
370 /* DS18B20 ERROR 界面显示 */
371 /* */
372 /*******************************************************************/
373 void DS18B20_ErrorMenu ()
374 {
375 1 LCD_DisplayLine(dis_code3,dis_code4);
376 1 }
377
378
379 /*******************************************************************/
380 /* */
381 /* 蜂鸣器响一声 */
382 /* */
383 /*******************************************************************/
384 void Beep()
385 {
386 1 unsigned char y ;
387 1 for (y=0 ;y<100 ;y++)
388 1 {
389 2 Delay(60) ;
390 2 BEEP=!BEEP ; //BEEP取反
391 2 }
392 1 BEEP=1 ; //关闭蜂鸣器
393 1 Delayms(20) ;
394 1 }
395
396
397 /*******************************************************************/
398 /* */
399 /* 温度高于上限时显示 */
400 /* */
401 /*******************************************************************/
402
403 void DisplayTHMenu()
404 {
405 1 uchar code dis_code5[ ] = {" TEMP>TH C "} ;
406 1 uchar code dis_code6[ ] = {" TEMP: . C "} ;
407 1
408 1 LCD_DisplayLine(dis_code5,dis_code6);
409 1
410 1 LCD_WriteMytab() ; //自定义字符写入CGRAM
411 1 Delay(5) ; //显示自定义字符
412 1 LCD_DisplayPosit(0x0D) ;
413 1 LCD_WriteDate(0x00) ;
414 1 Delay(5) ;
415 1 LCD_DisplayPosit(0x4d) ;
416 1 LCD_WriteDate(0x00) ;
417 1
418 1 display_TH[0] = TH/10+0x30;
419 1 display_TH[1] = TH%10+0x30;
420 1
421 1 LCD_DisplayPosit(0x0B) ;
422 1 LCD_WriteDate(display_TH[0]) ;
423 1 LCD_DisplayPosit(0x0C) ;
424 1 LCD_WriteDate(display_TH[1]) ;
425 1 }
426
C51 COMPILER V8.02 W014 06/07/2007 21:46:16 PAGE 8
427 /*******************************************************************/
428 /* */
429 /* 温度低于下限时显示 */
430 /* */
431 /*******************************************************************/
432
433 void DisplayTLMenu()
434 {
435 1 uchar code dis_code5[ ] = {" TEMP<TL C "} ;
436 1 uchar code dis_code6[ ] = {" TEMP: . C "} ;
437 1
438 1 LCD_DisplayLine(dis_code5,dis_code6);
439 1
440 1 LCD_WriteMytab() ; //自定义字符写入CGRAM
441 1 Delay(5) ; //显示自定义字符
442 1 LCD_DisplayPosit(0x0D) ;
443 1 LCD_WriteDate(0x00) ;
444 1 Delay(5) ;
445 1 LCD_DisplayPosit(0x4d) ;
446 1 LCD_WriteDate(0x00) ;
447 1
448 1 display_TL[0] = TL/10+0x30;
449 1 display_TL[1] = TL%10+0x30;
450 1
451 1 LCD_DisplayPosit(0x0B) ;
452 1 LCD_WriteDate(display_TL[0]) ;
453 1 LCD_DisplayPosit(0x0C) ;
454 1 LCD_WriteDate(display_TL[1]) ;
455 1
456 1
457 1 }
458
459 /*******************************************************************/
460 /* */
461 /* 扫描设置键 */
462 /* */
463 /*******************************************************************/
464 void SetKeyScan()
465 {
466 1 if(S1==0)
467 1 {
468 2 Delay(1000);
469 2 if(S1==0)
470 2 {
471 3 Keyset_Flag = 1;
472 3 Delay(200);
473 3 }
474 2 }
475 1 }
476
477 /*******************************************************************/
478 /* */
479 /* 扫描处理键 */
480 /* */
481 /*******************************************************************/
482 unsigned char KeyworthScan()
483 {
484 1 unsigned char key_s;
485 1 key_s = 0x00;
486 1 key_s |= S1;
487 1 key_s <<= 1;
488 1 key_s |= S2;
C51 COMPILER V8.02 W014 06/07/2007 21:46:16 PAGE 9
489 1 key_s <<= 1;
490 1 key_s |= S3;
491 1 return key_s;
492 1 }
493
494 /*******************************************************************/
495 /* */
496 /* 温度上限设置界面上限值显示 */
497 /* */
498 /*******************************************************************/
499 void DisplayTH()
500 {
501 1 display_TH[0] = TH/10+0x30;
502 1 display_TH[1] = TH%10+0x30;
503 1
504 1 LCD_DisplayPosit(0x4b) ;
505 1 LCD_WriteDate(display_TH[0]) ;
506 1 LCD_DisplayPosit(0x4c) ;
507 1 LCD_WriteDate(display_TH[1]) ;
508 1 }
509
510 /*******************************************************************/
511 /* */
512 /* 温度上限设置界面显示 */
513 /* */
514 /*******************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -