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

📄 main.c

📁 这是一个基于凌阳单片机SPCE061A的GPS定位仪c代码
💻 C
字号:


/*==================================================================

GPS软件设计,外部设备为上海麦宏公司的GM-309GPS接收模块,以UART格式
进行数据传输,数据遵循MNEA-0183协议。本程序仅提取其中的$GPRMC,加以
处理,最后在液晶模块上显示出,时间、日期、经度和纬度四种参数。

程序还存在显示切换过程中,先前的显示无法清除,使得切换后出现混乱的数据

===================================================================*/



#include"SPCE061A.h"
#include"SPLC501User.h"
#include"jingwei.h"
unsigned int *ShowData[10]={encoding_0a,encoding_0b,encoding_0c,encoding_0d,encoding_0e,
                          	encoding_0f,encoding_10,encoding_11,encoding_12,encoding_13};
char gpsdata[50];							//用于存放GPS数据
unsigned int i,flag=1,key=0,j;
char Recieve;								//串行接收
void displaytime();							//显示时间
void displaydate();							//显示日期
void displayweidu();						//显示纬度
void displayjingdu();						//显示经度
void main()
{
	*P_IOA_Dir=0xffff;						//IOA0~IOA7初始化为输出
	*P_IOA_Attrib=0xffff;
	*P_IOA_Data=0x00;
	*P_IOB_Dir=0xff7b;						//IOB2、IOB7设为输入,IOB10设为输出
	*P_IOB_Attrib=0x0;
	*P_IOB_Data=0x0004;						//外部中断1下拉接收
	*P_UART_Command1=0x20;					//Uart内部复位
	*P_UART_Command1=0x00;
	
	*P_UART_BaudScalarLow=0x00;
	*P_UART_BaudScalarHigh=0x0a;			//波特率设置为4800bps
	
	*P_UART_Command1=0x80;					//允许接收中断
	*P_UART_Command2=0xC0;
	*P_INT_Ctrl=C_IRQ3_EXT1; 				//打开外部中断1
	LCD501_Init(0x00);

	__asm("INT IRQ");
	LCD501_ClrScreen(0);

	while(1)
	{
		while(key==1)
		{
			displaytime();				//显示时间
			*P_Watchdog_Clear=1;
			displaydate();
			*P_Watchdog_Clear=1;
		}
		while(key==0)
		{
			displayweidu();				//显示纬度
			*P_Watchdog_Clear=1;
			displayjingdu();			//显示经度
			*P_Watchdog_Clear=1;
		}
			*P_Watchdog_Clear=1;
	}
}

void IRQ3(void) __attribute__ ((ISR));  //外部中断
void IRQ3(void)
{
	if(*P_INT_Ctrl&C_IRQ3_EXT1)
	{	
	   for(j=0;j<1000;j++)*P_Watchdog_Clear=1;//延时去抖
	   if(*P_INT_Ctrl&C_IRQ3_EXT1)
	   {
	   		LCD501_ClrScreen(0);
	   		key++;
	   		if(key>1)key=0;
			*P_INT_Clear=C_IRQ3_EXT1;
	   }
	}	
	
}



void IRQ7(void)__attribute__((ISR));  //中断接收
void IRQ7(void)
{ 

   if((*P_UART_Command2&0x80)==0x80)  //确认是接收中断
   {
   		if(flag==1)
   		{
   			Recieve=*P_UART_Data;		//接收数据
   			if(Recieve=='$')flag=2;		//确认是GPS数据
   		}
   		if(flag==2)						//确认是GPRMC格式
   		{
  			Recieve=*P_UART_Data;
   			if(Recieve=='C')flag=3;
   		}
   		if(flag==3)
   		{
   			Recieve=*P_UART_Data;
   			if((Recieve>0x2f)&&(Recieve<0x39))flag=4;//逗号
   		}
   		if(flag==4)						//接收数据
   		{
   			*P_Watchdog_Clear=1;
   			gpsdata[i]=*P_UART_Data;
   			i++;
   			if(i==50)
   			{
   				flag=1;
   				i=0;
   			}
   		}
   }
} 


void displaytime()
{	
	unsigned int a,a1,a2;
	a=(gpsdata[0]-0x30)*10+gpsdata[1]-0x30+8;
	if(a>=24)a=a-24;
	a1=a/10;
	a2=a%10;
	LCD501_Bitmap(30,4,(unsigned int *)encoding_03);		//时
	LCD501_Bitmap(48,4,(unsigned int *)encoding_04);		//间
	LCD501_Bitmap(5,16,(unsigned int *)ShowData[a1]);	
	LCD501_Bitmap(15,16,(unsigned int *)ShowData[a2]);
	LCD501_Bitmap(25,16,(unsigned int *)encoding_09);		//:
	LCD501_Bitmap(37,16,(unsigned int *)ShowData[gpsdata[2]-0x30]);
	LCD501_Bitmap(47,16,(unsigned int *)ShowData[gpsdata[3]-0x30]);
	LCD501_Bitmap(57,16,(unsigned int *)encoding_09);		//:
	LCD501_Bitmap(69,16,(unsigned int *)ShowData[gpsdata[4]-0x30]);
	LCD501_Bitmap(79,16,(unsigned int *)ShowData[gpsdata[5]-0x30]);	
	LCD501_PutString(96,16,"   ");
}


void displaydate()
{
	LCD501_Bitmap(30,30,(unsigned int *)encoding_07);	//日
	LCD501_Bitmap(48,30,(unsigned int *)encoding_08);	//期
	LCD501_Bitmap(5,42,(unsigned int *)ShowData[gpsdata[43]-0x30]);	
	LCD501_Bitmap(15,42,(unsigned int *)ShowData[gpsdata[44]-0x30]);
	LCD501_Bitmap(27,42,(unsigned int *)encoding_1b);	//年
	LCD501_Bitmap(39,42,(unsigned int *)ShowData[gpsdata[41]-0x30]);
	LCD501_Bitmap(49,42,(unsigned int *)ShowData[gpsdata[42]-0x30]);
	LCD501_Bitmap(61,42,(unsigned int *)encoding_1c);	//月
	LCD501_Bitmap(73,42,(unsigned int *)ShowData[gpsdata[39]-0x30]);
	LCD501_Bitmap(83,42,(unsigned int *)ShowData[gpsdata[40]-0x30]);
	LCD501_Bitmap(95,42,(unsigned int *)encoding_1d);	//日
	LCD501_PutString(108,42,"  ");
}




void displayweidu()
{
	LCD501_Bitmap(30,4,(unsigned int *)encoding_02);	//纬
	LCD501_Bitmap(48,4,(unsigned int *)encoding_01);	//度	
	LCD501_Bitmap(0,16,(unsigned int *)ShowData[gpsdata[12]-0x30]);
	LCD501_Bitmap(10,16,(unsigned int *)ShowData[gpsdata[13]-0x30]);
	LCD501_Bitmap(22,16,(unsigned int *)encoding_18);	//“°”
	LCD501_Bitmap(27,16,(unsigned int *)ShowData[gpsdata[14]-0x30]);
	LCD501_Bitmap(37,16,(unsigned int *)ShowData[gpsdata[15]-0x30]);
	LCD501_Bitmap(47,16,(unsigned int *)encoding_1a);	//.
	LCD501_Bitmap(53,16,(unsigned int *)ShowData[gpsdata[17]-0x30]);
	LCD501_Bitmap(63,16,(unsigned int *)ShowData[gpsdata[18]-0x30]);
	LCD501_Bitmap(73,16,(unsigned int *)ShowData[gpsdata[19]-0x30]);
	LCD501_Bitmap(83,16,(unsigned int *)ShowData[gpsdata[20]-0x30]);
	LCD501_Bitmap(93,16,(unsigned int *)encoding_19);	//'
	if(gpsdata[22]=='N')LCD501_Bitmap(108,16,(unsigned int *)encoding_14);	//N
	if(gpsdata[22]=='S')LCD501_Bitmap(108,16,(unsigned int *)encoding_15);	//S
}

void displayjingdu()
{
	LCD501_Bitmap(30,30,(unsigned int *)encoding_00);	//经
	LCD501_Bitmap(48,30,(unsigned int *)encoding_01);	//度
	LCD501_Bitmap(0,42,(unsigned int *)ShowData[gpsdata[24]-0x30]);	
	LCD501_Bitmap(10,42,(unsigned int *)ShowData[gpsdata[25]-0x30]);
	LCD501_Bitmap(20,42,(unsigned int *)ShowData[gpsdata[26]-0x30]);
	LCD501_Bitmap(30,42,(unsigned int *)encoding_18);	//“°”
	LCD501_Bitmap(35,42,(unsigned int *)ShowData[gpsdata[27]-0x30]);
	LCD501_Bitmap(45,42,(unsigned int *)ShowData[gpsdata[28]-0x30]);
	LCD501_Bitmap(55,42,(unsigned int *)encoding_1a);	//.
	LCD501_Bitmap(61,42,(unsigned int *)ShowData[gpsdata[30]-0x30]);
	LCD501_Bitmap(71,42,(unsigned int *)ShowData[gpsdata[31]-0x30]);
	LCD501_Bitmap(83,42,(unsigned int *)ShowData[gpsdata[32]-0x30]);
	LCD501_Bitmap(93,42,(unsigned int *)ShowData[gpsdata[33]-0x30]);
	LCD501_Bitmap(103,42,(unsigned int *)encoding_19);	//.
	if(gpsdata[35]=='E')LCD501_Bitmap(110,42,(unsigned int *)encoding_16);//E
	if(gpsdata[35]=='W')LCD501_Bitmap(110,42,(unsigned int *)encoding_17);//W
}




⌨️ 快捷键说明

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