📄 main.lst
字号:
402 2 if (0xff-key)
403 2 {
404 3 key_flag=1;
405 3 KeyT=0;
406 3 }
407 2 ReadTime();
408 2 LCD_write_string(0,0,str_date);
409 2 LCD_write_string(3,1,str_day);
410 2 LCD_write_string(2,2,str_time);
411 2 if(flag)
412 2 {
413 3 flag=0;
414 3 LCD_Convert(Pdat[P],Pdat[P+7],Pdat[P+14],1);
415 3 }
416 2
417 2 if ((key==KEY_UP)&&(P>0))
418 2 {
419 3 LCD_Convert(Pdat[P],Pdat[P+7],Pdat[P+14],0);
420 3 P--;
421 3 LCD_Convert(Pdat[P],Pdat[P+7],Pdat[P+14],1);
422 3 }
423 2 else if ((key==KEY_DOWN)&&(P<6))
424 2 {
425 3 LCD_Convert(Pdat[P],Pdat[P+7],Pdat[P+14],0);
426 3 P++;
427 3 LCD_Convert(Pdat[P],Pdat[P+7],Pdat[P+14],1);
C51 COMPILER V7.06 MAIN 12/17/2006 14:56:13 PAGE 8
428 3 }
429 2 else if (key<10)
430 2 {
431 3 if(P==0)
432 3 {
433 4 temp=DS1307_Read(Yearh);
434 4 temp<<=4;
435 4 temp2=DS1307_Read(Year);
436 4 temp2>>=4;
437 4 temp=temp|temp2;
438 4 DS1307_Write(Yearh,temp);
439 4 temp=DS1307_Read(Year);
440 4 temp<<=4;
441 4 temp+=key;
442 4 DS1307_Write(Year,temp);
443 4 flag=1;
444 4 }
445 3 else if(P==3)
446 3 {
447 4 if (key>0&&key<8) DS1307_Write(Day,key);
448 4 flag=1;
449 4 }
450 3 else
451 3 {
452 4 temp=DS1307_Read(6-P);
453 4 temp<<=4;
454 4 temp+=key;
455 4 if (temp>Max[6-P]) temp &= 0x0f;
456 4 if (temp==0&&P<3) temp+=1;
457 4 DS1307_Write(6-P,temp);
458 4 flag=1;
459 4 }
460 3 }
461 2 else if((key==KEY_ENT)||(key==KEY_ESC)) quit=0;
462 2 // delay_ms(45);
463 2 }
464 1 Set_NextRT(1);
465 1 }
466
467
468
469 unsigned char menu(unsigned char MenuNum) //主菜单,返回所选择的菜单号
470 {
471 1 uchar i,rt;
472 1 uchar quit;
473 1 uchar Line=1;
474 1 LCD_write(0x01,COMM); //清屏,字符缓冲区
475 1 delay_ms(3);
476 1 LCD_clr_pic(); //清屏,图形缓冲区
477 1
478 1 for(i=0;i<MenuCount[MenuNum];i++) //显示菜单项
479 1 LCD_write_string(0,i,str_Menu[MenuNum][i]);
480 1
481 1 quit=1;
482 1 while (quit)
483 1 {
484 2 LCD_Convert(0,Line,16,1); //反白选中行
485 2
486 2 key=0xff;
487 2 while(key==0xff) key=ScanKey();
488 2
489 2 key_flag=1;
C51 COMPILER V7.06 MAIN 12/17/2006 14:56:13 PAGE 9
490 2 KeyT=0;
491 2
492 2 LCD_Convert(0,Line,16,0); //取消反白
493 2
494 2 if ((key==KEY_DOWN)&&(Line<MenuCount[MenuNum]-1))
495 2 {
496 3 Line ++;
497 3 }
498 2 else if ((key==KEY_UP)&&(Line>1))
499 2 {
500 3 Line --;
501 3 }
502 2 else if (key==KEY_ENT)
503 2 {
504 3 rt=Line;
505 3 quit=0;
506 3 }
507 2 else if(key>0 && key<MenuCount[MenuNum])
508 2 {rt=key; quit=0;}
509 2 else if (key==KEY_ESC)
510 2 {rt= 0;quit=0;}
511 2 }
512 1 LCD_write(0x01,COMM); //清屏,字符缓冲区
513 1 delay_ms(3);
514 1 LCD_clr_pic(); //清屏,图形缓冲区
515 1 return (rt);
516 1 }
517
518 void Set_NextRT(unsigned mode) //mode=1 从头开始查找时间表,mode=0 继续查询
519 {
520 1 unsigned char nh,nm,rc,rh,rm,rt,i;
521 1 nh=BCD2HEX(DS1307_Read(Hours));
522 1 nm=BCD2HEX(DS1307_Read(Minute));
523 1 rc=Mem_Read(0);
524 1 if (mode) i=0;
525 1 else
526 1 {
527 2 i=NextRingNum-1;
528 2 }
529 1
530 1 for (;i<rc;i++)
531 1 {
532 2 NextRingNum=i+1;
533 2 Read_RingTime(NextRingNum,NextRingTime);
534 2 rh=BCD2HEX(NextRingTime[0]);
535 2 rm=BCD2HEX(NextRingTime[1]);
536 2 rt=BCD2HEX(NextRingTime[2]);
537 2
538 2 if (rt) //上课铃
539 2 {
540 3 if (rm<3) //计算打预备铃的时间
541 3 {
542 4 rm+=57;
543 4 rh--;
544 4 }
545 3 else
546 3 {
547 4 rm-=3;
548 4 }
549 3
550 3 if ((nh<rh)||((nh==rh)&&(nm<rm)))
551 3 {
C51 COMPILER V7.06 MAIN 12/17/2006 14:56:13 PAGE 10
552 4 NextRingTime[0]=HEX2BCD(rh);
553 4 NextRingTime[1]=HEX2BCD(rm);
554 4 break;
555 4 }
556 3 else
557 3 {
558 4 rh=BCD2HEX(NextRingTime[0]); //计算打上课铃的时间
559 4 rm=BCD2HEX(NextRingTime[1]);
560 4
561 4 if ((nh<rh)||((nh==rh)&&(nm<rm)))
562 4 {
563 5 NextRingTime[0]=HEX2BCD(rh);
564 5 NextRingTime[1]=HEX2BCD(rm);
565 5 break;
566 5 }
567 4 else
568 4 {
569 5 if (rm+rt>59) //计算打下课铃的时间
570 5 {
571 6 rh++;
572 6 rm=rm+rt-60;
573 6 }
574 5 else
575 5 {
576 6 rm=rm+rt;
577 6 }
578 5
579 5 if ((nh<rh)||((nh==rh)&&(nm<rm)))
580 5 {
581 6 NextRingTime[0]=HEX2BCD(rh);
582 6 NextRingTime[1]=HEX2BCD(rm);
583 6 NextRingNum++;
584 6 break;
585 6 }
586 5 else
587 5 continue;
588 5 }
589 4 }
590 3 }
591 2 else //普通铃
592 2 {
593 3 if (nh>rh) continue;
594 3 if ((nh==rh)&&(nm>rm)) continue;
595 3 NextRingNum++;
596 3 break;
597 3 }
598 2 }
599 1 }
600
601 void DoCom()
602 {
603 1 In_flag=0;
604 1 if (Com_flag==2) //串口状态为二,接收数据
605 1 {
606 2 if (Com_buff[Com_count]==0xff) //如果为停止标志,则停止接收,置串口状态标志为4,传输结束,准备存储
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -