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

📄 ds1302.lst

📁 EDN板子做的1602显示时钟 温度
💻 LST
📖 第 1 页 / 共 3 页
字号:
 588   3      								  temp=temp-1;  //月数减1
 589   3                                        down_flag=1;
 590   3      								  if(temp==0)
 591   3      								  temp=12;
 592   3      								  temp=temp/10*16+temp%10;
 593   3      								  break;
 594   3      				           case 7:
 595   3                                        temp=Read1302(DS1302_YEAR);  //读取年数
 596   3      								  temp=((temp&0xf0)>>4)*10 + (temp&0x0F);
 597   3      								  temp=temp-1;  //年数减1
 598   3                                        down_flag=1;
 599   3      								  if(temp==-1)
 600   3      								  temp=99;
 601   3      								  temp=temp/10*16+temp%10;
 602   3      								  break;
 603   3      					      default:break;
 604   3      				         }
 605   2      					 
 606   2      				 //  while(Down==0);
 607   2      				  }
 608   1      }
 609          
C51 COMPILER V6.12  DS1302                                                                 09/29/2007 14:54:24 PAGE 11  

 610          //**************************
 611          //模式选择按键
 612          //**************************
 613          void Setkey()
 614          {
 615   1      		Set=1;
 616   1      		if(Set==0)
 617   1      	    {
 618   2                 mdelay(5);
 619   2                 count=count+1;	 //Setkey按一次,count就加1
 620   2      		   done=1;			 //进入调整模式
 621   2                 while(Set==0);
 622   2      		 }
 623   1      
 624   1      }
 625          
 626          //*************************
 627          //按键功能执行
 628          //*************************
 629          void keydone()
 630          {        uchar Second;
 631   1      		/* if(flag==0)    //关闭时钟,停止计时
 632   1               { Write1302(0x8e,0x00); //写入允许
 633   1                 temp=Read1302(0x80);
 634   1                 Write1302(0x80,temp|0x80);
 635   1      	       Write1302(0x8e,0x80); //禁止写入
 636   1                 flag=1;
 637   1               }*/
 638   1               Setkey();				            //扫描模式切换按键
 639   1      		 switch(count)
 640   1      		 {case 1:do					        //count=1,调整秒
 641   2      		          {
 642   3                         
 643   3                         outkey();			   //扫描跳出按钮
 644   3      				   Upkey();                //扫描加按钮
 645   3      				   Downkey();              //扫描减按钮
 646   3      				   if(up_flag==1||down_flag==1)  //数据更新,重新写入新的数据
 647   3      				   {
 648   4      				     Write1302(0x8e,0x00); //写入允许
 649   4      				     Write1302(0x80,temp); //写入新的秒数
 650   4      				     Write1302(0x8e,0x80); //禁止写入
 651   4      				     up_flag=0;
 652   4      			    	 down_flag=0;
 653   4      				  }
 654   3                           if(Down!=0&&Up!=0)
 655   3                           {
 656   4      						hide_sec++;
 657   4      				        if(hide_sec>3)
 658   4      				        hide_sec=0;
 659   4                           }
 660   3      					 else hide_sec=0;
 661   3      					 show_time();         //液晶显示数据
 662   3      				  }while(count==2);break;  
 663   2      		  case 2:do					        //count=2,调整分
 664   2      		          {
 665   3      				   hide_sec=0;
 666   3      				   outkey();
 667   3      				   Upkey();
 668   3      				   Downkey();
 669   3      				   if(temp>0x60)
 670   3      				     temp=0;
 671   3      				   if(up_flag==1||down_flag==1)
C51 COMPILER V6.12  DS1302                                                                 09/29/2007 14:54:24 PAGE 12  

 672   3      				   {
 673   4      				     Write1302(0x8e,0x00); //写入允许
 674   4      				     Write1302(0x82,temp); //写入新的分数
 675   4      				     Write1302(0x8e,0x80); //禁止写入
 676   4      				     up_flag=0;
 677   4      				     down_flag=0;
 678   4      				  }
 679   3                           if(Down!=0&&Up!=0)
 680   3                           {
 681   4      						hide_min++;
 682   4      				        if(hide_min>3)
 683   4      				        hide_min=0;
 684   4                           }
 685   3      					 else hide_min=0;
 686   3      					 show_time();
 687   3      				  }while(count==3);break;
 688   2      		  case 3:do					        //count=3,调整小时
 689   2      		          {
 690   3                         hide_min=0; 
 691   3      				   outkey();
 692   3      				   Upkey();
 693   3      				   Downkey();
 694   3      				   if(up_flag==1||down_flag==1)
 695   3      				   {
 696   4      				      Write1302(0x8e,0x00); //写入允许
 697   4      				      Write1302(0x84,temp); //写入新的小时数
 698   4      				      Write1302(0x8e,0x80); //禁止写入
 699   4      				      up_flag=0;
 700   4      				      down_flag=0;
 701   4      				   }
 702   3                            if(Down!=0&&Up!=0)
 703   3                           {
 704   4      						hide_hour++;
 705   4      				        if(hide_hour>3)
 706   4      				        hide_hour=0;
 707   4                           }
 708   3      					 else  hide_hour=0;
 709   3      					  show_time();
 710   3      				  }while(count==4);break;
 711   2      		  case 4:do					        //count=4,调整星期
 712   2      		          {
 713   3                         hide_hour=0; 
 714   3      				   outkey();
 715   3      				   Upkey();
 716   3      				   Downkey();
 717   3      				   if(up_flag==1||down_flag==1)
 718   3      				   {
 719   4      				     Write1302(0x8e,0x00); //写入允许
 720   4      				     Write1302(0x8a,temp); //写入新的星期数
 721   4      				     Write1302(0x8e,0x80); //禁止写入
 722   4      				     up_flag=0;
 723   4      				     down_flag=0;
 724   4      				   }
 725   3                           if(Down!=0&&Up!=0)
 726   3                           {
 727   4      					   hide_week++;
 728   4      				       if(hide_week>3)
 729   4      				       hide_week=0;
 730   4                           }
 731   3      					 else hide_week=0;
 732   3      					 show_time();
 733   3      				  }while(count==5);break;
C51 COMPILER V6.12  DS1302                                                                 09/29/2007 14:54:24 PAGE 13  

 734   2      		  case 5:do					        //count=5,调整日
 735   2      		          {
 736   3      				   hide_week=0; 
 737   3      				   outkey();
 738   3      				   Upkey();
 739   3      				   Downkey();
 740   3      				   if(up_flag==1||down_flag==1)
 741   3      				   {
 742   4      				     Write1302(0x8e,0x00); //写入允许
 743   4      				     Write1302(0x86,temp); //写入新的日数
 744   4      				     Write1302(0x8e,0x80); //禁止写入
 745   4      				     up_flag=0;
 746   4      				     down_flag=0;
 747   4      				   }
 748   3                           if(Down!=0&&Up!=0)
 749   3      				     {
 750   4      						hide_day++;
 751   4      				        if(hide_day>3)
 752   4      				        hide_day=0;
 753   4      					 }
 754   3      				    else hide_day=0;
 755   3                           show_time();
 756   3      				  }while(count==6);break;
 757   2      		  case 6:do					        //count=6,调整月
 758   2      		          {
 759   3                         hide_day=0; 
 760   3      				   outkey();
 761   3      				   Upkey();
 762   3      				   Downkey();
 763   3      				   if(up_flag==1||down_flag==1)
 764   3      				   {
 765   4      				      Write1302(0x8e,0x00); //写入允许
 766   4      				      Write1302(0x88,temp); //写入新的月数
 767   4      				      Write1302(0x8e,0x80); //禁止写入
 768   4      				      up_flag=0;
 769   4      				      down_flag=0;
 770   4      				   }
 771   3                           if(Down!=0&&Up!=0)
 772   3      				     {
 773   4      						 hide_month++;
 774   4      				         if(hide_month>3)
 775   4      				         hide_month=0;
 776   4      					 }
 777   3      					else hide_month=0;
 778   3                           show_time();
 779   3      				  }while(count==7);break;
 780   2      		  case 7:do					        //count=7,调整年
 781   2      		          {
 782   3                         hide_month=0; 
 783   3      				   outkey();
 784   3      				   Upkey();
 785   3      				   Downkey();
 786   3      				   if(up_flag==1||down_flag==1)
 787   3      				   {
 788   4      				      Write1302(0x8e,0x00); //写入允许
 789   4      				      Write1302(0x8c,temp); //写入新的年数
 790   4      				      Write1302(0x8e,0x80); //禁止写入
 791   4      				      up_flag=0;
 792   4      				      down_flag=0;
 793   4      				  }
 794   3                            if(Down!=0&&Up!=0)
 795   3      				      {
C51 COMPILER V6.12  DS1302                                                                 09/29/2007 14:54:24 PAGE 14  

 796   4      					 	 hide_year++;
 797   4      				         if(hide_year>3)
 798   4      				         hide_year=0;
 799   4                            }
 800   3      					  else hide_year=0;
 801   3                            show_time();
 802   3      				  }while(count==8);break;
 803   2      		  case 8: count=0;hide_year=0;  //count8, 跳出调整模式,返回默认显示状态
 804   2      	              Second=Read1302(DS1302_SECOND);
 805   2                        Write1302(0x8e,0x00); //写入允许
 806   2      	              Write1302(0x80,Second&0x7f);
 807   2      	              Write1302(0x8E,0x80);          //禁止写入
 808   2      				  done=0;
 809   2      		  break; //count=7,开启中断,标志位置0并退出
 810   2      		  default:break;
 811   2      
 812   2      		 }
 813   1      
 814   1      }
 815          
 816          
 817          
 818          
 819          
 820          void show_time()   //液晶显示程序
 821          {
 822   1        DS1302_GetTime(&CurrentTime);  //获取时钟芯片的时间数据
 823   1        TimeToStr(&CurrentTime);       //时间数据转换液晶字符
 824   1        DateToStr(&CurrentTime);       //日期数据转换液晶字符
 825   1        ReadTemp();                    //开启温度采集程序
 826   1        temp_to_str();                 //温度数据转换成液晶字符
 827   1        GotoXY(10,1);                  //液晶字符显示位置
 828   1        Print(TempBuffer);             //显示温度
 829   1        GotoXY(0,1);
 830   1        Print(CurrentTime.TimeString); //显示时间
 831   1        GotoXY(0,0);
 832   1        Print(CurrentTime.DateString); //显示日期
 833   1        GotoXY(15,0);
 834   1        Print(week_value);             //显示星期
 835   1        GotoXY(11,0);
 836   1        Print("Week");	//在液晶上显示 字母 week
 837   1        mdelay(400);                 //扫描延时
 838   1      }
 839          
 840          
 841          
 842          main()
 843          {
 844   1          flag=1;           //时钟停止标志
 845   1      	LCD_Initial();    //液晶初始化
 846   1      	Init_DS18B20( ) ;      //DS18B20初始化
 847   1      	Initial_DS1302(); //时钟芯片初始化
 848   1      	up_flag=0;
 849   1      	down_flag=0;
 850   1      	done=0;           //进入默认液晶显示
 851   1      //	wireless_1=0;
 852   1      //	wireless_2=0;
 853   1      //	wireless_3=0;
 854   1      //	wireless_4=0;
 855   1      	while(1)
 856   1      	{   
 857   2              while(done==1)
C51 COMPILER V6.12  DS1302                                                                 09/29/2007 14:54:24 PAGE 15  

 858   2                keydone();    //进入调整模式
 859   2      		while(done==0)
 860   2       	    {  
 861   3                  show_time();                //液晶显示数据
 862   3                  flag=0;                  
 863   3        		    Setkey();				 //扫描各功能键
 864   3       		}
 865   2      	}
 866   1      }
 867          
 868          
 869          
 870          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   3189    ----
   CONSTANT SIZE    =      5    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     49       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 + -