?? checkdistance.lst
字號:
264
265 void send(unsigned int number) //左方發(fā)送函數(shù)
266 { if(number==1)
267 1 {
268 2 j=100;
269 2 TH0=0X00;
270 2 TL0=0X00;
271 2 EX1=1;
272 2 TR0=1; //開計數(shù)器
273 2 while(j--) //發(fā)送2個方波
274 2 {
275 3 D0=!D0;
276 3 _nop_();
277 3 _nop_();
278 3 _nop_();
279 3 } //開外部中斷1
280 2 delay(20);
281 2 }
282 1 else
283 1 if(number==2)
284 1 {
285 2 j=100;
286 2 TH0=0X00;
287 2 TL0=0X00;
288 2 EX1=1;
289 2 TR0=1; //開計數(shù)器
290 2 while(j--) //發(fā)送2個方波
291 2 {
292 3 D1=!D1;
293 3 _nop_();
294 3 _nop_();
295 3 _nop_();
296 3 } //開外部中斷1
297 2 delay(20);
298 2 }
299 1 else
300 1 if(number==3)
301 1 {
302 2 j=100;
C51 COMPILER V8.08 CHECKDISTANCE 11/20/2008 13:40:14 PAGE 6
303 2 TH0=0X00;
304 2 TL0=0X00;
305 2 EX1=1;
306 2 TR0=1; //開計數(shù)器
307 2 while(j--) //發(fā)送2個方波
308 2 {
309 3 D2=!D2;
310 3 _nop_();
311 3 _nop_();
312 3 _nop_();
313 3 } //開外部中斷1
314 2 delay(20);
315 2 }
316 1 else
317 1 if(number==4)
318 1 {
319 2 j=100;
320 2 TH0=0X00;
321 2 TL0=0X00;
322 2 EX1=1;
323 2 TR0=1; //開計數(shù)器
324 2 while(j--) //發(fā)送2個方波
325 2 {
326 3 D3=!D3;
327 3 _nop_();
328 3 _nop_();
329 3 _nop_();
330 3 } //開外部中斷1
331 2 delay(20);
332 2 }
333 1 else
334 1 if(number==5)
335 1 {
336 2 j=100;
337 2 TH0=0X00;
338 2 TL0=0X00;
339 2 EX1=1;
340 2 TR0=1; //開計數(shù)器
341 2 while(j--) //發(fā)送2個方波
342 2 {
343 3 D4=!D4;
344 3 _nop_();
345 3 _nop_();
346 3 _nop_();
347 3 } //開外部中斷1
348 2 delay(10);
349 2 }
350 1 IE1=0; //延時10ms,等待發(fā)送完畢
351 1 if(flag==0)
352 1 {
353 2 TR0=0;
354 2 EX1=0;
355 2 TH0=0X00;
356 2 TL0=0X00;
357 2 } //超過10ms或接收到中斷后關(guān)外部中斷1,防止干擾
358 1 if(TF0==1) //如果計數(shù)器溢出則清0
359 1 {
360 2 TF0=0;
361 2 TR0=0;
362 2 TH0=0X00;
363 2 TL0=0X00;
364 2 }
C51 COMPILER V8.08 CHECKDISTANCE 11/20/2008 13:40:14 PAGE 7
365 1 }
366 ////// 開機聲//////
367 void beep()
368 {
369 1 deep=0;
370 1 delay1ms(400);
371 1 deep=1;
372 1 }
373 // ************** 外部中斷.驅(qū)動小車 ********************//
374 void in0() interrupt 1 using 0
375 {
376 1 tem++;
377 1 if(tem%2==0)
378 1 move=0;
379 1 else
380 1 move=1;
381 1
382 1
383 1 }
384
385 /****************************
386 *外部中斷1;處理數(shù)據(jù),測出距離
387 ******************************/
388
389 void in1() interrupt 2 using 1
390 {
391 1 IE1=0;
392 1 TR0=0;
393 1 EX1=0;
394 1 flag=1;
395 1 // T=read_temp();
396 1 // v=331.5+0.607*T;
397 1 time=TH0*256+TL0;
398 1 shu=(time/100)*17-20;
399 1 TH0=0X00;
400 1 TL0=0X00;
401 1 }
402
403 void gotkey(void) {
404 1 if (mode_button==0) {
405 2 delay(5);
406 2 if (mode_button==0)
407 2 {
408 3 tempkey=1;
409 3 LED1=0;
410 3 LED2=1;
411 3 beep();
412 3 }
413 2 }
414 1 if (operation_button==0) {
415 2 delay(5);
416 2 if (operation_button==0)
417 2 {tempkey=2;
418 3 LED1=1;
419 3 LED2=0;
420 3 beep();
421 3 }
422 2 }
423 1 else tempkey=tempkey;
424 1 }
425 /*****************************
426 *主程序
C51 COMPILER V8.08 CHECKDISTANCE 11/20/2008 13:40:14 PAGE 8
427 ******************************/
428 void main()
429 {
430 1 tem=1;
431 1 tempkey=1;
432 1 LED1=0;
433 1 kk=1;
434 1 beep();
435 1 init();
436 1 seek_play(1); //播入歡迎語音
437 1 play();
438 1 delay(2000);
439 1 EX0=1;
440 1 PX0=1;
441 1 while(1)
442 1 { gotkey();
443 2 read_temp();
444 2 ds1820disp();
445 2 if(tempkey==1)
446 2 {
447 3
448 3 for(kk=1;kk<4;kk++)
449 3 { if(kk==4)
450 4 kk=0;
451 4 else
452 4 send(kk);
453 4 if(flag==1) //如果接收到回波,則進行處理
454 4 {
455 5 dis_direction(&direction[kk-1][0]);
456 5 dis_distance(3,shu);
457 5 delay(100);
458 5 flag=0;
459 5 if(shu<1000)
460 5 {
461 6 dis_warn(&warn1[kk-1][0]);
462 6 seek_play(kk+1);
463 6 play();
464 6 }
465 5 else
466 5 dis_warn(warn2);
467 5 }
468 4 }
469 3 }
470 2 else if(tempkey==2)
471 2
472 2 { send(3);
473 3 if(flag==1)
474 3 {
475 4 dis_direction(&direction[2][0]);
476 4 dis_distance(3,shu);
477 4 delay(100);
478 4 flag=0;
479 4 if(shu<500) //滿足條件提示注意后方車輛
480 4 {
481 5
482 5 dis_warn(&warn1[2][0]);
483 5 seek_play(4);
484 5 play();
485 5 }
486 4 else
487 4 dis_warn(warn2);
488 4 }
C51 COMPILER V8.08 CHECKDISTANCE 11/20/2008 13:40:14 PAGE 9
489 3 for(kk=4;kk<6;kk++)
490 3 { if(kk==6)
491 4 kk=0;
492 4 else
493 4 send(kk);
494 4 if(flag==1) //如果接收到回波,則進行處理
495 4 {
496 5
497 5 dis_direction(&direction[kk-1][0]);
498 5 dis_distance(3,shu);
499 5 delay(100);
500 5 flag=0;
501 5 if(shu<100)
502 5 {
503 6 dis_warn(&warn1[kk+1][0]);
504 6 seek_play(kk+3);
505 6 play();
506 6 }
507 5 else
508 5 if(shu>200) // 滿足條件就提示有泥坑
509 5 {
510 6 dis_warn(&warn1[kk-1][0]);
511 6 seek_play(kk+1);
512 6 play();
513 6 }
514 5 else
515 5 dis_warn(warn2);
516 5 }
517 4 }
518 3 }
519 2 }
520 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1751 ----
CONSTANT SIZE = 178 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 41 21
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -