📄 lesson10.lst
字号:
530 4 break;
531 4 case 0xB5:
532 4 uc_device_addr = 0xA0;//0xA0=1010 0000B, 1010is the device number,000 is the A2A1A0 hard wired, 0 wri
-te.
533 4 uc_device_sub_addr = 0x00 + ((5) << 3);//EEPROM 首地址
534 4 IRcvStr(uc_device_addr,uc_device_sub_addr,g_uc_data_receive,3);//以页方式读取//读出的数据保存在数组g_
-uc_data_receive中
535 4 g_uc_hr_cnt = g_uc_data_receive[0];
536 4 g_uc_min_cnt = g_uc_data_receive[1];
537 4 g_uc_sec_cnt = g_uc_data_receive[2];
538 4 display_led(g_uc_hr_cnt ,g_uc_min_cnt ,g_uc_sec_cnt);
539 4 beep = 0;//连续发声
540 4 delay(50,100);
541 4 beep = 1;
542 4 break;
543 4 case 0xB6:
544 4 uc_device_addr = 0xA0;//0xA0=1010 0000B, 1010is the device number,000 is the A2A1A0 hard wired, 0 wri
-te.
545 4 uc_device_sub_addr = 0x00 + ((6) << 3);//EEPROM 首地址
546 4 IRcvStr(uc_device_addr,uc_device_sub_addr,g_uc_data_receive,3);//以页方式读取//读出的数据保存在数组g_
-uc_data_receive中
547 4 g_uc_hr_cnt = g_uc_data_receive[0];
548 4 g_uc_min_cnt = g_uc_data_receive[1];
549 4 g_uc_sec_cnt = g_uc_data_receive[2];
550 4 display_led(g_uc_hr_cnt ,g_uc_min_cnt ,g_uc_sec_cnt);
551 4 beep = 0;//连续发声
552 4 delay(50,100);
553 4 beep = 1;
554 4 break;
555 4 case 0xB7:
556 4 uc_device_addr = 0xA0;//0xA0=1010 0000B, 1010is the device number,000 is the A2A1A0 hard wired, 0 wri
-te.
557 4 uc_device_sub_addr = 0x00 + ((7) << 3);//EEPROM 首地址
558 4 IRcvStr(uc_device_addr,uc_device_sub_addr,g_uc_data_receive,3);//以页方式读取//读出的数据保存在数组g_
-uc_data_receive中
559 4 g_uc_hr_cnt = g_uc_data_receive[0];
560 4 g_uc_min_cnt = g_uc_data_receive[1];
561 4 g_uc_sec_cnt = g_uc_data_receive[2];
562 4 display_led(g_uc_hr_cnt ,g_uc_min_cnt ,g_uc_sec_cnt);
563 4 beep = 0;//连续发声
564 4 delay(50,100);
565 4 beep = 1;
566 4 break;
567 4 default:
568 4 break;
569 4 }
570 3 }
571 2 }
572 1 uc_keypad_response_flag = 0;//for single key press
573 1 }
574 /*************************************************/
575 /*name:keypad_response_single()
576 function:response to the key single number
577 input:uc_key_number*/
578 /*************************************************/
579 void keypad_response_single(uchar key_number)
580 {
581 1 data uchar k;
C51 COMPILER V7.50 LESSON10 06/19/2006 21:28:10 PAGE 11
582 1 while(!(ACC == 0x87))//release the key//P1.7 for beep!
583 1 {
584 2 delay(2,255);
585 2 P1 = 0x87;
586 2 ACC = P1;
587 2 ACC &= 0X87;
588 2 }
589 1 for(k=0;k<=11;k++)
590 1 {
591 2 if(key_number == g_uc_key_number_all[k])
592 2 break;
593 2 }
594 1 switch(k)
595 1 {
596 2 case 10:/*A*/
597 2 break;
598 2 case 11:/*B*/
599 2 break;
600 2 default:/*k = 0~9*/
601 2 if(g_uc_disp_cnt < 7)//the maximal number is 6
602 2 {
603 3 g_uc_disp_cnt++;
604 3 switch(g_uc_disp_cnt)
605 3 {
606 4 case 1:/*hr high*/
607 4 g_uc_hr_cnt = k << 4;
608 4 g_hr_disp = g_uc_hr_cnt;/*using OR can't mask the hr_low,so hr equal to 0*/
609 4 break;
610 4 case 2:/*hr low*/
611 4 g_uc_hr_cnt += k;
612 4 g_hr_disp = g_uc_hr_cnt;
613 4 break;
614 4 case 3:/*min high*/
615 4 g_uc_min_cnt = k << 4;
616 4 g_min_disp = g_uc_min_cnt;
617 4 break;
618 4 case 4:/*min low*/
619 4 g_uc_min_cnt += k;
620 4 g_min_disp = g_uc_min_cnt;
621 4 break;
622 4 case 5:/*sec high*/
623 4 g_uc_sec_cnt = k << 4;
624 4 g_sec_disp = g_uc_sec_cnt;
625 4 break;
626 4 case 6:/*sec low*/
627 4 g_uc_sec_cnt += k;
628 4 g_sec_disp = g_uc_sec_cnt;
629 4 break;
630 4 default:
631 4 break;
632 4 }
633 3 }
634 2 break;
635 2 }
636 1 }
637 /*************************************************/
638 /* name:display_led
639 function:display the number*/
640 /*************************************************/
641 void display_led(uchar hr, uchar min,uchar sec)
642 {
643 1 g_sec_disp = sec;//显示sec
C51 COMPILER V7.50 LESSON10 06/19/2006 21:28:10 PAGE 12
644 1 g_min_disp = min;//显示min
645 1 g_hr_disp = hr;//显示hr
646 1 }
647 /*************************************************/
648 /* name:delay
649 function: */
650 /*************************************************/
651 void delay(uchar m, uchar n)
652 {
653 1 data uchar i, j;
654 1 for(i=0;i<m;i++)
655 1 {
656 2 for(j=0;j<n;j++);
657 2 }
658 1 }
659 /*************************************************/
660 /*time0_interrupt()时钟计数,显示*/
661 /*************************************************/
662 void time0_interrupt(void) interrupt 1 using 3
663 {
664 1 TH0 =0x3C ;//重新装入初值15536
665 1 TL0 =0xB0 ;//100ms=0.1s
666 1 g_uc_ms_cnt++;
667 1 if(g_uc_ms_cnt==10)
668 1 {
669 2 g_uc_ms_cnt = 0;
670 2 g_st_current_time.sec ++;
671 2 if((g_st_current_time.sec&0x0F)>9) /*变量uc_sec_cnt为16进制数,显示应该为10进制*/
672 2 {
673 3 g_st_current_time.sec += 6; /*(uc_sec_cnt&0x0F)按位与运算*/
674 3 } /*若没有if语句,则只能是到9以后,继续数到F才进位*/
675 2 display_led(g_st_current_time.hr,g_st_current_time.min,g_st_current_time.sec);/*显示时钟,每秒刷新一次*/
676 2 if((g_st_current_time.sec)>=0x60)
677 2 {
678 3 g_st_current_time.sec = 0;
679 3 g_st_current_time.min ++;
680 3 if((g_st_current_time.min&0x0F)>9) /*变量uc_min_cnt为16进制数,显示应该为10进制*/
681 3 {
682 4 g_st_current_time.min += 6; /*(uc_min_cnt&0x0F)按位与运算*/
683 4 } /*若没有if语句,则只能是到9以后,继续数到F才进位*/
684 3 if((g_st_current_time.min)>=0x60)
685 3 {
686 4 g_st_current_time.min = 0;
687 4 g_st_current_time.hr ++;
688 4 if((g_st_current_time.hr&0x0F)>9) /*变量uc_hr_cnt为16进制数,显示应该为10进制*/
689 4 {
690 5 g_st_current_time.hr += 6; /*(uc_hr_cnt&0x0F)按位与运算*/
691 5 } /*若没有if语句,则只能是到9以后,继续数到F才进位*/
692 4 if((g_st_current_time.hr)>=0x24)
693 4 {
694 5 g_st_current_time.hr = 0;
695 5 }
696 4 }
697 3 }
698 2 }
699 1 }
700 /*************************************************/
701 /*time1_interrupt段时间计数*/
702 /*************************************************/
703 void time1_interrupt(void) interrupt 3 using 0
704 {
705 1 uchar uc_device_addr,uc_device_sub_addr;
C51 COMPILER V7.50 LESSON10 06/19/2006 21:28:10 PAGE 13
706 1 uchar j;
707 1
708 1 g_ui_timer1_interval_cnt ++;
709 1 if(g_ui_timer1_interval_cnt >= 600)//6000*0.1s=10min
710 1 {
711 2 TH1 = 0x3C ;//初值15536
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -