是这样的。GPS和GPRS模块全部都用原子的模块。GPS连接串口2 ,GPRS连接串口3,向串口3发送AT指令想把GPS数据以短信的形式发送到手机。代码如下。难道是不能 用4G的移动卡发么?
[mw_shl_code=c,true]#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "usart2.h"
#include "lcd.h"
#include "gps.h"
#include "usart3.h"
u8 USART1_TX_BUF[USART2_MAX_RECV_LEN]; /*?®??1,·????????? ×??ó?????®??2?????????????÷??????
?ó???á×??®??2???????®??1??·???????*/
nmea_msg gpsx; //GPS????
__align(4) u8 dtbuf[50]; //?ò???????÷
//const u8*fixmode_tbl[4]={"Fail","Fail"," 2D "," 3D "}; //fix mode×?·??®
u8 count_1=0;
u8 command_1[15]="AT+CSCS=\"GSM\"\r\n";
u8 count_2=0;
u8 command_2[11]="AT+CMGF=1\r\n";
u8 count_3=0;
u8 command_3[23]="AT+CMGS=\"177****5507\"\r\n";//
u8 count_4=0;
u8 command_4[62]; // 16 15 10 9 10
//????GPS?¨??????
void Gps_Msg_Show(void)
{
float tp;
u8 i=0;
u8 i_offset=0;
POINT_COLOR=BLUE;
tp=gpsx.longitude;
sprintf((char *)dtbuf,"longi:%.5f %1c ",tp/=100000,gpsx.ewhemi); //????????×?·??®
LCD_ShowString(30,130,200,16,16,dtbuf);
printf("?±?°??????%s\n",dtbuf); //°??±?°???????±·??????????ú
while(i<16)
{
command_4[i++]=dtbuf[i_offset++];
}
tp=gpsx.latitude;
sprintf((char *)dtbuf,"lati:%.5f %1c ",tp/=100000,gpsx.nshemi); //????????×?·??®
LCD_ShowString(30,150,200,16,16,dtbuf);
printf("?±?°??????%s\n",dtbuf); //°??±?°???????±·??????????ú
i_offset=0;
while(i<31)
{
command_4[i++]=dtbuf[i_offset++];
}
tp=gpsx.altitude;
sprintf((char *)dtbuf,"Alti:%.1fm ",tp/=10); //????????×?·??®
LCD_ShowString(30,170,200,16,16,dtbuf);
printf("?±?°??????%s\n",dtbuf); //°??±?°???????±·??????????ú
i_offset=0;
while(i<41)
{
command_4[i++]=dtbuf[i_offset++];
}
// tp=gpsx.speed;
// sprintf((char *)dtbuf,"Speed:%.3fkm/h ",tp/=1000); //????????×?·??®
// LCD_ShowString(30,190,200,16,16,dtbuf);
sprintf((char *)dtbuf,"Valid:%02d",gpsx.posslnum); //?????¨??????????
LCD_ShowString(30,230,200,16,16,dtbuf);
i_offset=0;
while(i<50)
{
command_4[i++]=dtbuf[i_offset++];
}
sprintf((char *)dtbuf,"Visible:%02d",gpsx.svnum%100); //??????????
LCD_ShowString(30,250,200,16,16,dtbuf);
i_offset=0;
while(i<62)
{
command_4[i++]=dtbuf[i_offset++];
}
/*
sprintf((char *)dtbuf,"UTC Date:%04d/%02d/%02d ",gpsx.utc.year,gpsx.utc.month,gpsx.utc.date); //????UTC????
//printf("year2:%d\r\n",gpsx.utc.year);
LCD_ShowString(30,270,200,16,16,dtbuf);
sprintf((char *)dtbuf,"UTC Time:%02d:%02d:%02d ",gpsx.utc.hour,gpsx.utc.min,gpsx.utc.sec); //????UTC?±??
LCD_ShowString(30,290,200,16,16,dtbuf);
*/
}
int main(void)
{
//GPRS
u8 key2;
u8 key3;
u16 ii=0;
u8 send_usart3=0;
u8 key_temp;
u16 i,rxlen,lenx;
//u8 upload=0;
u8 key=0xFF;
delay_init(); //???±??????????
NVIC_Configuration(); //?è??NVIC????·?×é2:2??????????????2???ì????????
uart_init(9600); //?®??1????????9600
USART2_Init(38400); //?®??2????????38400
USART3_Init(38400);
LED_Init(); //LED??????????
KEY_Init(); //????????°??ü??????????????
LCD_Init(); //??????LCD
POINT_COLOR=RED;
LCD_ShowString(30,70,200,16,16,"----GPS Test----");
LCD_ShowString(30,90,200,16,16,"Chailang SB");
//GPS???é??????????
if(Ublox_Cfg_Rate(1000,1)!=0) //?è???¨???????ü????????1000ms,??±?????GPS???é??·?????.
{
LCD_ShowString(30,120,200,16,16,"NEO-6M Setting...");
while((Ublox_Cfg_Rate(1000,1)!=0)&&key) //????????,?±???????ì?é??NEO-6M,??????±???????
{
USART2_Init(9600); //???????®??2?¨??????9600(EEPROM????±??????????±?ò,?¨??????9600.)
Ublox_Cfg_Prt(38400); //?????è?????é???¨??????38400
Ublox_Cfg_Tp(1000000,100000,1); //?è??PPS??1????????1??,?????í????100ms
key=Ublox_Cfg_Cfg_Save(); //±???????·?????0±í??±??????? ?????±?ò??????????&???±?ò?????á????while
}
LCD_ShowString(30,120,200,16,16,"NEO-6M Set Done!!");
delay_ms(500);
LCD_Fill(30,120,30+200,120+16,WHITE);//????????
}
//????GPS????×???
while(1)
{
key_temp=KEY_Scan(0);
delay_ms(1);
if(USART2_RX_STA&0X8000) //???®??2????????????×??????ò??????????????????
{
rxlen=USART2_RX_STA&0X7FFF; //?????????¤??
for(i=0;i<rxlen;i++)USART1_TX_BUF=USART2_RX_BUF;
USART2_RX_STA=0; //?????®??2????????????×???????×?±???????????????
USART1_TX_BUF=0; //×????í???á??·?
GPS_Analysis(&gpsx,(u8*)USART1_TX_BUF);//·???×?·??®
Gps_Msg_Show(); //????????
//if(upload)printf("\r\n%s\r\n",USART1_TX_BUF);//·??????????????????®??1
}
/*
key=KEY_Scan(0);
if(key==KEY_RIGHT)
{
upload=!upload;
POINT_COLOR=RED;
if(upload)LCD_ShowString(30,100,200,16,16,"NMEA Data Upload:ON ");
else LCD_ShowString(30,100,200,16,16,"NMEA Data Upload:OFF");
}*/
// if((lenx%500)==0)LED0=!LED0;
// lenx++;
//GRPS
key2=key_temp;
if(key2==KEY_LEFT)
{
send_usart3=!send_usart3;
if(send_usart3)
{
LCD_ShowString(30,300,200,16,16,"Message is sending``` ");
printf("The data form USART3:\r\n");
while(ii<rxlen)
{
USART_SendData(USART3,USART2_RX_BUF[ii++]);
delay_ms(10);
}ii=0;
}
else
{
LCD_ShowString(30,300,200,16,16,"MB``` ");
}
}
key3=key_temp;
if(key3==KEY_RIGHT)
{
while(count_1<15)
{
USART_SendData(USART3,command_1[count_1++]);
delay_ms(1);
}
count_1=0;
delay_ms(50);
while(count_2<11)
{
USART_SendData(USART3,command_2[count_2++]);
delay_ms(1);
}
count_2=0;
delay_ms(50);
while(count_3<23)
{
USART_SendData(USART3,command_3[count_3++]);
delay_ms(1);
}
count_3=0;
delay_ms(50);
while(count_4<62)
{
USART_SendData(USART3,command_4[count_4++]);
delay_ms(1);
}
count_4=0;
delay_ms(500);
USART_SendData(USART3,0x1A);
LED1=0;
}
delay_ms(10);
}
}
[/mw_shl_code]
|