GPS智能导航程序.docx
《GPS智能导航程序.docx》由会员分享,可在线阅读,更多相关《GPS智能导航程序.docx(13页珍藏版)》请在冰豆网上搜索。
![GPS智能导航程序.docx](https://file1.bdocx.com/fileroot1/2022-11/30/c00744d4-daa0-4d06-b35a-8b2f9638c311/c00744d4-daa0-4d06-b35a-8b2f9638c3111.gif)
GPS智能导航程序
附录
程序源代码
(车辆行驶方位图)
以目标点为原点,纬度为X轴,经度为Y轴。
无论车辆在那个区域都能通过判断行驶方向与正确方向的夹角来实行转向控制。
(起始点)
(行驶方向)
(目标点)(纬度)
(经度)
用的是MC9S12XS128单片机作为中央处理器。
//主函数部分
//********************************************************************voidmain(void)
{
PLL_Init();//调用锁相环函数初始化系统时钟
PWM_Init();//初始化PWM
PortInit();//初始化IO口的输入输出
SCI_Init();
Init_GPS_module();/*putyourowncodehere*/
EnableInterrupts;
for(;;){
if(gps_data_ok_flag==1)//查询GPS数据是否OK
{
DisableInterrupts;
Cal_gas_data_to_disp();
if(gps_mode[0]==65)
{
PWMDTY0=200;
e++;
k++;
b=(gps_longitude[7]-48)*100+(gps_longitude[8]-48)*10+(gps_longitude[9]-48);//*******//经度数据
d=(gps_latitude[6]-48)*100+(gps_latitude[7]-48)*10+(gps_latitude[8]-48);//*******//纬度数据
if(e==1)
{
b0=b;
d0=d;
}
if(e==2)//num1
{//
b1=b;//
d1=d;
}
//****************************************************
//***************************************************
//***********(b0,d0)做起始点************************//
if(e==2)
{
if(b0>b1)////num1
{//
f1=b0-b1;
}
else//
{//
f1=b1-b0;//
}//
if(b0>380)//num2
{//
f2=b0-380;//
}//
else//
{//
f2=380-b0;//
}
if(d0>d1)//num3
{
f3=d0-d1;//
}
else
{
f3=d1-d0;
}
if(d0>20)//num4
{
f4=d0-20;
}
else
{
f4=20-d0;
}
f5=f1*f4;
f6=f2*f3;
//***********************************************
//*************************************************
//**************第一大区域***********************
if(d0>20&&b0>380)
{
if(d1>d0&&b1>b0&&f5{
PWMDTY45=tun_r[16];
disply(16000);
zi();
}
if(d1>d0&&b1>b0&&f5>f6)//第1区域向右
{
PWMDTY45=tun_r[5];
disply(16000);
zi();
}
if(d1<=d0&&b1f6)//第3区域向左
{
PWMDTY45=tun_r[14];
disply(4000);
zi();
}
if(d1{
PWMDTY45=tun_r[6];
disply(3000);
zi();
}
if(d1<=d0&&b1>b0)//第2区域向右
{
PWMDTY45=tun_r[5];
disply(9000);
zi();
}
if(d1>d0&&b1<=b0)//第4区域向左
{
PWMDTY45=tun_r[16];
disply(4000);
zi();
}
}
//**********************************************
//*********************************************
//***************第二大区域*****************8
if(d0<20&&b0>380)
{
if(d1b0&&f5{
PWMDTY45=tun_r[4];
disply(16000);
zi();
}
if(d1b0&&f5>f6)//第2区域向左
{
PWMDTY45=tun_r[16];
disply(16000);
zi();
}
if(d1>=d0&&b1f6)//第4区域向右
{
PWMDTY45=tun_r[6];
disply(3000);
zi();
}
if(d1>d0&&b1<=b0&&f5{
PWMDTY45=tun_r[14];
disply(4000);
zi();
}
if(d1{
PWMDTY45=tun_r[4];
disply(9000);
zi();
}
if(d1>=d0&&b1>b0)//第1区域向左
{
PWMDTY45=tun_r[16];
disply(4000);
zi();
}
}
//**************************************************
//*************************************************
//************************第三大区域*************
if(d0<20&&b0<380)
{
if(d1{
PWMDTY45=tun_r[16];
disply(16000);
zi();
}
if(d1f6)//第三区域右转
{
PWMDTY45=tun_r[4];
disply(16000);
zi();
}
if(d1>=d0&&b1>b0&&f5>f6)//第一区域左转
{
PWMDTY45=tun_r[14];
disply(4000);
zi();
}
if(d1>d0&&b1>=b0&&f5{
PWMDTY45=tun_r[6];
disply(3000);
zi();
}
if(d1=b0)//第二区向左
{
PWMDTY45=tun_r[16];
disply(4000);
zi();
}
if(d1>=d0&&b1{
PWMDTY45=tun_r[4];
disply(9000);
zi();
}
}
//*********************************************************
//*********************************************************
//**************************第四大区域*********************if(d0>20&&b0<380)
{
if(d1>d0&&b1{
PWMDTY45=tun_r[4];
disply(16000);
zi();
}
if(d1>d0&&b1<=b0&&f5>f6)//第四区域向左
{
PWMDTY45=tun_r[16];
disply(16000);
zi();
}
if(d1b0&&f5{
PWMDTY45=tun_r[14];
disply(4000);
zi();
}
if(d1=b0&&f5>f6)//第二区域向右
{
PWMDTY45=tun_r[6];
disply(3000);
zi();
}
if(d1>d0&&b1>=b0)//第1区域向右
{
PWMDTY45=tun_r[4];
disply(9000);
zi();
}
if(d1<=d0&&b1{
PWMDTY45=tun_r[16];
disply(4000);
zi();
}
}
//**********************在反方向行驶**********************//
if(f5==f6)
{
if(b1>b0&&d1>d0)
{
PWMDTY45=tun_r[16];
disply(16000);
zi();
}
if(b1>b0&&d1{
PWMDTY45=tun_r[16];
disply(16000);
zi();
}
if(b1{
PWMDTY45=tun_r[16];
disply(16000);
zi();
}
if(b1d0)
{
PWMDTY45=tun_r[16];
disply(16000);
zi();
}
}
e=0;
}
//********************************************
反之当以(d1﹑b1)为起始点则把(d0﹑b0)与(d1﹑b1)互换;
当到达目的地(d==20&&b==380)时,
if(18{
while
(1)
{
PWMDTY0=249;
}
}
则车辆停止。