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

📄 ds1302.lst

📁 1302时钟+1820温度+1602显示 keil调试成功
💻 LST
📖 第 1 页 / 共 3 页
字号:
 276   2      	  Time->TimeString[1] = Time->Hour%10 + '0';
 277   2      	}
 278   1      	  else
 279   1      	    {
 280   2      	      Time->TimeString[0] = ' ';
 281   2      	      Time->TimeString[1] = ' ';
 282   2      		}
 283   1      	Time->TimeString[2] = ':';
 284   1          if(hide_min<2)
 285   1      	{
 286   2      	  Time->TimeString[3] = Time->Minute/10 + '0';
 287   2      	  Time->TimeString[4] = Time->Minute%10 + '0';
 288   2      	}
 289   1      	  else
 290   1      	    {
 291   2      	      Time->TimeString[3] = ' ';
 292   2      	      Time->TimeString[4] = ' ';
 293   2         	    }
 294   1      	Time->TimeString[5] = ':';
 295   1          if(hide_sec<2)
 296   1          {
 297   2      	  Time->TimeString[6] = Time->Second/10 + '0';
 298   2      	  Time->TimeString[7] = Time->Second%10 + '0';
 299   2          }
 300   1            else
 301   1             {
C51 COMPILER V6.12  DS1302                                                                 03/12/2009 00:31:59 PAGE 6   

 302   2               Time->TimeString[6] = ' ';
 303   2      	     Time->TimeString[7] = ' ';
 304   2             }
 305   1      	Time->DateString[8] = '\0';
 306   1      }
 307          
 308          
 309          void Initial_DS1302(void)   //时钟芯片初始化
 310          {   
 311   1      	unsigned char Second=Read1302(DS1302_SECOND);
 312   1      //	if(Second&0x80)	      //判断时钟芯片是否关闭	  
 313   1          {
 314   2      	Write1302(0x8e,0x00); //写入允许
 315   2      	Write1302(0x8c,0x09); //以下写入初始化时间 日期:09/01/01.星期: 4. 时间: 00:00:00
 316   2      	Write1302(0x88,0x01);
 317   2      	Write1302(0x86,0x01);
 318   2      	Write1302(0x8a,0x04);
 319   2      	Write1302(0x84,0x00);
 320   2      	Write1302(0x82,0x00);
 321   2      	Write1302(0x80,0x00);
 322   2      	Write1302(0x8e,0x80); //禁止写入
 323   2      	}
 324   1      
 325   1      }
 326          
 327          /***********ds18b20子程序*************************/
 328          
 329          /***********ds18b20延迟子函数(晶振12MHz )*******/ 
 330          
 331          void delay_18B20(unsigned int i)
 332          {
 333   1      	while(i--);
 334   1      }
 335          
 336          /**********ds18b20初始化函数**********************/
 337          
 338          void Init_DS18B20(void) 
 339          {
 340   1      	 unsigned char x=0;
 341   1      	 DQ = 1;          //DQ复位
 342   1      	 delay_18B20(8);  //稍做延时
 343   1      	 DQ = 0;          //单片机将DQ拉低
 344   1      	 delay_18B20(80); //精确延时 大于 480us
 345   1      	 DQ = 1;          //拉高总线
 346   1      	 delay_18B20(14);
 347   1      	 x=DQ;            //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
 348   1      	 delay_18B20(20);
 349   1      }
 350          
 351          /***********ds18b20读一个字节**************/  
 352          
 353          unsigned char ReadOneChar(void)
 354          {
 355   1      	uchar i=0;
 356   1      	uchar dat = 0;
 357   1      	for (i=8;i>0;i--)
 358   1      	 {
 359   2      		  DQ = 0; // 给脉冲信号
 360   2      		  dat>>=1;
 361   2      		  DQ = 1; // 给脉冲信号
 362   2      		  if(DQ)
 363   2      		  dat|=0x80;
C51 COMPILER V6.12  DS1302                                                                 03/12/2009 00:31:59 PAGE 7   

 364   2      		  delay_18B20(4);
 365   2      	 }
 366   1       	return(dat);
 367   1      }
 368          
 369          /*************ds18b20写一个字节****************/  
 370          
 371          void WriteOneChar(uchar dat)
 372          {
 373   1       	unsigned char i=0;
 374   1       	for (i=8; i>0; i--)
 375   1       	{
 376   2        		DQ = 0;
 377   2       		DQ = dat&0x01;
 378   2          	delay_18B20(5);
 379   2       		DQ = 1;
 380   2          	dat>>=1;
 381   2       }
 382   1      }
 383          
 384          /**************读取ds18b20当前温度************/
 385          
 386          void ReadTemp(void)
 387          {
 388   1      	unsigned char a=0;
 389   1      	unsigned char b=0;
 390   1      	unsigned char t=0;
 391   1      
 392   1      	Init_DS18B20();
 393   1      	WriteOneChar(0xCC);    	// 跳过读序号列号的操作
 394   1      	WriteOneChar(0x44); 	// 启动温度转换
 395   1      
 396   1      	delay_18B20(100);       // this message is wery important
 397   1      
 398   1      	Init_DS18B20();
 399   1      	WriteOneChar(0xCC); 	//跳过读序号列号的操作
 400   1      	WriteOneChar(0xBE); 	//读取温度寄存器等(共可读9个寄存器) 前两个就是温度
 401   1      
 402   1      	delay_18B20(100);
 403   1      
 404   1      	a=ReadOneChar();    	//读取温度值低位
 405   1      	b=ReadOneChar();   		//读取温度值高位
 406   1      	temp_value=b<<4;
 407   1      	temp_value+=(a&0xf0)>>4;               
 408   1      }
 409          void temp_to_str()   //温度数据转换成液晶字符显示
 410          {
 411   1        TempBuffer[0]=temp_value/10+'0';  //十位
 412   1        TempBuffer[1]=temp_value%10+'0';  //个位
 413   1        TempBuffer[2]=0xdf;   //温度符号
 414   1        TempBuffer[3]='C';
 415   1        TempBuffer[4]='\0';
 416   1      }
 417          void Delay1ms(unsigned int count)
 418          {
 419   1      	unsigned int i,j;
 420   1      	for(i=0;i<count;i++)
 421   1      	for(j=0;j<120;j++);
 422   1      }
 423          
 424          /*延时子程序*/
 425          void mdelay(uint delay)
C51 COMPILER V6.12  DS1302                                                                 03/12/2009 00:31:59 PAGE 8   

 426          {	uint i;
 427   1       	for(;delay>0;delay--)
 428   1         		{for(i=0;i<62;i++) //1ms延时.
 429   2             		{;}
 430   2         		}
 431   1      }
 432          
 433          
 434          void outkey()                    //跳出调整模式,返回默认显示
 435          { uchar Second;
 436   1        if(out==0)  //||wireless_1==1         
 437   1        { mdelay(8); 
 438   2      	count=0;
 439   2      	hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year=0;
 440   2      	Second=Read1302(DS1302_SECOND);
 441   2          Write1302(0x8e,0x00); //写入允许
 442   2      	Write1302(0x80,Second&0x7f);
 443   2      	Write1302(0x8E,0x80);          //禁止写入
 444   2      	done=0;           
 445   2      	while(out==0);
 446   2      //	while(wireless_1==1);
 447   2        }
 448   1      }
 449          //////////////////////////////////////////////////////////////////////////////////////////////////////////
             -//
 450          void Upkey()//升序按键
 451          {	   
 452   1      		Up=1;
 453   1      		if(Up==0)//||wireless_2==1
 454   1      		          {
 455   2      				   mdelay(8);
 456   2      				       switch(count)
 457   2      				          {case 1:
 458   3                                        temp=Read1302(DS1302_SECOND);  //读取秒数
 459   3      								  temp=temp+1;  //秒数加1
 460   3                                        up_flag=1;    //数据调整后更新标志
 461   3      								  if((temp&0x7f)>0x59)   //超过59秒,清零 
 462   3                                        temp=0;								  
 463   3      								  break;
 464   3      				           case 2:
 465   3                                        temp=Read1302(DS1302_MINUTE);  //读取分数
 466   3      								  temp=temp+1;  //分数加1
 467   3                                        up_flag=1;
 468   3      								  if(temp>0x59)          //超过59分,清零
 469   3      								  temp=0;
 470   3      								  break;
 471   3      				           case 3:
 472   3                                        temp=Read1302(DS1302_HOUR);  //读取小时数
 473   3      								  temp=temp+1;  //小时数加1
 474   3                                        up_flag=1;
 475   3      								  if(temp>0x23)   //超过23小时,清零
 476   3      								  temp=0;
 477   3      								  break;
 478   3      				           case 4:
 479   3                                        temp=Read1302(DS1302_WEEK);  //读取星期数
 480   3      								  temp=temp+1;  //星期数加1
 481   3                                        up_flag=1;
 482   3      								  if(temp>0x7)  
 483   3      								  temp=1;
 484   3      								  break;
 485   3      				           case 5:
 486   3                                        temp=Read1302(DS1302_DAY);  //读取日数
C51 COMPILER V6.12  DS1302                                                                 03/12/2009 00:31:59 PAGE 9   

 487   3      								  temp=temp+1;  //日数加1
 488   3                                        up_flag=1;
 489   3      								  if(temp>0x31)
 490   3      								  temp=1;
 491   3      								  break;
 492   3      				           case 6:
 493   3                                        temp=Read1302(DS1302_MONTH);  //读取月数
 494   3      								  temp=temp+1;  //月数加1
 495   3                                        up_flag=1;
 496   3      								  if(temp>0x12)
 497   3      								  temp=1;
 498   3      								  break;
 499   3      				           case 7:
 500   3                                        temp=Read1302(DS1302_YEAR);  //读取年数
 501   3      								  temp=temp+1;  //年数加1
 502   3                                        up_flag=1;
 503   3      								  if(temp>0x85)
 504   3      								  temp=0;
 505   3      								  break;
 506   3      					       default:break;
 507   3      				          }
 508   2      					  
 509   2      				   while(Up==0);
 510   2      	               //while(wireless_2==1);
 511   2      				  }
 512   1      }
 513          
 514          //////////////////////////////////////////////////////////////////////////////////////////////////////////
             -//
 515          void Downkey()//降序按键
 516          {	    
 517   1      		Down=1;
 518   1      	    if(Down==0)   //||wireless_3==1
 519   1      		          {
 520   2      				   mdelay(8);
 521   2      				     switch(count)
 522   2      				          {case 1:
 523   3                                        temp=Read1302(DS1302_SECOND);  //读取秒数
 524   3      								  temp=temp-1;						    //秒数减1
 525   3                                        down_flag=1;       //数据调整后更新标志
 526   3      								  if(temp==0x7f)     //小于0秒,返回59秒
 527   3      								  temp=0x59;
 528   3      								  break;
 529   3      				           case 2:
 530   3                                        temp=Read1302(DS1302_MINUTE);  //读取分数
 531   3      								  temp=temp-1;  //分数减1
 532   3                                        down_flag=1;
 533   3      								  if(temp==-1)
 534   3      								  temp=0x59;      //小于0秒,返回59秒
 535   3      								  break;
 536   3      				           case 3:
 537   3                                        temp=Read1302(DS1302_HOUR);  //读取小时数
 538   3      								  temp=temp-1;  //小时数减1
 539   3                                        down_flag=1;
 540   3      								  if(temp==-1)
 541   3      								  temp=0x23;
 542   3      								  break;
 543   3      				           case 4:
 544   3                                        temp=Read1302(DS1302_WEEK);  //读取星期数
 545   3      								  temp=temp-1;  //星期数减1
 546   3                                        down_flag=1;
 547   3      								  if(temp==0)
C51 COMPILER V6.12  DS1302                                                                 03/12/2009 00:31:59 PAGE 10  

 548   3      								  temp=0x7;;
 549   3      								  break;
 550   3      				           case 5:
 551   3                                        temp=Read1302(DS1302_DAY);  //读取日数
 552   3      								  temp=temp-1;  //日数减1
 553   3                                        down_flag=1;
 554   3      								  if(temp==0)
 555   3      								  temp=31;
 556   3      								  break;
 557   3      				           case 6:

⌨️ 快捷键说明

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