📄 2402test.lst
字号:
556 2 }
557 1 else{//否则是 个位数据
558 2 item = (read_clock(address+1))/16;//先读出 十位 数据
559 2 item2 = DT;//键值放入 个位
560 2 }
561 1 item=(item)*10 + (item2);//将 十位 和 个位 数据合成
562 1 if(item>max) item=mini;//查看数值有效范围
563 1 if(item<mini) item=max;
564 1 write_clock(address,(item/10)*16+item%10);//转换成16进制写入1302
565 1 write_clock(0x8e,0x80);//写保护,禁止写操作
566 1 }
567 /*****************************************************************************/
568 //检测时钟芯片是否未被初始化,如是则设置1302的初始时间
569 void Init_1302(void){//(2007年1月1日00时00分00秒星期一)
570 1 menu = 0;//
571 1 if(read_clock(0xc1) != 0xaa){
572 2 write_clock(0x8e,0x00);//允许写操作
573 2 write_clock(0x8c,0x07);//年
574 2 write_clock(0x8a,0x01);//星期
575 2 write_clock(0x88,0x01);//月
576 2 write_clock(0x86,0x01);//日
577 2 write_clock(0x84,0x00);//小时
578 2 write_clock(0x82,0x00);//分钟
579 2 write_clock(0x80,0x00);//秒
580 2 write_clock(0x90,0xa5);//充电
581 2 write_clock(0xc0,0xaa);//写入初始化标志RAM(第00个RAM位置)
582 2 write_clock(0x8e,0x80);//禁止写操作
583 2 AT24C02_Write1Byte(0x03,0x00);//初始化24C00中的报警开关选择寄存器
584 2 menu = 1;//如果初始化则直接提示调时
585 2 }
586 1 }
587 /********************************************************************************************/
588 // 定义小汉字 //
589 uint8 code Xword[]={
590 0x18,0x18,0x07,0x08,0x08,0x08,0x07,0x00, //C,代码 0x03
591 0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00, //一,代码 0x04
592 0x00,0x00,0x00,0x0e,0x00,0xff,0x00,0x00, //二,代码 0x05
593 0x00,0x00,0xff,0x00,0x0e,0x00,0xff,0x00, //三,代码 0x06
594 0x00,0x00,0xff,0xf5,0xfb,0xf1,0xff,0x00, //四,代码 0x07
595 0x00,0xfe,0x08,0xfe,0x0a,0x0a,0xff,0x00, //五,代码 0x08
596 0x00,0x04,0x00,0xff,0x00,0x0a,0x11,0x00, //六,代码 0x09
597 0x00,0x1f,0x11,0x1f,0x11,0x11,0x1f,0x00, //日,代码 0x0a
598 };
599 void CgramWrite(void) {// 装入cgram
600 1 uint8 i;
601 1 LCM2402_WriteCMD(0x06); // CGRAM地址自动加1
602 1 LCM2402_WriteCMD(0x40); // CGRAM地址设为00处
603 1 for(i=0;i<64;i++) {
604 2 LCM2402_WriteData(Xword[i]);
605 2 }
606 1 }
607 //=================================红外遥控接收===========================================//
608
609 sbit KBS = P3 ^ 2;
610
611 /********************************************************************************************
612 * 函数名称:keyboard_int
613 * 功 能:中断 红外遥控器数据接收初始化
C51 COMPILER V6.12 2402TEST 08/29/2007 22:42:54 PAGE 11
614 *********************************************************************************************/
615 void keyboard_int (void){ //INT0中断0 P3.2引脚,不能更改
616 1 TMOD = 0x01; //定时器0方式1
617 1 EA = 1; //允许CPU中断
618 1 IT0 = 1; //INT0下降沿有效
619 1 EX0 = 1; //开INT0中断;
620 1 DT = 0xff;
621 1 }
622 /********************************************************************************************
623 * 函数名称:keyboard
624 * 功 能:中断 红外遥控器数据接收
625 * 入口参数:无
626 * 出口参数:无
627 *********************************************************************************************/
628 void timeint(void) interrupt 1 using 2 { //定时器0中断处理
629 1 TH0=0xFC; TL0=0xE0; //设定时值为800us
630 1 if (IRCON<3){
631 2 if (IRCON2<8){ //每中断一次读一次遥控接收头的状态,每二次为遥控编码中的一个位
632 3 IRCON2++;
633 3 IRCode[IRCON]=IRCode[IRCON]<<1; //每读一次放入变量中的二进制的一个位,每次左移一位
634 3 IRCode[IRCON]=IRCode[IRCON] | KBS; //每八次填满一个字节,一个字节存放遥控编码4个位
635 3 //LED1 = ~LED1;
636 3 }
637 2 else{
638 3 IRCON++; //填满一个字节,指向下一个变量
639 3 IRCON2=0; //计数清零
640 3 }
641 2 }
642 1 else{
643 2 TR0 = 0; //关闭定时器
644 2 ET0 = 0; //定时器0中断关闭
645 2 if ((IRCode[1]!=0xff) && (IRCode[2]!=0xff)){
646 3 if (IRCode[1] == 0x55){
647 4 LED1 = 0;
648 4 switch (IRCode[2]){
649 5 case 0xD2: DT = 0X4C;break; //POWER //ON
650 5 case 0xD3: DT = 0X2F;break; //MUTE //OFF
651 5 case 0xAB: DT = 0x01;break; //0-9键控制
652 5 case 0xAC: DT = 0x02;break; //
653 5 case 0xAD: DT = 0x03;break;
654 5 case 0xB2: DT = 0x04;break;
655 5 case 0xB3: DT = 0x05;break;
656 5 case 0xB4: DT = 0x06;break;
657 5 case 0xB5: DT = 0x07;break;
658 5 case 0xCA: DT = 0x08;break;
659 5 case 0xCB: DT = 0x09;break;
660 5 case 0xAA: DT = 0x00;break; // 0
661 5 case 0xCC: DT = 0X11;break; // -/--
662 5 case 0x54: DT = 0X12;break; // SEARCH
663 5 case 0x2A: DT = 0X17;break; // vol+
664 5 case 0x2B: DT = 0X1A;break; // vol-
665 5 case 0xD5: DT = 0X19;break; // RECALL
666 5 case 0xD4: DT = 0X1B;break; // PP
667 5 }
668 4 }
669 3 if (IRCode[1] == 0x56){
670 4 LED1 = 0;
671 4 switch (IRCode[2]){
672 5 case 0xAA: DT = 0x13;break;//PR+
673 5 case 0xAB: DT = 0x14;break;//PR-
674 5 case 0xCD: DT = 0x15;break;//FT+
675 5 case 0xD2: DT = 0x16;break;//FT-
C51 COMPILER V6.12 2402TEST 08/29/2007 22:42:54 PAGE 12
676 5 case 0xCB: DT = 0x18;break;//STORE
677 5 case 0xB4: DT = 0x1C;break;//SLEEP
678 5 case 0x4A: DT = 0X1D;break; // AV
679 5 }
680 4 }
681 3 }
682 2 EX0 = 1; //开INT0中断;
683 2 }
684 1 }
685 void INT0Fun(void) interrupt 0 using 3 { //INT0中断
686 1 EX0 = 0; //外部中断0关闭
687 1 ET0 = 1; //定时器0中断打开
688 1 TH0=0xFC; TL0=0xE0; //设定时值为800us
689 1 for (IRCON=0; IRCON<3; IRCON++){
690 2 IRCode[IRCON] = 0;
691 2 }
692 1 IRCON = 0;
693 1 IRCON2 = 0; //计数清零
694 1 TR0 = 1;//开始计数
695 1 }
696 /********************************************************************************************/
697
698
699 //=================================BEEP驱动===========================================//
700
701 sbit Bell_Out = P3 ^ 0;//元件是动圈式扬声器(并非有源蜂鸣器),需要MCU驱动发声
702
703 /********************************************************************************************/
704 void beep ( unsigned char a,unsigned char b,
705 unsigned char c,unsigned char d){
706 1 for(;a>0;a--){//第一个声音的长度
707 2 Bell_Out = ~Bell_Out;//取反扬声器驱动口,以产生音频
708 2 Delay(b);//音调设置延时
709 2 }
710 1 for(;c>0;c--){//同上
711 2 Bell_Out = ~Bell_Out;
712 2 Delay(d);//
713 2 }
714 1 Bell_Out = 1;
715 1 }
716 /********************************************************************************************/
717 //--------------------------------------------扬声器--按键音
718 void beep_k(void){beep(10,60,5,250); }
719 //--------------------------------------------扬声器--闹钟报警
720 void beep_a(void){beep(250,16,150,40); }//BELL
721 //--------------------------------------------扬声器--成功音
722 void beep_y(void){beep(50,30,100,50); }//BELL
723 //--------------------------------------------扬声器--无效音
724 void beep_n(void){beep(50,80,100,100); }//BELL
725 /********************************************************************************************/
726
727
728 //================================纯软件部分=========================================//
729
730 /********************************************************************************************
731 //显示项目 时间部分 在第一行全行显示时间
732 *********************************************************************************************/
733 void RealTime_Display(void){
734 1 print(0x80,"20");
735 1 print2(0x82,(read_clock(0x8d)/16)+0x30);
736 1 print2(0x83,(read_clock(0x8d)%16)+0x30);
737 1 print(0x84,"/"); // 显示年
C51 COMPILER V6.12 2402TEST 08/29/2007 22:42:54 PAGE 13
738 1 //
739 1 print2(0x85,(read_clock(0x89)/16)+0x30);
740 1 print2(0x86,(read_clock(0x89)%16)+0x30);
741 1 print(0x87,"/"); // 显示月
742 1 //
743 1 print2(0x88,(read_clock(0x87)/16)+0x30);
744 1 print2(0x89,(read_clock(0x87)%16)+0x30);
745 1
746 1 print(0x8b,"["); // 显示[
747 1 print2(0x8c,read_clock(0x8b)%16); //星期
748 1 print(0x8d,"]"); // 显示]
749 1
750 1 print2(0x8f,(read_clock(0x85)/16)+0x30);//小时
751 1 print2(0x90,(read_clock(0x85)%16)+0x30);
752 1 print(0x91,":"); // 显示cgram第一个字模":"
753 1 //
754 1 print2(0x92,(read_clock(0x83)/16)+0x30);//分钟
755 1 print2(0x93,(read_clock(0x83)%16)+0x30);
756 1 print(0x94,"."); // 显示cgram第一个字模"."
757 1 //
758 1 print2(0x95,(read_clock(0x81)/16)+0x30);//秒
759 1 print2(0x96,(read_clock(0x81)%16)+0x30);
760 1 //
761 1 print(0x8a," ");//在主显示区空白处写入空格 防止乱码
762 1 print(0x8e," ");
763 1 print(0xc0," ");
764 1 }
765 /********************************************************************************************
766 //显示项目 定时时间部分 在第一行全行显示时间
767 *********************************************************************************************/
768 void alarm_Display(void){
769 1 print(0x80,"AL");
770 1 print2(0x82,(AT24C02_Read1Byte(0x05+(rom*10))/16)+0x30);
771 1 print2(0x83,(AT24C02_Read1Byte(0x05+(rom*10))%16)+0x30);
772 1 print(0x84,"/"); // 显示年
773 1 //
774 1 print2(0x85,(AT24C02_Read1Byte(0x06+(rom*10))/16)+0x30);
775 1 print2(0x86,(AT24C02_Read1Byte(0x06+(rom*10))%16)+0x30);
776 1 print(0x87,"/"); // 显示月
777 1 //
778 1 print2(0x88,(AT24C02_Read1Byte(0x07+(rom*10))/16)+0x30);
779 1 print2(0x89,(AT24C02_Read1Byte(0x07+(rom*10))%16)+0x30);
780 1
781 1 print(0x8b,"["); // 显示[
782 1 if(AT24C02_Read1Byte(0x08+(rom*10)) == 0xff){
783 2 print(0x8c,"?");
784 2 }
785 1 else{
786 2 print2(0x8c,AT24C02_Read1Byte(0x08+(rom*10))%16); //星期
787 2 }
788 1 print(0x8d,"]"); // 显示]
789 1
790 1 print2(0x8f,(AT24C02_Read1Byte(0x09+(rom*10))/16)+0x30);//小时
791 1 print2(0x90,(AT24C02_Read1Byte(0x09+(rom*10))%16)+0x30);
792 1 print(0x91,":"); // 显示cgram第一个字模":"
793 1 //
794 1 print2(0x92,(AT24C02_Read1Byte(0x0a+(rom*10))/16)+0x30);//分钟
795 1 print2(0x93,(AT24C02_Read1Byte(0x0a+(rom*10))%16)+0x30);
796 1 print(0x94,"."); // 显示cgram第一个字模"."
797 1 //
798 1 print2(0x95,(AT24C02_Read1Byte(0x0b+(rom*10))/16)+0x30);//秒
799 1 print2(0x96,(AT24C02_Read1Byte(0x0b+(rom*10))%16)+0x30);
C51 COMPILER V6.12 2402TEST 08/29/2007 22:42:54 PAGE 14
800 1 //
801 1 print2(0xc0,AT24C02_Read1Byte(0x04+(rom*10))/16+0x30); //显示控制项值//控制项值
802 1 print2(0xc1,AT24C02_Read1Byte(0x04+(rom*10))%16+0x30); //
803 1
804 1 }
805 /********************************************************************************************
806 //清屏+刷新显示+延时+清空DT 一体函数
807 //LRDD()
808 *********************************************************************************************/
809 void LRDD (void){
810 1 LCM2402_Init();
811 1 RealTime_Display();
812 1 DelayS(500); DT = 0xff;
813 1 }
814 /********************************************************************************************
815 //清屏+刷新定时值显示+延时+清空DT 一体函数
816 //LADD()
817 *********************************************************************************************/
818 void LADD (void){
819 1 LCM2402_Init();
820 1 alarm_Display();
821 1 DT = 0xff;
822 1 }
823 /********************************************************************************************
824 //闹钟呜响查寻程序
825 //BEEPing();
826 *********************************************************************************************/
827 void BEEPing(void){//闹钟呜响查寻程序
828 1 uint8 a;
829 1 LADD();
830 1 print(0xc4,"{Time`s up} AV: OFF");
831 1 for(a=0;a<250 && DT == 0xff;a++){
832 2 beep_a();////
833 2 }
834 1 DT = 0xff;
835 1 }
836 /********************************************************************************************
837 //闹钟和无线遥控的键值处理
838 //ALARMing();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -