×
嵌入式 > 技术百科 > 详情

智能GPS控制器设计

发布时间:2020-06-20 发布时间:
|
  一、项目设计背景及概述

  此项目是基于SLH单片机的一个GPS定位程序。通过GPS提供的位置坐标,除了定位之外,还可以计算出日出日落时间。然后利用此时间来作为一些定时控制器的控制依据。比如路灯,日落时开启,日出时关闭。这样可以省去人工开关灯的麻烦,也可以节省不必要的用电。同时我们还在其中加入了NRF24LO1无线模块,可以通过无线将位置坐标,模式等数据传给其他匹配好地址的设备。这样就可以达到一机多用的目的,也节省了系统的总成本。为了方便使用,显示采用了12864显示,在程序中加入了各种菜单,模式选择。和参数设置功能。使其功能更加强大。

  二、项目设计原理

  1、 原理概述

  本项目原理即是基于SLH单片机的串口通讯与IO控制功能,将GPS,RF,DS1302,LCD等模集合成一体。从而实现地理定位。无线通信。实时时钟。和液晶显示器等功能。

  2、 硬件设计原理

  硬件原理图如下所示。

  图1.单片机及GPS

  图1中为了给RF及LCD供电,使用了LDO将5V电压转成3.3V。GPS那里用了一个4P的插头,方便电脑串口调试。排阻是后面说的DS1302拉位用。高电平复位,晶振用的是11.0592MHz的。

  图2.DS1302及NRF24L01

  图3.LCD

  图4.按钮

  注意的是DS1302的IO最好有上拉电阻,不然时不时小坑一下。
 

  3、 软件设计原理

  软件是本项目的重点,编译器是Keil uVision4。整个程序主要是用于实现获取GPS信息、RF通信、实时时钟显示,另外增加了数据保存和恢复的功能。其中GPS是通过串口接收的,其接收方法如下程序所示:

  uart_data[uart_data[59]] = SBUF;

  if(on_uart){

  if(uart_data[uart_data[59]]==0x2a){

  uart_updata=1;

  uart_data[0]=0;

  on_uart=0;

  }

  if(uart_data[0]==0x24){uart_data[59]++;if(uart_data[59]》55)uart_data[59]=0;}

  起初,串口接收到数据后。产生中断。如果on_uart标志位为1,程序将数据写入串口接收缓冲数组。因为GPS协议的开始字符都为0x24,所以在判断接收到此数据后才往下接收。计数放在数组的最后一位,当uart_data[uart_data[59]]==0x2a成立时,一组数据接收完成,更新标志位 uart_updata=1GPS,C内的函数即可读出数据。然后判断是否定位好等操作。

  RF则更容易一些,因为协议可以自己定义,如下函数所示:

  if(model==1)addr=TS_ADDRESS0;

  if(model==2)addr=TS_ADDRESS1;

  if(model==3)addr=TS_ADDRESS2;

  if(model==4)addr=TS_ADDRESS3;

  dis_char(0,2,0,“ Sending.。. ”);

  dis_char(0,0,0,“ Cancel to Exit ”);

  LOOP0:delay(0xffff);delay(0xffff);delay(0xffff);delay(0xffff);

  temp[0]=0xa1;

  if(longitude》0){ dd=longitude;temp[1]=0;

  }else{

  dd=(-1)*longitude;temp[1]=1;

  }

  temp[2]=dd;temp[3]=(dd-temp[2])*100;

  temp[4]=ontime[model-1][0];temp[5]=ontime[model-1][1];

  nRF24L01_TxPacket(temp,addr);delay(0xfff);

  if(Close_rf()){;

  // dis_char(0,2,0,“ Send Success ”);delay(100);

  }else{

  ajsm();

  if(key!=0){

  if(key==9){key=0;goto LOOP4;}

  } else{goto LOOP0;}

  }

  函数是发送数据的其中一度,开始判断发送的地址,然后将其他类型的数据转换成char类型的,写入一个数组,然后就逐个发送出去数组的第一位存放协议。此处为Oxa1表示第一段数据。不是地址,也不是第二段,最后用了NRF24l01自带的校验功能判断是否发送成功,成功则发送第二段,不成功则重复发送,直至按下取消按钮。

  三、项目设计框图

  1、硬件设计框图

  设计框图如下所示

  图5.硬件设计框图

  2、软件设计框图

  其实软件才是本项目的亮点,PROJECT视图如下:

  图6.Keil 4 PROJECT视图

  Main.C是主函数,然后每个外设有一个头文件,包涵后给其他C的功能实现源文件继承。从头文件可以看出,除了各个外设的功能外,我们还加入了SLH单片机SSP、EPPROM数据存储功能使项目更加完美。GPS.C/用于实现与GPS的串口通信,数据转换以及GPS电源控制,RF.C/用于发送和接收RF传输数据,TIME.C/ 用于DS1302时间设置,SET./用于工作模式设置和日出日落时间计算,所有xxx_W1.C的文件都是用于写界面显示的。如此说明不知您理解没有呢?然后再每个功能函数都有一个入口函数,如下图7所示,命名为XXX_ MAIN():

  图7.MAIN函数部分程序截图

  通过按键即可选择进入各个功能。带界面显示的哦!很好很强大。

  其主要流程如下图所示。

  图8.

  因为所以实现的功能较多,所以这个项目程序就有点大。不进行较合理的分类的话就乱了。所以在主函数之后其他功能都通过入口函数提供跳转。跳转至其他C源文件的函数后相对于又建立了一个main函数。完成功能后可以退出,然后进入其他功能。这样不但有利于程序书写逻辑。而且极大方便了分步调试。

  由上述说明可知。项目的外设有GPS模块、RF模块、时间模块、所以源程序,就有了这三个的控制.C文件。然后因为要有设置功能,所以再增加一个SET.C。对于LCD模块,因为每入一个功能就有一个界面,所以显示函数应该给每个功能设置一个独立的.C文件。如此,一个项目就清晰了。

  四、测试结果

  图9.实物图

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ADI 高精度低功耗精密放大器