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

📄 ds1302.lst

📁 1302时钟+1820温度+1602显示 keil调试成功
💻 LST
📖 第 1 页 / 共 3 页
字号:
 558   3                                        temp=Read1302(DS1302_MONTH);  //读取月数
 559   3      								  temp=temp-1;  //月数减1
 560   3                                        down_flag=1;
 561   3      								  if(temp==0)
 562   3      								  temp=12;
 563   3      								  break;
 564   3      				           case 7:
 565   3                                        temp=Read1302(DS1302_YEAR);  //读取年数
 566   3      								  temp=temp-1;  //年数减1
 567   3                                        down_flag=1;
 568   3      								  if(temp==-1)
 569   3      								  temp=0x85;
 570   3      								  break;
 571   3      					      default:break;
 572   3      				         }
 573   2      					 
 574   2      				   while(Down==0);
 575   2      				 //  while(wireless_3==1);
 576   2      				  }
 577   1      }
 578          
 579          void Setkey()//模式选择按键
 580          {
 581   1      		Set=1;
 582   1      		if(Set==0)  //||wireless_4==1
 583   1      	    {
 584   2                 mdelay(8);
 585   2                 count=count+1;	 //Setkey按一次,count就加1
 586   2      		   done=1;			 //进入调整模式
 587   2                 while(Set==0);
 588   2                // while(wireless_4==1);
 589   2      		 }
 590   1      
 591   1      }
 592          
 593          //以下为键盘处理子程序:
 594          	uchar getkey(void)
 595          	{
 596   1      		uchar x;
 597   1      		P1=P1|0x07;  //I/O1至I/O3写"1"
 598   1      		x=P1&0x07;    //读入I/O1至I/O3并屏蔽其它位
 599   1      		if(x==10)
 600   1      		{
 601   2      				P1=P1|0x07;
 602   2      				P1=P1&0x0d;  //I/O2写"0"
 603   2      				x=P1&0x07;
 604   2      				x=(x+1)/2+10; //屏蔽I/O2并转换K10至K12的键值
 605   2      				if(x==13)
 606   2      				{
 607   3      					P1=P1|0x07;
 608   3      					P1=P1&0xfb;   //I/O3写"0"
 609   3      					x=P1&0x07;
C51 COMPILER V6.12  DS1302                                                                 03/12/2009 00:31:59 PAGE 11  

 610   3      					x=x+13;      //屏蔽I/O3并转换K13至K15的键值
 611   3      				}
 612   2      		}
 613   1      	
 614   1      	return x;
 615   1      	}
 616          
 617          
 618          void keydone()//按键功能执行
 619          {        uchar Second;
 620   1      		 if(flag==0)    //关闭时钟,停止计时
 621   1               { Write1302(0x8e,0x00); //写入允许
 622   2                 temp=Read1302(0x80);
 623   2                 Write1302(0x80,temp|0x80);
 624   2      	       Write1302(0x8e,0x80); //禁止写入
 625   2                 flag=1;
 626   2               }
 627   1               Setkey();				            //扫描模式切换按键
 628   1      		 switch(count)
 629   1      		 {case 1:do					        //count=1,调整秒
 630   2      		          {
 631   3                         outkey();			   //扫描跳出按钮
 632   3      				   Upkey();                //扫描加按钮
 633   3      				   Downkey();              //扫描减按钮
 634   3      				   if(up_flag==1||down_flag==1)  //数据更新,重新写入新的数据
 635   3      				   {
 636   4      				   Write1302(0x8e,0x00); //写入允许
 637   4      				   Write1302(0x80,temp|0x80); //写入新的秒数
 638   4      				   Write1302(0x8e,0x80); //禁止写入
 639   4      				   up_flag=0;
 640   4      				   down_flag=0;
 641   4      				   }
 642   3      
 643   3      				   hide_sec++;          //位闪计数
 644   3      				   if(hide_sec>3)
 645   3      				     hide_sec=0;
 646   3                         show_time();         //液晶显示数据
 647   3      				  }while(count==2);break;  
 648   2      		  case 2:do					        //count=2,调整分
 649   2      		          {
 650   3      				   hide_sec=0;
 651   3      				   outkey();
 652   3      				   Upkey();
 653   3      				   Downkey();
 654   3      				   if(temp>0x60)
 655   3      				     temp=0;
 656   3      				   if(up_flag==1||down_flag==1)
 657   3      				   {
 658   4      				   Write1302(0x8e,0x00); //写入允许
 659   4      				   Write1302(0x82,temp); //写入新的分数
 660   4      				   Write1302(0x8e,0x80); //禁止写入
 661   4      				   up_flag=0;
 662   4      				   down_flag=0;
 663   4      				   }
 664   3      				   hide_min++;
 665   3      				   if(hide_min>3)
 666   3      				     hide_min=0;
 667   3                         show_time();
 668   3      				  }while(count==3);break;
 669   2      		  case 3:do					        //count=3,调整小时
 670   2      		          {
 671   3                         hide_min=0; 
C51 COMPILER V6.12  DS1302                                                                 03/12/2009 00:31:59 PAGE 12  

 672   3      				   outkey();
 673   3      				   Upkey();
 674   3      				   Downkey();
 675   3      				   if(up_flag==1||down_flag==1)
 676   3      				   {
 677   4      				   Write1302(0x8e,0x00); //写入允许
 678   4      				   Write1302(0x84,temp); //写入新的小时数
 679   4      				   Write1302(0x8e,0x80); //禁止写入
 680   4      				   up_flag=0;
 681   4      				   down_flag=0;
 682   4      				   }
 683   3      				   hide_hour++;
 684   3      				   if(hide_hour>3)
 685   3      				     hide_hour=0;
 686   3                         show_time();
 687   3      				  }while(count==4);break;
 688   2      		  case 4:do					        //count=4,调整星期
 689   2      		          {
 690   3                         hide_hour=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(0x8a,temp); //写入新的星期数
 698   4      				   Write1302(0x8e,0x80); //禁止写入
 699   4      				   up_flag=0;
 700   4      				   down_flag=0;
 701   4      				   }
 702   3      				   hide_week++;
 703   3      				   if(hide_week>3)
 704   3      				     hide_week=0;
 705   3                         show_time();
 706   3      				  }while(count==5);break;
 707   2      		  case 5:do					        //count=5,调整日
 708   2      		          {
 709   3      				   hide_week=0; 
 710   3      				   outkey();
 711   3      				   Upkey();
 712   3      				   Downkey();
 713   3      				   if(up_flag==1||down_flag==1)
 714   3      				   {
 715   4      				   Write1302(0x8e,0x00); //写入允许
 716   4      				   Write1302(0x86,temp); //写入新的日数
 717   4      				   Write1302(0x8e,0x80); //禁止写入
 718   4      				   up_flag=0;
 719   4      				   down_flag=0;
 720   4      				   }
 721   3      				   hide_day++;
 722   3      				   if(hide_day>3)
 723   3      				     hide_day=0;
 724   3                         show_time();
 725   3      				  }while(count==6);break;
 726   2      		  case 6:do					        //count=6,调整月
 727   2      		          {
 728   3                         hide_day=0; 
 729   3      				   outkey();
 730   3      				   Upkey();
 731   3      				   Downkey();
 732   3      				   if(up_flag==1||down_flag==1)
 733   3      				   {
C51 COMPILER V6.12  DS1302                                                                 03/12/2009 00:31:59 PAGE 13  

 734   4      				   Write1302(0x8e,0x00); //写入允许
 735   4      				   Write1302(0x88,temp); //写入新的月数
 736   4      				   Write1302(0x8e,0x80); //禁止写入
 737   4      				   up_flag=0;
 738   4      				   down_flag=0;
 739   4      				   }
 740   3      				   hide_month++;
 741   3      				   if(hide_month>3)
 742   3      				     hide_month=0;
 743   3                         show_time();
 744   3      				  }while(count==7);break;
 745   2      		  case 7:do					        //count=7,调整年
 746   2      		          {
 747   3                         hide_month=0; 
 748   3      				   outkey();
 749   3      				   Upkey();
 750   3      				   Downkey();
 751   3      				   if(up_flag==1||down_flag==1)
 752   3      				   {
 753   4      				   Write1302(0x8e,0x00); //写入允许
 754   4      				   Write1302(0x8c,temp); //写入新的年数
 755   4      				   Write1302(0x8e,0x80); //禁止写入
 756   4      				   up_flag=0;
 757   4      				   down_flag=0;
 758   4      				   }
 759   3      				   hide_year++;
 760   3      				   if(hide_year>3)
 761   3      				     hide_year=0;
 762   3                         show_time();
 763   3      				  }while(count==8);break;
 764   2      		  case 8: count=0;hide_year=0;  //count8, 跳出调整模式,返回默认显示状态
 765   2      	              Second=Read1302(DS1302_SECOND);
 766   2                        Write1302(0x8e,0x00); //写入允许
 767   2      	              Write1302(0x80,Second&0x7f);
 768   2      	              Write1302(0x8E,0x80);          //禁止写入
 769   2      				  done=0;
 770   2      		  break; //count=7,开启中断,标志位置0并退出
 771   2      		  default:break;
 772   2      
 773   2      		 }
 774   1      
 775   1      }
 776          
 777          
 778          void show_time()   //液晶显示程序
 779          {
 780   1        DS1302_GetTime(&CurrentTime);  //获取时钟芯片的时间数据
 781   1        TimeToStr(&CurrentTime);       //时间数据转换液晶字符
 782   1        DateToStr(&CurrentTime);       //日期数据转换液晶字符
 783   1        ReadTemp();                    //开启温度采集程序
 784   1        temp_to_str();                 //温度数据转换成液晶字符
 785   1        GotoXY(12,1);                  //液晶字符显示位置
 786   1        Print(TempBuffer);             //显示温度
 787   1        GotoXY(0,1);
 788   1        Print(CurrentTime.TimeString); //显示时间
 789   1        GotoXY(0,0);
 790   1        Print(CurrentTime.DateString); //显示日期
 791   1        GotoXY(15,0);
 792   1        Print(week_value);             //显示星期
 793   1        GotoXY(11,0);
 794   1        Print("Week");	//在液晶上显示 字母 week
 795   1        Delay1ms(400);                 //扫描延时
C51 COMPILER V6.12  DS1302                                                                 03/12/2009 00:31:59 PAGE 14  

 796   1      }
 797          
 798          
 799          
 800          void main()
 801          {
 802   1          flag=1;           //时钟停止标志
 803   1      	LCD_Initial();    //液晶初始化
 804   1      	Init_DS18B20( ) ;      //DS18B20初始化
 805   1      	Initial_DS1302(); //时钟芯片初始化
 806   1      	up_flag=0;
 807   1      	down_flag=0;
 808   1      	done=0;           //进入默认液晶显示
 809   1      //	wireless_1=0;
 810   1      //	wireless_2=0;
 811   1      //	wireless_3=0;
 812   1      //	wireless_4=0;
 813   1      	while(1)
 814   1      	{   
 815   2              while(done==1)
 816   2                keydone();    //进入调整模式
 817   2      		while(done==0)
 818   2       	    {  
 819   3                  show_time();                //液晶显示数据
 820   3                  flag=0;                  
 821   3        		    Setkey();				 //扫描各功能键
 822   3       		}
 823   2      	}
 824   1      }
 825          
 826          
 827          
 828          


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