📄 gps.c
字号:
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/delay.h>
#include "self_def.h"
#include "head.h"
//只输出gll,
/*
uchar onlygll[]={
0x24,0x50,0x46,0x53,0x54,0x2C,0x4E,0x4D,0x45,0x41,0x2C,0x31,
0x30,0x30,0x30,0x2C,0x34,0x38,0x30,0x30,0x2A,0x33,0x37,0x0D,0x0A,
};
//$PFST,NMEA,1000,4800*37<CR><LF>
//输出GPS控制语句
*/
void SendGPSCode(uchar *command)
{
uchar i,*p;
p=command;
i=0;
while((*p)!=0x0A) //结束符为0d,0a
{
UART0_TransmitByte(*p);
p++;
}
UART0_TransmitByte( *p );
_delay_ms(100);
}
uchar initaid[]={
36,80,70,83,84,44,73,78,73,84,65,73,68,
44,49,53,53,50,48,48,46,54,49,44,48,49,
48,56,48,55,44,51,52,49,53,46,49,51,50,
52,44,78,44,49,48,56,53,56,46,56,55,54,
49,44,69,44,52,48,42,53,55,13,10
};
//输出GPS初始化信息
uchar Show_Buf[40]={0};
uchar show_flag=0;
//取字码地址
uchar get_d_where(uchar c)
{
uchar d_where;
if(c>='0'&&c<='9')
d_where=c-'0';
else if(c=='E'||c=='e')
d_where=10;
else if(c=='S'||c=='s')
d_where=11;
else if(c=='W'||c=='w')
d_where=12;
else if(c=='N'||c=='n')
d_where=13;
else if(c=='R'||c=='r')
d_where=14;
else if(c=='O'||c=='o')
d_where=15;
else if(c=='A'||c=='a')
d_where=16;
else if(c=='V'||c=='v')
d_where=17;
else
d_where=18;
return d_where;
}
int main(void)
{
//内部RC振荡器8分频,生成1MHz系统时钟
CLKPR=(1<<CLKPCE)|(1<<CLKPS1)|(1<<CLKPS0); //8 divid
//CLKPR|=(1<<CLKPS1)|(1<<CLKPS0);
OSCCAL=0xC7;
//INT0
DDRD=(1<<PD2);
PORTD&=~(1<<PD2);
//rising edge
MCUCR=(1<<ISC01)|(1<<ISC00);
GICR=(1<<INT0); //general interrput control register
sei();
init_lcd();
init_UART0();
SendGPSCode(initaid); //发送指令,gps只输出gll信息
//uchar Show_Buf[40]={0};
//uchar *p=Show_Buf;
//uchar i,j,d;
while(1)
{
/*
//if(PIND&(1<<PD3))
//{
//接收数据,将数据存到flash中,并提取经度、纬度信息供液晶显示
// get_gps(p);
j=0;
for(i=0;i<10;i++)
{
d=get_d_where(Show_Buf[i]);
display_word(d,j,0,8);
j+=8;
}
j=0;
for(i=0;i<11;i++)
{
d=get_d_where(Show_Buf[i+11]);
display_word(d,j,1,8);
j+=8;
}
// PORTD&=~(1<<PD3); //标志位清零
//}
*/
}
}
/*
unsigned char get_show_flag(uchar i)
{
i++;
return i;
}
*/
SIGNAL(SIG_INTERRUPT0)
{
uchar i,j,d;
uchar *p=Show_Buf;
cli();
get_gps(p);
clrscr();
//display_word(10,40,0,8);
j=0;
//if(get_show_flag(show_flag)==1)
//{
for(i=0;i<9;i++)
{
d=get_d_where(Show_Buf[i]);
display_word(d,j,0,8);
j+=8;
}
j=0;
for(i=0;i<10;i++)
{
d=get_d_where(Show_Buf[i+10]);
display_word(d,j,1,8);
j+=8;
}
d=get_d_where(Show_Buf[31]);
display_word(d,j,1,8);
j+=8;
d=get_d_where(Show_Buf[32]);
display_word(d,j,1,8);
//}
PORTD&=~(1<<PD2);
sei();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -