📄 2402test.lst
字号:
520 1 return(ACC);
521 1 }
522 /*******************DS1302写数据(底层协议)************************************************/
523 void write_clock(unsigned char ord, unsigned char dd)
524 {
525 1 clock_clk=0;
526 1 clock_Rst=0;
527 1 clock_Rst=1;
528 1 clock_out(ord);
529 1 clock_out(dd);
530 1 clock_Rst=0;
531 1 clock_clk=1;
532 1 }
533 /*******************DS1302读数据(底层协议)**********************************************/
534 unsigned char read_clock(unsigned char ord)
535 {
536 1 unsigned char dd=0;
537 1 clock_clk=0;
538 1 clock_Rst=0;
539 1 clock_Rst=1;
540 1 clock_out(ord);
541 1 dd=clock_in();
542 1 clock_Rst=0;
543 1 clock_clk=1;
544 1 return(dd);
545 1 }
546 /*******************调时程序**********************************************************/
547 /*******************根据选择调整的相应项目加1并写入DS1302*****************************/
548 void Set_time(unsigned char sel,bit a)
549 {
550 1 signed char address,item,item2;
551 1 signed char max,mini;
C51 COMPILER V8.05a 2402TEST 07/02/2008 20:45:43 PAGE 10
552 1 write_clock(0x8e,0x00); //允许写操作
553 1 if(sel==7){address=0x80;max=59;mini=0;} //秒7
554 1 if(sel==6){address=0x82;max=59;mini=0;} //分钟6
555 1 if(sel==5){address=0x84;max=23;mini=0;} //小时5
556 1 if(sel==4){address=0x8a;max=7;mini=1;} //星期4
557 1 if(sel==3){address=0x86;max=31;mini=0;} //日3
558 1 if(sel==2){address=0x88;max=12;mini=0;} //月2
559 1 if(sel==1){address=0x8c;max=99; mini=0;} //年1
560 1 if(a==0) //如果a是0则表示现在键入的是 十位 数据
561 1 {
562 2 write_clock(address,0x00); //将 个位 的数据清0 防止数值范围计算有错
563 2 item=DT; //键值数给 十位
564 2 item2=0; // 个位 填入 0
565 2 }
566 1 else //否则是 个位数据
567 1 {
568 2 item=(read_clock(address+1))/16; //先读出 十位 数据
569 2 item2=DT; //键值放入 个位
570 2 }
571 1 item=(item)*10+(item2); //将 十位 和 个位 数据合成
572 1 if(item>max)
573 1 item=mini; //查看数值有效范围
574 1 if(item<mini)
575 1 item=max;
576 1 write_clock(address,(item/10)*16+item%10); //转换成16进制写入1302
577 1 write_clock(0x8e,0x80); //写保护,禁止写操作
578 1 }
579 /*******************检测时钟芯片是否未被初始化,如是则设置1302的初始时间********************/
580 void Init_1302(void) //2008年1月1日00时00分00秒星期二
581 {
582 1 menu=0;
583 1 if(read_clock(0xc1)!=0xaa)
584 1 {
585 2 write_clock(0x8e,0x00); //允许写操作
586 2 write_clock(0x8c,0x08); //08年
587 2 write_clock(0x8a,0x02); //星期二
588 2 write_clock(0x88,0x01); //01月
589 2 write_clock(0x86,0x01); //01日
590 2 write_clock(0x84,0x00); //00小时
591 2 write_clock(0x82,0x00); //00分钟
592 2 write_clock(0x80,0x00); //00秒
593 2 write_clock(0x90,0xa5); //充电
594 2 write_clock(0xc0,0xaa); //写入初始化标志RAM(第00个RAM位置)
595 2 write_clock(0x8e,0x80); //禁止写操作
596 2 AT24C02_Write1Byte(0x03,0x00); //初始化24C02中的报警开关选择寄存器
597 2 menu=1; //如果初始化则直接提示调时
598 2 }
599 1 }
600 /*******************定义小汉字**************************************************************/
601 uint8 code Xword[]={
602 0x02,0x05,0x02,0x00,0x00,0x00,0x00,0x00, //C,代码 0x03
603 0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00, //一,代码 0x04
604 0x00,0x0e,0x00,0x00,0x00,0xff,0x00,0x00, //二,代码 0x05
605 0x00,0xff,0x00,0x0e,0x00,0xff,0x00,0x00, //三,代码 0x06
606 0x00,0xff,0xf5,0xfb,0xf1,0xff,0x00,0x00, //四,代码 0x07
607 0x00,0xff,0x04,0x3f,0x09,0xff,0x00,0x00, //五,代码 0x08
608 0x00,0x04,0xff,0x00,0x0a,0x11,0x00,0x00, //六,代码 0x09
609 0x00,0x1f,0x11,0x1f,0x11,0x1f,0x00,0x00, //日,代码 0x0a
610 };
611 /*******************装入cgram***************************************************************/
612 void CgramWrite(void)
613 {
C51 COMPILER V8.05a 2402TEST 07/02/2008 20:45:43 PAGE 11
614 1 uint8 i;
615 1 LCM2402_WriteCMD(0x06); // CGRAM地址自动加1
616 1 LCM2402_WriteCMD(0x40); // CGRAM地址设为00处
617 1 for(i=0;i<64;i++)
618 1 {
619 2 LCM2402_WriteData(Xword[i]);
620 2 }
621 1 }
622 //=================================红外遥控接收===========================================//
623 sbit KBS=P3^2;
624 /********************************************************************************************
625 * 函数名称:keyboard_int
626 * 功 能:中断 红外遥控器数据接收初始化
627
628 ********************INT0中断0 P3.2引脚,不能更改********************************************/
629 void keyboard_int(void)
630 {
631 1 TMOD=0x01; //定时器0方式1
632 1 EA=1; //允许CPU中断
633 1 IT0=1; //INT0下降沿有效
634 1 EX0=1; //开INT0中断
635 1 DT=0xff;
636 1 }
637 /********************************************************************************************
638 * 函数名称:keyboard
639 * 功 能:中断 红外遥控器数据接收
640 * 入口参数:无
641 * 出口参数:无
642 **********************定时器0中断处理*******************************************************/
643 void timeint(void) interrupt 1 using 2
644 {
645 1 TH0=0xFC;
646 1 TL0=0xE0; //设定时值为800us
647 1 if(IRCON<3)
648 1 {
649 2 if(IRCON2<8) //每中断一次读一次遥控接收头的状态,每二次为遥控编码中的一个位
650 2 {
651 3 IRCON2++;
652 3 IRCode[IRCON]=IRCode[IRCON]<<1; //每读一次放入变量中的二进制的一个位,每次左移一位
653 3 IRCode[IRCON]=IRCode[IRCON]|KBS; //每八次填满一个字节,一个字节存放遥控编码4个位
654 3 //LED1=~LED1;
655 3 }
656 2 else
657 2 {
658 3 IRCON++; //填满一个字节,指向下一个变量
659 3 IRCON2=0; //计数清零
660 3 }
661 2 }
662 1 else
663 1 {
664 2 TR0=0; //关闭定时器
665 2 ET0=0; //定时器0中断关闭
666 2 if((IRCode[1]!=0xff)&&(IRCode[2]!=0xff))
667 2 {
668 3 if(IRCode[1]==0x55)
669 3 {
670 4 LED1=0;
671 4 switch(IRCode[2])
672 4 {
673 5 case 0xD2:DT=0X4C;break; //POWER ON
674 5 case 0xD3:DT=0X2F;break; //MUTE OFF
675 5 case 0xAB:DT=0x01;break; //1键控制
C51 COMPILER V8.05a 2402TEST 07/02/2008 20:45:43 PAGE 12
676 5 case 0xAC:DT=0x02;break; //2键控制
677 5 case 0xAD:DT=0x03;break; //3键控制
678 5 case 0xB2:DT=0x04;break; //4键控制
679 5 case 0xB3:DT=0x05;break; //5键控制
680 5 case 0xB4:DT=0x06;break; //6键控制
681 5 case 0xB5:DT=0x07;break; //7键控制
682 5 case 0xCA:DT=0x08;break; //8键控制
683 5 case 0xCB:DT=0x09;break; //9键控制
684 5 case 0xAA:DT=0x00;break; //0键控制
685 5 case 0xCC:DT=0X11;break; //-/--
686 5 case 0x54:DT=0X12;break; //SEARCH
687 5 case 0x2A:DT=0X17;break; //Vol+
688 5 case 0x2B:DT=0X1A;break; //Vol-
689 5 case 0xD5:DT=0X19;break; //RECALL
690 5 case 0xD4:DT=0X1B;break; //PP
691 5 }
692 4 }
693 3 if(IRCode[1]==0x56)
694 3 {
695 4 LED1=0;
696 4 switch(IRCode[2])
697 4 {
698 5 case 0xAA:DT=0x13;break; //PR+
699 5 case 0xAB:DT=0x14;break; //PR-
700 5 case 0xCD:DT=0x15;break; //FT+
701 5 case 0xD2:DT=0x16;break; //FT-
702 5 case 0xCB:DT=0x18;break; //STORE
703 5 case 0xB4:DT=0x1C;break; //SLEEP
704 5 case 0x4A:DT=0X1D;break; //AV
705 5 }
706 4 }
707 3 }
708 2 EX0=1; //开INT0中断
709 2 }
710 1 }
711 /*********************INT0中断***********************************************************************/
712 void INT0Fun(void) interrupt 0 using 3
713 {
714 1 EX0=0; //外部中断0关闭
715 1 ET0=1; //定时器0中断打开
716 1 TH0=0xFC;
717 1 TL0=0xE0; //设定时值为800us
718 1 for(IRCON=0;IRCON<3;IRCON++)
719 1 {
720 2 IRCode[IRCON]=0;
721 2 }
722 1 IRCON=0;
723 1 IRCON2=0; //计数清零
724 1 TR0=1; //开始计数
725 1 }
726 //=================================BEEP驱动===========================================//
727 sbit Bell_Out=P3^0; //元件是动圈式扬声器(并非有源蜂鸣器),需要MCU驱动发声
728 /****************原来扬声器声音*********************************************************
729 void beep(unsigned char a,unsigned char b,unsigned char c,unsigned char d)
730 {
731 for(;a>0;a--) //第一个声音的长度
732 {
733 Bell_Out=~Bell_Out; //取反扬声器驱动口,以产生音频
734 Delay(b); //音调设置延时
735 }
736 for(;c>0;c--) //同上
737 {
C51 COMPILER V8.05a 2402TEST 07/02/2008 20:45:43 PAGE 13
738 Bell_Out=~Bell_Out;
739 Delay(d);
740 }
741 Bell_Out=1;
742 }
743 //------------------扬声器--按键音--------------------------
744 void beep_k(void)
745 {
746 beep(10,60,5,250);
747 }
748 //------------------扬声器--闹钟报警--------------------------
749 void beep_a(void)
750 {
751 beep(250,16,150,40);
752 }
753 //------------------扬声器--成功音--------------------------
754 void beep_y(void)
755 {
756 beep(50,30,100,50);
757 }
758 //------------------扬声器--无效音--------------------------
759 void beep_n(void)
760 {
761 beep(50,80,100,100);
762 }
763 ****** 扬声器--无效音 *********************************************************/
764 void beep_n(void)
765 {
766 1 unsigned int a; //定义变量用于发声的长度设置
767 1 for(a=100;a>0;a--) //第一个声音的长度
768 1 {
769 2 Bell_Out=~Bell_Out; //取反扬声器驱动口,以产生音频
770 2 Delay(100); //音调设置延时
771 2 }
772 1 for(a=160;a>0;a--)
773 1 { //同上
774 2 Bell_Out=~Bell_Out;
775 2 Delay(80); //音调设置延时
776 2 }
777 1 Bell_Out=1;
778 1 }
779 /****** 扬声器--闹钟报警 *******************************************************/
780 void beep_a(void)
781 {
782 1 unsigned char a; //定义变量用于发声的长度设置
783 1 for(a=60;a>0;a--)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -