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

📄 ds1302.lst

📁 用ds18b20+ds1302+89s52做的时钟
💻 LST
📖 第 1 页 / 共 3 页
字号:
 549   1              write_ds1302(0x84,time[4]);             //时
 550   1              write_ds1302(0x82,time[5]);             //分
C51 COMPILER V7.06   DS1302                                                                06/27/2008 11:23:52 PAGE 10  

 551   1              write_ds1302(0x80,time[6]);             //秒
 552   1              write_ds1302(0x8e,0x80);                //写保护寄存器
 553   1      }
 554          
 555          void initial_ds13021()
 556          {
 557   1              write_ds1302(0x8e,0x00);                //写保护寄存器,在对时钟或RAM写前WP一定要为0
 558   1              write_ds1302(0x8c,year);                //年
 559   1              write_ds1302(0x88,month);               //月
 560   1              write_ds1302(0x86,day);         //日
 561   1              write_ds1302(0x8A,week);                //星期
 562   1              write_ds1302(0x84,hour);                //时
 563   1              write_ds1302(0x82,minute);              //分
 564   1              write_ds1302(0x80,second);              //秒
 565   1              write_ds1302(0x8e,0x80);                //写保护寄存器
 566   1      }
 567          
 568          /*****************************************************************************
 569          函数功能:读DS1302时间子程序
 570          入口参数:
 571          出口参数:全局变量(second,minute,hour,week,day,month,year)
 572          *****************************************************************************/
 573          void read_time()
 574          {
 575   1              second=read_ds1302(0x81);               //秒寄存器
 576   1              minute=read_ds1302(0x83);               //分
 577   1              hour=read_ds1302(0x85);                 //时
 578   1              week=read_ds1302(0x8B);                 //星期
 579   1              day=read_ds1302(0x87);                  //日
 580   1              month=read_ds1302(0x89);                //月
 581   1              year=read_ds1302(0x8d);                 //年
 582   1      }
 583          
 584          /*****************************************************************************
 585          函数功能:主程序
 586          入口参数:
 587          出口参数:
 588          *****************************************************************************/
 589          
 590          
 591          
 592          
 593          
 594          
 595          bit scan_key1() 
 596          // 扫描按键
 597          {
 598   1              key_s1 = 0x00;
 599   1              key_s1 |= K2;  /////////////////////////////////////////////////
 600   1              
 601   1              return(key_s1 ^ key_v1);        
 602   1      }
 603          
 604          
 605          
 606          void proc_key1()
 607          // 键处理
 608          { //  hour=12;
 609   1         // displayhour();
 610   1              if((key_v1 & 0x01) == 0  )
 611   1              {                       // K2按下second1,minute1,hour1,week1,day1,month1,year1;
 612   2                      if (keysum==1) year1=year1+1;
C51 COMPILER V7.06   DS1302                                                                06/27/2008 11:23:52 PAGE 11  

 613   2                  if (keysum==2) month1=month1+1;
 614   2                  if (keysum==3) day1=day1+1;
 615   2                  if (keysum==4) week1=week1+1;
 616   2                      if (keysum==5) hour1=hour1+1;//时
 617   2                  if (keysum==6) minute1=minute1+1;//分            
 618   2                  if (keysum==7) second1=second1+1;//分
 619   2      
 620   2                  if (year1>20) year1=0;
 621   2                  if (month1>12) month1=1;
 622   2                  if (week1>7) week1=1;
 623   2                              if (month1==1 || month1==3 ||month1==5 ||month1==7 ||month1==8 || month1==10 ||month1==12)
 624   2                                 {
 625   3                                  if (day1>31) day1=1;  
 626   3                                 }
 627   2                              if (month1==4 || month1==6 ||month1==9 ||month1==11 )
 628   2                                 {
 629   3                      if (day1>30) day1=1;    
 630   3                                 }
 631   2                              if (month1==2)
 632   2                                 { 
 633   3                                 // if ((year1/4)==(int(year1/4)))
 634   3                       //  {
 635   3                           if (day1>29) day1=1;    
 636   3                                       //  }
 637   3                                 }
 638   2                  if (day1>31) day1=0; 
 639   2                          if (minute1>59)  minute1=0;
 640   2                              if (hour1>23) hour1=0;
 641   2                              if (second1>59)second1=0;
 642   2           
 643   2      
 644   2              }
 645   1      
 646   1      }
 647          
 648          
 649          bit scan_key()  
 650          // 扫描按键
 651          {
 652   1              key_s = 0x00;
 653   1              key_s |= K1;  /////////////////////////////////////////////////
 654   1      
 655   1              return(key_s ^ key_v);  
 656   1      }
 657          
 658          void proc_key()
 659          // 键处理
 660          {
 661   1              if((key_v & 0x01) == 0)
 662   1              {                       // K1按下
 663   2              //      send_str();     聅econd1,minute1,hour1,week1,day1,month1,year1; 
 664   2              keysum++;
 665   2                if (keysum==1) 
 666   2                           {
 667   3                             year1=((int)year)/16;
 668   3                             year1=year1*10+((int)year)%16;           
 669   3                                }
 670   2                if (keysum==2) 
 671   2                           {
 672   3                             month1=((int)month)/16;
 673   3                             month1=month1*10+((int)month)%16;                
 674   3                                }
C51 COMPILER V7.06   DS1302                                                                06/27/2008 11:23:52 PAGE 12  

 675   2      
 676   2                if (keysum==3) 
 677   2                           {
 678   3                             day1=((int)day)/16;
 679   3                             day1=day1*10+((int)day)%16;              
 680   3                                }
 681   2                if (keysum==4) 
 682   2                           {
 683   3                             week1=week;
 684   3                             
 685   3                                }
 686   2      
 687   2                if (keysum==5) 
 688   2                           {
 689   3                             hour1=((int)hour)/16;
 690   3                             hour1=hour1*10+((int)hour)%16;           
 691   3                                }
 692   2      
 693   2                if (keysum==6)
 694   2                            {                         
 695   3                                  minute1=((int)minute)/16;
 696   3                                  minute1=minute1*10+((int)minute)%16;
 697   3                                 //  minute1=minute;
 698   3                                }
 699   2                 if (keysum==7)
 700   2                            {                         
 701   3                                  second1=((int)second)/16;
 702   3                                  second1=second1*10+((int)second)%16;
 703   3                                 //  minute1=minute;
 704   3                                } 
 705   2                               
 706   2              if (keysum>7) 
 707   2                 {          
 708   3                keysum=0;
 709   3      //,minute1,hour1,week1,day1,month1,year1;       
 710   3      
 711   3                        year=(year1/10)*16+(year1%10);
 712   3                        month=(month1/10)*16+(month1%10);
 713   3                        day=(day1/10)*16+(day1%10);
 714   3                        week=(week1/10)*16+(week1%10);
 715   3                        hour=(hour1/10)*16+(hour1%10);
 716   3                        minute=(minute1/10)*16+(minute1%10);
 717   3                        second=(second1/10)*16+(second1%10);
 718   3                initial_ds13021();           
 719   3                 }
 720   2           
 721   2              }
 722   1      
 723   1      }
 724          
 725          void main(void)
 726          {   
 727   1          
 728   1          float i;
 729   1      
 730   1          keysum=0;
 731   1      //      read_ds1302();
 732   1              read_time();                            //读取时间
 733   1        //  display();        
 734   1          display();
 735   1      //      write_ds1302();
 736   1              initial_ds13021();                              //初始化DS1302
C51 COMPILER V7.06   DS1302                                                                06/27/2008 11:23:52 PAGE 13  

 737   1              
 738   1      //      read_time();                            //读取时间
 739   1      //      display();                                      //显示时间
 740   1              while(1)
 741   1              {    
 742   2                  
 743   2                      
 744   2              
 745   2                              
 746   2                      
 747   2                
 748   2              if(scan_key())          // 扫描按键
 749   2                      {
 750   3                              delayms(10);                    // 延时去抖动
 751   3                      
 752   3                              if(scan_key())                  // 再次扫描
 753   3                              {
 754   4                                      key_v = key_s;          // 保存键值
 755   4                                      proc_key();                     // 键处理
 756   4                              }
 757   3                      }
 758   2            
 759   2      
 760   2                      if(scan_key1())         // 扫描按键
 761   2                      {
 762   3                              delayms(10);                    // 延时去抖动
 763   3                              if(scan_key1())                 // 再次扫描
 764   3                              {
 765   4                                      key_v1 = key_s1;                // 保存键值
 766   4                                      proc_key1();                    // 键处理
 767   4                              }
 768   3                      }
 769   2      
 770   2            if (keysum==0  )
 771   2                  {   
 772   3                      read_time();
 773   3                         if(second>8)
 774   3                            {
 775   4                                      //read_time();                          //读取时间
 776   4                                      display();                                      //显示时间
 777   4                                }
 778   3                 if(second<5)
 779   3                            {
 780   4                      //              read_time();                            //读取时间
 781   4                                      display1();                                     //显示时间
 782   4                                }
 783   3      ///
 784   3                                if (second==5 || second==6 || second==7 ||second==8)  
 785   3                       {              
 786   4                                      i=ReadTemperature();
 787   4                          displayy(i);
 788   4                       }
 789   3               }
 790   2      
 791   2                         if (keysum!=0)
 792   2                   {          
 793   3                            if (keysum==1)displayyear();           
 794   3                            if (keysum==2)displaymonth();          
 795   3                            if (keysum==3)displayday();            
 796   3                            if (keysum==4)displayweek();           
 797   3                            if (keysum==5)displayhour();           
 798   3                            if (keysum==6)displayminuite();  
C51 COMPILER V7.06   DS1302                                                                06/27/2008 11:23:52 PAGE 14  

 799   3                            if (keysum==7)displaysecond(); 
 800   3                   }
 801   2           
 802   2                      
 803   2              }
 804   1      }
 805          
 806          
 807          
 808          
 809          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1973    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     43       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  1 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -