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

📄 ds1302时钟+ds18b20.lst

📁 DS1302资料lcd.rar
💻 LST
📖 第 1 页 / 共 3 页
字号:
 543   3      								  temp=temp-1;  //星期数减1
 544   3                                        down_flag=1;
 545   3      								  if(temp==0)
 546   3      								  temp=0x7;;
C51 COMPILER V6.12  DS1302_____DS18B20                                                     12/27/2009 10:30:49 PAGE 10  

 547   3      								  break;
 548   3      				           case 5:
 549   3                                        temp=Read1302(DS1302_DAY);  //读取日数 
 550   3      								  temp=temp-1;  //日数减1
 551   3                                        down_flag=1;
 552   3      								  if(temp==0)
 553   3      								  temp=31;
 554   3      								  break;
 555   3      				           case 6:
 556   3                                        temp=Read1302(DS1302_MONTH);  //读取月数 
 557   3      								  temp=temp-1;  //月数减1
 558   3                                        down_flag=1;
 559   3      								  if(temp==0)
 560   3      								  temp=12;
 561   3      								  break;
 562   3      				           case 7:
 563   3                                        temp=Read1302(DS1302_YEAR);  //读取年数
 564   3      								  temp=temp-1;  //年数减1
 565   3                                        down_flag=1;
 566   3      								  if(temp==-1)
 567   3      								  temp=0x85;
 568   3      								  break;
 569   3      					      default:break;
 570   3      				         }
 571   2      					 
 572   2      				   while(Down==0);
 573   2      				   while(wireless_3==1);
 574   2      				  }
 575   1      }
 576          
 577          void Setkey()//模式选择按键 
 578          {
 579   1      		Set=1;
 580   1      		if(Set==0||wireless_4==1)
 581   1      	    {
 582   2                 mdelay(8);
 583   2                 count=count+1;	 //Setkey按一次,count就加1
 584   2      		   done=1;			 //进入调整模式 
 585   2                 while(Set==0);
 586   2                 while(wireless_4==1);
 587   2      		 }
 588   1      
 589   1      }
 590          
 591          void keydone()//按键功能执行 
 592          {        uchar Second;
 593   1      		 if(flag==0)    //关闭时钟,停止计时 
 594   1               { Write1302(0x8e,0x00); //写入允许 
 595   2                 temp=Read1302(0x80);
 596   2                 Write1302(0x80,temp|0x80);
 597   2      	       Write1302(0x8e,0x80); //禁止写入
 598   2                 flag=1;
 599   2               }
 600   1               Setkey();				            //扫描模式切换按键 
 601   1      		 switch(count)
 602   1      		 {case 1:do					        //count=1,调整秒 
 603   2      		          {
 604   3                         outkey();			   //扫描跳出按钮 
 605   3      				   Upkey();                //扫描加按钮
 606   3      				   Downkey();              //扫描减按钮
 607   3      				   if(up_flag==1||down_flag==1)  //数据更新,重新写入新的数据 
 608   3      				   {
C51 COMPILER V6.12  DS1302_____DS18B20                                                     12/27/2009 10:30:49 PAGE 11  

 609   4      				   Write1302(0x8e,0x00); //写入允许
 610   4      				   Write1302(0x80,temp|0x80); //写入新的秒数 
 611   4      				   Write1302(0x8e,0x80); //禁止写入 
 612   4      				   up_flag=0;
 613   4      				   down_flag=0;
 614   4      				   }
 615   3      
 616   3      				   hide_sec++;          //位闪计数 
 617   3      				   if(hide_sec>3)
 618   3      				     hide_sec=0;
 619   3                         show_time();         //液晶显示数据 
 620   3      				  }while(count==2);break;  
 621   2      		  case 2:do					        //count=2,调整分 
 622   2      		          {
 623   3      				   hide_sec=0;
 624   3      				   outkey();
 625   3      				   Upkey();
 626   3      				   Downkey();
 627   3      				   if(temp>0x60)
 628   3      				     temp=0;
 629   3      				   if(up_flag==1||down_flag==1)
 630   3      				   {
 631   4      				   Write1302(0x8e,0x00); //写入允许
 632   4      				   Write1302(0x82,temp); //写入新的分数 
 633   4      				   Write1302(0x8e,0x80); //禁止写入
 634   4      				   up_flag=0;
 635   4      				   down_flag=0;
 636   4      				   }
 637   3      				   hide_min++;
 638   3      				   if(hide_min>3)
 639   3      				     hide_min=0;
 640   3                         show_time();
 641   3      				  }while(count==3);break;
 642   2      		  case 3:do					        //count=3,调整小时
 643   2      		          {
 644   3                         hide_min=0; 
 645   3      				   outkey();
 646   3      				   Upkey();
 647   3      				   Downkey();
 648   3      				   if(up_flag==1||down_flag==1)
 649   3      				   {
 650   4      				   Write1302(0x8e,0x00); //写入允许
 651   4      				   Write1302(0x84,temp); //写入新的小时数
 652   4      				   Write1302(0x8e,0x80); //禁止写入
 653   4      				   up_flag=0;
 654   4      				   down_flag=0;
 655   4      				   }
 656   3      				   hide_hour++;
 657   3      				   if(hide_hour>3)
 658   3      				     hide_hour=0;
 659   3                         show_time();
 660   3      				  }while(count==4);break;
 661   2      		  case 4:do					        //count=4,调整星期
 662   2      		          {
 663   3                         hide_hour=0; 
 664   3      				   outkey();
 665   3      				   Upkey();
 666   3      				   Downkey();
 667   3      				   if(up_flag==1||down_flag==1)
 668   3      				   {
 669   4      				   Write1302(0x8e,0x00); //写入允许
 670   4      				   Write1302(0x8a,temp); //写入新的星期数
C51 COMPILER V6.12  DS1302_____DS18B20                                                     12/27/2009 10:30:49 PAGE 12  

 671   4      				   Write1302(0x8e,0x80); //禁止写入
 672   4      				   up_flag=0;
 673   4      				   down_flag=0;
 674   4      				   }
 675   3      				   hide_week++;
 676   3      				   if(hide_week>3)
 677   3      				     hide_week=0;
 678   3                         show_time();
 679   3      				  }while(count==5);break;
 680   2      		  case 5:do					        //count=5,调整日
 681   2      		          {
 682   3      				   hide_week=0; 
 683   3      				   outkey();
 684   3      				   Upkey();
 685   3      				   Downkey();
 686   3      				   if(up_flag==1||down_flag==1)
 687   3      				   {
 688   4      				   Write1302(0x8e,0x00); //写入允许
 689   4      				   Write1302(0x86,temp); //写入新的日数
 690   4      				   Write1302(0x8e,0x80); //禁止写入
 691   4      				   up_flag=0;
 692   4      				   down_flag=0;
 693   4      				   }
 694   3      				   hide_day++;
 695   3      				   if(hide_day>3)
 696   3      				     hide_day=0;
 697   3                         show_time();
 698   3      				  }while(count==6);break;
 699   2      		  case 6:do					        //count=6,调整月
 700   2      		          {
 701   3                         hide_day=0; 
 702   3      				   outkey();
 703   3      				   Upkey();
 704   3      				   Downkey();
 705   3      				   if(up_flag==1||down_flag==1)
 706   3      				   {
 707   4      				   Write1302(0x8e,0x00); //写入允许
 708   4      				   Write1302(0x88,temp); //写入新的月数
 709   4      				   Write1302(0x8e,0x80); //禁止写入
 710   4      				   up_flag=0;
 711   4      				   down_flag=0;
 712   4      				   }
 713   3      				   hide_month++;
 714   3      				   if(hide_month>3)
 715   3      				     hide_month=0;
 716   3                         show_time();
 717   3      				  }while(count==7);break;
 718   2      		  case 7:do					        //count=7,调整年 
 719   2      		          {
 720   3                         hide_month=0; 
 721   3      				   outkey();
 722   3      				   Upkey();
 723   3      				   Downkey();
 724   3      				   if(up_flag==1||down_flag==1)
 725   3      				   {
 726   4      				   Write1302(0x8e,0x00); //写入允许 
 727   4      				   Write1302(0x8c,temp); //写入新的年数 
 728   4      				   Write1302(0x8e,0x80); //禁止写入 
 729   4      				   up_flag=0; 
 730   4      				   down_flag=0;
 731   4      				   }
 732   3      				   hide_year++;
C51 COMPILER V6.12  DS1302_____DS18B20                                                     12/27/2009 10:30:49 PAGE 13  

 733   3      				   if(hide_year>3)
 734   3      				     hide_year=0;
 735   3                         show_time();
 736   3      				  }while(count==8);break;
 737   2      		  case 8: count=0;hide_year=0;  //count8, 跳出调整模式,返回默认显示状态  
 738   2      	              Second=Read1302(DS1302_SECOND);
 739   2                        Write1302(0x8e,0x00); //写入允许
 740   2      	              Write1302(0x80,Second&0x7f);
 741   2      	              Write1302(0x8E,0x80);          //禁止写入
 742   2      				  done=0;
 743   2      		  break; //count=7,开启中断,标志位置0并退出 
 744   2      		  default:break;
 745   2      
 746   2      		 }
 747   1      
 748   1      }
 749          
 750          
 751          void show_time()   //液晶显示程序 
 752          {
 753   1        DS1302_GetTime(&CurrentTime);  //获取时钟芯片的时间数据 
 754   1        TimeToStr(&CurrentTime);       //时间数据转换液晶字符 
 755   1        DateToStr(&CurrentTime);       //日期数据转换液晶字符 
 756   1        ReadTemp();                    //开启温度采集程序 
 757   1        temp_to_str();                 //温度数据转换成液晶字符 
 758   1        GotoXY(12,1);                  //液晶字符显示位置 
 759   1        Print(TempBuffer);             //显示温度 
 760   1        GotoXY(0,1);
 761   1        Print(CurrentTime.TimeString); //显示时间 
 762   1        GotoXY(0,0);
 763   1        Print(CurrentTime.DateString); //显示日期 
 764   1        GotoXY(15,0);
 765   1        Print(week_value);             //显示星期 
 766   1        GotoXY(11,0);
 767   1        Print("Week");	//在液晶上显示 字母 week 
 768   1        Delay1ms(200);                 //扫描延时 
 769   1      }
 770          
 771          
 772          
 773          main()
 774          {
 775   1          flag=1;           //时钟停止标志 
 776   1      	LCD_Initial();    //液晶初始化
 777   1      	Init_DS18B20( ) ; //DS18B20初始化
 778   1      	Initial_DS1302(); //时钟芯片初始化 
 779   1      	up_flag=0;
 780   1      	down_flag=0;
 781   1      	done=0;           //进入默认液晶显示 
 782   1      	wireless_1=0;
 783   1      	wireless_2=0;
 784   1      	wireless_3=0;
 785   1      	wireless_4=0;
 786   1      	while(1)
 787   1      	{   
 788   2              while(done==1)
 789   2                keydone();    //进入调整模式 
 790   2      		while(done==0)
 791   2       	    {  
 792   3                  show_time();                //液晶显示数据  
 793   3                  flag=0;                  
 794   3        		    Setkey();				 //扫描各功能键   
C51 COMPILER V6.12  DS1302_____DS18B20                                                     12/27/2009 10:30:49 PAGE 14  

 795   3       		}
 796   2      	}
 797   1      }
 798          
 799          
 800          
 801          
 802          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2434    ----
   CONSTANT SIZE    =      5    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     48       5
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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