⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2402test.lst

📁 时钟是用微控制器
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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 + -