智能GPS控制器
一、项目设计背景及概述
此项目是基于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函数部分程序截
GPS 相关文章:
- 基于暂态行波法的配电网故障定位装置研究(02-01)
- 车载GPS导航仪供电方式深度解析(04-17)
- 基于GPS定位的嵌入式系统在汽车监控器设计中的应用(04-16)
- 车用影音及GPS技术发展与应用(10-13)
- GPS集中差分技术在城市车辆智能交通管理中的应用(04-16)
- 根据GPS全球定位技术在医疗监护装置中的应用(03-21)