📄 12.lst
字号:
*** WARNING C280 IN LINE 281 OF 12.C: 'ucSKey': unreferenced local variable
304
305 //*****************获取按键状态函数******************
306 unsigned char keyscan(void)
307 {
308 1 uchar recode,sccode;
309 1 KEYROW=0xE0; //将行都设置为低电平
310 1 recode=KEYCOLUM; //获取列的状态
311 1 if((recode&0x0F)!=0x0F) //判断是否有键按下和延时去抖动
312 1 {
313 2 delay(6000);
314 2 if((recode&0x0F)!=0x0F)
315 2 {
316 3 sccode=0xFE; //设置行扫描的初始值
317 3 while((sccode&0x20)!=0) //判断并逐行扫描
318 3 {
319 4 KEYROW=sccode;
320 4 recode=KEYCOLUM;
321 4 if((recode&0x0F)!=0x0F)
322 4 {
323 5 recode=(recode&0x0F)|0xF0; //记录列号
324 5 sccode=~sccode; //记录行号
325 5 sccode=sccode<<4; //把行号方到高四位
326 5 keystate=(sccode)+(~recode); //记录行列状态,高四位为行号,低四位为列号
327 5 return keystate;
328 5 break;
329 5 }
330 4 else
331 4 sccode=(sccode<<1)|0x01; //行扫描后没找到按键状态则转到下一行
332 4 }
333 3 }
334 2 }
335 1 return(0);
336 1 }
337 //**********************按键对应的显示字符**********************************
338 unsigned char Gatkey(char keystate)
339 {
340 1
341 1 switch (keystate)
342 1 {
343 2 case 0x11: keyin='a';
344 2 break;
345 2 case 0x12: keyin='b';
346 2 break;
347 2 case 0x14: keyin='c';
348 2 break;
349 2 case 0x18: keyin='d';
350 2 break;
351 2 case 0x21: keyin='e';
352 2 break;
353 2 case 0x22: keyin='f';
354 2 break;
355 2 case 0x24: keyin='g';
356 2 break;
357 2 case 0x28: keyin='h';
358 2 break;
359 2 case 0x41: keyin='i';
360 2 break;
361 2 case 0x42: keyin='j';
362 2 break;
363 2 case 0x44: keyin='k';
364 2 break;
C51 COMPILER V8.02 12 10/10/2008 16:05:55 PAGE 7
365 2 case 0x48: keyin='l';
366 2 break;
367 2 case 0x81: keyin='m';
368 2 break;
369 2 case 0x82: keyin='n';
370 2 break;
371 2 case 0x84: keyin='0';
372 2 break;
373 2 case 0x88: keyin='p';
374 2 break;
375 2 case 0x01: keyin='q';
376 2 break;
377 2 case 0x02: keyin='r';
378 2 break;
379 2 case 0x04: keyin='s';
380 2 break;
381 2 case 0x08: keyin='t';
382 2 break;
383 2 default: keyin='N' ;
384 2 }
385 1 return keyin;
386 1
387 1 }
388
389 void Setpwm(char channel, unsigned char pwmval)
390 {
391 1 switch (channel )
392 1 {
393 2 case 0:
394 2 CCAP0L = pwmval; //PWMVAL值确定占空比,0X00-0XFF;反比例:
395 2 CCAP0H = pwmval;CCAPM0 = 0x4A;
396 2 break;
397 2 case 1:
398 2 CCAP1L = pwmval;
399 2 CCAP1H = pwmval;CCAPM1 = 0x4A;
400 2 break;
401 2 default:
402 2 CCAP0L = pwmval;
403 2 CCAP0H = pwmval;CCAPM0 = 0x4A ;
404 2
405 2 }
406 1
407 1
408 1 }
409
410 //**********************子程序附加*******************
411 //***********************************
412 void stop(void)
413 {
414 1 HC573C1=0x00; //停止
415 1 }
416
417 void go_left(void)
418 {
419 1 HC573C1=0x01; //左转
420 1 }
421
422 void go_right(void)
423 {
424 1 HC573C1=0x04; //右转
425 1 }
426
C51 COMPILER V8.02 12 10/10/2008 16:05:55 PAGE 8
427
428 void go(void)
429 {
430 1 HC573C1=0x05; //前进
431 1 }
432
433
434 //*************处理*****************
435
436 void deal_go(void)
437 {
438 1 mid=HC245C1%4; //寻迹读入
439 1
440 1 if(mid==2)go_left();
441 1 if(mid==1)go_right();
442 1 if(mid==3)go();
443 1 if(mid==0)
444 1 {
445 2 t_no++;
446 2 stop();
447 2 if((t_no==3)||(t_no==4))
448 2 {
449 3 while(mid==0)
450 3 {
451 4 go();
452 4 mid=HC245C1%4;
453 4 }
454 3 }
455 2 else
456 2 {
457 3 go();
458 3 delay(100);
459 3 while(mid==0)
460 3 {
461 4 go();
462 4 mid=HC245C1%4;
463 4 }
464 3 for(i=0;i<16;i++)
465 3 {
466 4 mid=HC245C1%4;
467 4 if(mid==2)go_left();
468 4 if(mid==1)go_right();
469 4 if(mid==3)go();
470 4 if(mid==0)go();
471 4 delay(100);
472 4 }
473 3 stop();
474 3 delay(60000);
475 3 HC573C2=0x00;
476 3 }
477 2
478 2 }
479 1
480 1 }
481 /*
482 void deal_go2(void)
483
484 {
485 if((P2_0==0)||(P2_1==0))
486 {
487
488 t_no++;
C51 COMPILER V8.02 12 10/10/2008 16:05:55 PAGE 9
489 flag=1;
490 t_1=second_1;
491 }
492
493 }
494 */
495 //******************时间显示**************************
496 void LCD_TIME(void)
497 {
498 1 DisplayString(11,0,"m s ");
499 1 sprintf(ADval,"%d",second);
500 1 DisplayString(13,0,ADval);
501 1 sprintf(ADval,"%d",minute);
502 1 DisplayString(10,0,ADval);
503 1 }
504 void LCD_cesu(void)
505 {
506 1 a=TH1*256+TL1;
507 1 sprintf(ADval,"%d",a);
508 1 if(a<10000)ADval[4]=' ';
509 1 if(a<1000)ADval[3]=' ';
510 1 if(a<100)ADval[2]=' ';
511 1 if(a<10)ADval[1]=' ';
512 1 DisplayString(10,1,ADval);
513 1 }
514 //********************************平衡************************
515
516 void T0INT( ) interrupt 1
517 {
518 1 EA=0;
519 1 TH0 = 0x3C;
520 1 TL0 = 0xAF;
521 1 tick ++;
522 1 if(tick>=19)
523 1 {
524 2 tick =0;
525 2 second++ ;
526 2 second_1++;
527 2 if(second>=60)
528 2 {
529 3 second=0;
530 3 minute++;
531 3 }
532 2
533 2 }
534 1 P1=0xff;
535 1 Setpwm(0,co_2);
536 1 EA=1;
537 1
538 1 }
539
540
541
542
543
544
545
546
547 //******************************主程序***************************
548 void main()
549 {
550 1
C51 COMPILER V8.02 12 10/10/2008 16:05:55 PAGE 10
551 1 //int b,c;
552 1 SpiInit();
553 1 LCDInit();
554 1 DisplayString(5,1,"No= ");
555 1 HC573C1 = 0x0f;
556 1 HC573C2 = 0x0F;
557 1 KEYROW = 0x00;
558 1 P1 = 0x01;
559 1 //0x51--T0计时,T1计数
560 1 TMOD = 0x51; // 最高位置1测INTX脚高低电平长短,C/T位(第7位)置1选择计数模式 //*T1* GATE||C/T||M1||M0|
-*T0*|GATE||C/T||M1||M0||
561 1 TL0 = 0xAF;
562 1 TH0 = 0x3C;
563 1 TL1 = 0X00;
564 1 TH1 = 0X00;
565 1 ET0 = 1;
566 1 ET1 = 1;
567 1 TR0 = 1;
568 1 TR1 = 1;
569 1 EA = 1;
570 1 EX0 = 1;
571 1
572 1 CMOD = 0x02;
573 1 CCAPM0 = 0x4A;
574 1 CCAPM1 = 0x4A;
575 1 CL =0;
576 1 CCAP0H = 16;
577 1 CCON = 0x40;
578 1
579 1 // ADs = ReadAD(0x01);
580 1 // sprintf(ADval,"%d",ADs);
581 1 // DisplayString(0,0,ADval);
582 1 // DACout(1,ADs);
583 1 // DACout(2,ADs);
584 1 // KEYROW=0xE0;
585 1 //HC573C1 ^= 0x01;
586 1 // delay(10000); //这里加了延时会出现按键不正常
587 1
588 1
589 1
590 1 //HC573C1=0x01; //左转
591 1 //HC573C1=0x04; //右转
592 1 //HC573C1=0x05; //前进
593 1 //HC573C1=0x00; //停止
594 1 P1=0xff;
595 1 HC573C2 = 0xff;
596 1 while(keyin!='a'){;}
597 1 while(1)
598 1 {
599 2 deal_go();
600 2
601 2 LcdWCMD( 0x01) ; //显示清屏
602 2
603 2 a = TH1*256+TL1;
604 2
605 2 sprintf(ADval,"%d",a);
606 2
607 2 DisplayString(8,0,ADval);
608 2
609 2 sprintf(ADval,"%d",t_no);
610 2
611 2 DisplayString(0,1,ADval);
C51 COMPILER V8.02 12 10/10/2008 16:05:55 PAGE 11
612 2
613 2 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -