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

📄 main.c

📁 本人在DSP BF533上开发的控制GPS的程序
💻 C
字号:
//*******  2006.07.26 完成参数分离及计算  ********//

#include "system.h"

uchar GPS_GPRMC_init[5] = "GPRMC";
uchar GPS_GPRMC_check[5];
uchar GPS_GPRMC_data[70];
uchar GPS_GPRMC_compare=0; //用于记录check和init对应字节相同的个数,若为5则是所需的数据

uchar GPS_PFST[10]="$PFST,NMEA";
uchar GPS_PFST_receive[40];

struct GPS_GPRMC myGPS_GPRMC_data;
struct GPS_GPRMC_Buffer myGPRMC_Buffer;

void main()
{
	uchar data;
	uchar i;
	ushort gps_speed;
	bool GPS_end=1;
	unsigned short j=0;
	unsigned char  aa=0;
	
	
	Init_PLL();
//	Init_SDRAM();
	Init_EBIU();
	Init_UART();
//	Init_Interrupts();

	while(1)
	{
		if (*pUART_LSR & 0x0001)
		{
			data = *pUART_RBR;
			if (data == 0x24)	//若收到 $ ,则开始校验命令
			{
				GPS_GPRMC_compare = 0;
				for( i=0 ; i<5 ; i++ )
				{
					while( !(*pUART_LSR & 0x0001) ) ;
					GPS_GPRMC_check[i] = *pUART_RBR;
					if( GPS_GPRMC_check[i] == GPS_GPRMC_init[i] ) GPS_GPRMC_compare++;
				}
				if( GPS_GPRMC_compare==5 )	//若命令匹配则读取数据
				{
					i=0;j=0;
					GPS_end = 1;
					
					do
					{
						while( !(*pUART_LSR & 0x0001) ) ;
						data = *pUART_RBR;
						if( data == 0x2c ) { j++; i=0;}	//以逗号为标记,分离数据
						else 
						{
							switch (j)
							{
								case 1:myGPRMC_Buffer.time[i++] = data;break;	//提取时间
								case 3:myGPRMC_Buffer.Latitude[i++] = data;break;	//提取纬度
								case 5:myGPRMC_Buffer.Longitude[i++] = data;break;//提取经度
								case 7:myGPRMC_Buffer.Speed[i++] = data;break;	//提取速度
								case 9:myGPRMC_Buffer.date[i++] = data;break;	//提取日期
								default: break;
							}
						}
						if( data == 0xd ) GPS_end = 0;
						
					}while( GPS_end );
					
					i=0;
					
					//计算时间
					myGPS_GPRMC_data.hour   = (myGPRMC_Buffer.time[i]  -0x30)*10 + (myGPRMC_Buffer.time[i+1]-0x30);
					myGPS_GPRMC_data.minute = (myGPRMC_Buffer.time[i+2]-0x30)*10 + (myGPRMC_Buffer.time[i+3]-0x30);
					myGPS_GPRMC_data.second = (myGPRMC_Buffer.time[i+4]-0x30)*10 + (myGPRMC_Buffer.time[i+5]-0x30);
					//计算日期
					myGPS_GPRMC_data.day    = (myGPRMC_Buffer.date[i]  -0x30)*10 + (myGPRMC_Buffer.date[i+1]-0x30);
					myGPS_GPRMC_data.month  = (myGPRMC_Buffer.date[i+2]-0x30)*10 + (myGPRMC_Buffer.date[i+3]-0x30);
					myGPS_GPRMC_data.year   = (myGPRMC_Buffer.date[i+4]-0x30)*10 + (myGPRMC_Buffer.date[i+5]-0x30);
					//计算纬度
					myGPS_GPRMC_data.Lat    	= (myGPRMC_Buffer.Latitude[i]   -0x30)*10 + (myGPRMC_Buffer.Latitude[i+1]-0x30);
					myGPS_GPRMC_data.Lat_minute = (myGPRMC_Buffer.Latitude[i+2] -0x30)*10 + (myGPRMC_Buffer.Latitude[i+3]-0x30);
					myGPS_GPRMC_data.Lat_dec	= (myGPRMC_Buffer.Latitude[i+5] -0x30)*1000 + (myGPRMC_Buffer.Latitude[i+6]-0x30)*100 + (myGPRMC_Buffer.Latitude[i+7] -0x30)*10 + (myGPRMC_Buffer.Latitude[i+8]-0x30);
					//计算经度
					myGPS_GPRMC_data.Long    	= (myGPRMC_Buffer.Longitude[i]   -0x30)*100 + (myGPRMC_Buffer.Longitude[i+1]-0x30)*10+(myGPRMC_Buffer.Longitude[i+2]-0x30);
					myGPS_GPRMC_data.Long_minute= (myGPRMC_Buffer.Longitude[i+3] -0x30)*10  + (myGPRMC_Buffer.Longitude[i+4]-0x30);
					myGPS_GPRMC_data.Long_dec	= (myGPRMC_Buffer.Longitude[i+6] -0x30)*1000 + (myGPRMC_Buffer.Longitude[i+7]-0x30)*100 + (myGPRMC_Buffer.Longitude[i+8] -0x30)*10 + (myGPRMC_Buffer.Longitude[i+9]-0x30);
					//计算速度
					gps_speed = 0;
					while( myGPRMC_Buffer.Speed[i] != 0x2e )
					{
						gps_speed = gps_speed*10 + (myGPRMC_Buffer.Speed[i++]-0x30);
					}
					myGPS_GPRMC_data.Speed_int = gps_speed;
					myGPS_GPRMC_data.Speed_dec = (myGPRMC_Buffer.Speed[i+1]  -0x30)*100 + (myGPRMC_Buffer.Speed[i+2]-0x30)*10 + (myGPRMC_Buffer.Speed[i+3]-0x30);
					
					i=0;	
					
					
				}
				
			}
		}
	
		
	}
}

⌨️ 快捷键说明

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