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

📄 gps.lst

📁 单片机上开发的微妙级GPS时钟
💻 LST
📖 第 1 页 / 共 2 页
字号:
 290   4      				switch(nBcdField)
 291   4      				{
 292   5      					case 0:
 293   5      						nData = 20;
 294   5      						break;
 295   5      					case 1:
 296   5      						nData = Date[0];
 297   5      						break;
 298   5      					case 2:
 299   5      						nData = Date[1];
 300   5      						break;
 301   5      					case 3:
 302   5      						nData = Date[2];
 303   5      						break;
C51 COMPILER V6.14  GPS                                                                    08/21/2002 10:44:35 PAGE 6   

 304   5      					case 4:
 305   5      						nData = Date[0];
 306   5      						break;
 307   5      					case 5:
 308   5      						nData = Date[1];
 309   5      						break;
 310   5      				}
 311   4      				if( nBcdPos < 6 )
 312   4      					nBcdCounter = ((nData/10) & (0x01 << (5 - nBcdPos)))?8:1;
 313   4      				else 
 314   4      					nBcdCounter = ((nData%10) & (0x01 << (9 - nBcdPos)))?8:1;
 315   4      			}
 316   3      			nSecondSign = 0;
 317   3      		}
 318   2      		
 319   2      		if(nCheckKey)
 320   2      		{
 321   3      			Scankeyboad();
 322   3      			nCheckKey = 0;
 323   3      		}
 324   2      	}
 325   1      }
 326          
 327          
 328          void Init(void)
 329          {
 330   1      	CORRECTSIGN = 0;
 331   1      	LOSTSIGN = 1;
 332   1      	nGpsStatus = GPS_LOST; 
 333   1      
 334   1      	Init8279();
 335   1      	InitSerial();
 336   1      
 337   1      	while(nGpsStatus ==GPS_LOST);
 338   1      
 339   1      	InitTime0();
 340   1      	InitTimer2();
 341   1      
 342   1      	// Initlize the extern interrupt source 0
 343   1      	IT0 = 1;		// 设置负跳变引起中断
 344   1      	PX0 = 1;
 345   1      }
 346          
 347          void Init8279(void)
 348          {
 349   1      	COM = 0XD1;
 350   1      	COM = 0x08;
 351   1      	COM = 0X32;
 352   1      }
 353          
 354          void InitSerial(void)
 355          {
 356   1      	SCON  = 0x50;	// SCON: mode 1, 8-bit UART, enable rcvr 
 357   1        	TMOD |= 0x20;	// TMOD: timer 1, mode 2, 8-bit reload 
 358   1        	TH1   = 0xFA;	// TH1:  reload value for 9600 baud 
 359   1        	TR1   = 1;		// TR1:  timer 1 run 
 360   1        	PCON |= 0X80;	// SET THE SMOD 1
 361   1        	TI    = 1;		// TI:   set TI to send first char of UART
 362   1        	EA = 1;
 363   1      	ES = 1;
 364   1      }
 365          
C51 COMPILER V6.14  GPS                                                                    08/21/2002 10:44:35 PAGE 7   

 366          void InitTime0(void)
 367          {
 368   1      	TMOD |= 0X01;
 369   1      	TH0 = -(46080/256);		//	500us
 370   1      	TL0 = -(46080%256);     //
 371   1      	ET0 = 1;
 372   1      	TR0 = 1;
 373   1      }
 374          
 375          void InitTimer2(void)
 376          {
 377   1      	T2CON &= 0xf0;
 378   1      	T2CON |= 0x80;					// Set T2Ex valid
 379   1      	TH2 = -(TIMER2COUNTER/256);		//	50ms
 380   1      	TL2 = -(TIMER2COUNTER%256);    	//
 381   1      	RCAP2H = TH2;
 382   1      	RCAP2L = TL2;
 383   1      	PT2 = 1;
 384   1      	//ET2 = 1;						// open the T						
 385   1      }
 386          
 387          void Scankeyboad()
 388          {
 389   1      	if(COM&0X0F)
 390   1      	{
 391   2      		COM = 0X40;
 392   2      		nInputKey = DAT;
 393   2      		nInputKey = nInputKey&0x3f;
 394   2      	}
 395   1      }
 396          
 397          void OutSign(void)
 398          {
 399   1      	OUTBCD = 1;
 400   1      	if(nMinuteSign)
 401   1      	{
 402   2      		OUTPPMS	= OUTPPML = 1;
 403   2      		nMinuteSign = 0;
 404   2      		if(nHourSign)
 405   2      		{
 406   3      			OUTPPHS = OUTPPHL = 1;
 407   3      			nMinuteSign = 0;
 408   3      		}
 409   2      		nBcdPos = -1;
 410   2      		nBcdField = 0;
 411   2      	}	
 412   1      
 413   1      	nSecondSign = 1;
 414   1      	nSignCounteNum = 0;
 415   1      }
 416          
 417          void ShowLED(void)
 418          {
 419   1      	uchar i;
 420   1      	COM = 0x90;
 421   1      	//if(!nInputKey)
 422   1      	{
 423   2      		for(i = 0; i<16; i++)
 424   2      		{
 425   3      			COM = i+0x80;
 426   3      			switch(i)
 427   3      			{
C51 COMPILER V6.14  GPS                                                                    08/21/2002 10:44:35 PAGE 8   

 428   4      				case 0:
 429   4      					DAT = table[2];
 430   4      					break;
 431   4      				case 1:
 432   4      					DAT = table[0];
 433   4      					break;
 434   4      				case 2:
 435   4      					DAT = table[Date[0]/10];
 436   4      					break;
 437   4      				case 3:
 438   4      					DAT = table[Date[0]%10];
 439   4      					break;
 440   4      				case 4:
 441   4      					DAT = table[Date[1]/10];
 442   4      					break;
 443   4      				case 5:
 444   4      					DAT = table[Date[1]%10];
 445   4      					break;
 446   4      				case 6:
 447   4      					DAT = table[Date[2]/10];
 448   4      					break;
 449   4      				case 7:
 450   4      					DAT = table[Date[2]%10+10];
 451   4      					break;
 452   4      				case 8:
 453   4      					DAT = table[Time[0]/10];
 454   4      					break;
 455   4      				case 9:
 456   4      					DAT = table[Time[0]%10];
 457   4      					break;
 458   4      				case 10:
 459   4      					DAT = 0x40;
 460   4      					break;
 461   4      				case 11:
 462   4      					DAT = table[Time[1]/10];
 463   4      					break;
 464   4      				case 12:
 465   4      					DAT = table[Time[1]%10];
 466   4      					break;
 467   4      				case 13:
 468   4      					DAT = 0x40;
 469   4      					break;
 470   4      				case 14:
 471   4      					DAT = table[Time[2]/10];
 472   4      					break;
 473   4      				case 15:
 474   4      					DAT = table[Time[2]%10];
 475   4      					break;
 476   4      			}
 477   3      	   	}
 478   2      	}
 479   1      /*	else if(!(nInputKey&0x10))
 480   1      	{
 481   1      		for(i = 0; i<7; i++)
 482   1      		{
 483   1      			COM = i+0x80;
 484   1      			DAT = table[led[i]];
 485   1      		}
 486   1      		COM = 7+0x80;
 487   1      		DAT = table[20];
 488   1      		for(i = 8;i<16;i++)
 489   1      		{
C51 COMPILER V6.14  GPS                                                                    08/21/2002 10:44:35 PAGE 9   

 490   1      			COM = i+0x80;
 491   1      			DAT = table[led[i-1]];
 492   1      		}
 493   1      	}
 494   1      	else
 495   1      	{
 496   1      		for(i = 0;i<2;i++)
 497   1      		{
 498   1      			COM = i + 0x80;
 499   1      			DAT = table[Satelite[i]];
 500   1      		}
 501   1      	 	COM = 2 + 0x80;
 502   1      		DAT = table[20];
 503   1      		for(i =3;i<8;i++)
 504   1      		{
 505   1      			COM = i + 0x80;
 506   1      			DAT = table[Satelite[i-1]];
 507   1      		}
 508   1      		for(i = 8;i<16;i++)
 509   1      		{
 510   1      			COM = i + 0x80;
 511   1      			DAT = table[20];
 512   1      		}
 513   1      	}*/
 514   1      }
 515          
 516          //	为了与GPS输出同步输出时间信号,必须计算出下一秒时间和日期
 517          //
 518          void NextSecond(void)
 519          {
 520   1      	if(++Time[2] == 60)
 521   1      	{
 522   2      		Time[2] = 0;
 523   2      		nMinuteSign = 1;
 524   2      		if(++Time[1] == 60)
 525   2      		{
 526   3      			Time[1] = 0;
 527   3      			nHourSign = 1;
 528   3      			if(++Time[0] == 24)
 529   3      			{
 530   4      				Time[0] = 0;
 531   4      				if(++Date[2] == 29 && Date[1] == 2 && (Date[0]%4) ) 
 532   4      				{						
 533   5      					Date[2] = 1;	// 3月1号
 534   5      					Date[1] = 3;
 535   5      				}
 536   4      				else if(Date[2] == 30 && Date[1] == 2 && !(Date[0]%4))
 537   4      				{
 538   5      					Date[2] = 1;
 539   5      					Date[1] = 3;
 540   5      				}
 541   4      				else if(Date[2] == 31)
 542   4      				{
 543   5      					if(Date[1] == 9 || Date[1] == 11 || Date[1] == 2 || 
 544   5      						Date[1] == 4 || Date[1] == 6)
 545   5      					{
 546   6      						Date[2] = 1;
 547   6      						Date[1] ++;
 548   6      					}
 549   5      				}
 550   4      				else if(Date[2] == 32)
 551   4      				{
C51 COMPILER V6.14  GPS                                                                    08/21/2002 10:44:35 PAGE 10  

 552   5      					if( (Date[1] >= 8 && !(Date[1]%2)) ||
 553   5      							(Date[1] <8 && (Date[1]%2)))
 554   5      					{
 555   6      						Date[2] = 1;
 556   6      						if(++Date[1] == 13)
 557   6      						{
 558   7      							Date[1] = 1;
 559   7      							Date[0] ++;
 560   7      						}
 561   6      					}
 562   5      				}
 563   4      			}
 564   3      		}
 565   2      	}
 566   1      }		
 567          
 568          
 569          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1685    ----
   CONSTANT SIZE    =     63    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     57       3
   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 + -