智能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函数部分程序截图
通过按键即可选择进入各个功能。带界面显示的哦!很好很强大。
其主要流程如下图所示。
图8.
因为所以实现的功能较多,所以这个项目程序就有点大。不进行较合理的分类的话就乱了。所以在主函数之后其他功能都通过入口函数提供跳转。跳转至其他c源文件的函数后相对于又建立了一个main函数。完成功能后可以退出,然后进入其他功能。这样不但有利于程序书写逻辑。而且极大方便了分步调试。
由上述说明可知。项目的外设有gps模块、rf模块、时间模块、所以源程序,就有了这三个的控制.c文件。然后因为要有设置功能,所以再增加一个set.c。对于lcd模块,因为每入一个功能就有一个界面,所以显示函数应该给每个功能设置一个独立的.c文件。如此,一个项目就清晰了。
四、测试结果
图9.实物图

基于MSP430F435单片机的血糖仪系统设计
华为Mate20Pro续航如何
你必须了解的能源问题:能量存储的挑战和可能性
改进的在线软件工具在WEBENCH环境中模拟自定义电源设计
关于GD32F190R8的模拟信号采集与显示装置设计的分析和介绍
智能GPS控制器
新型MP3解码芯片VS1001K及其应用
SMT贴片加工生产线的生产流程有哪些?
iPhone8为什么卖1000美元?因为它有“隐藏”的秘密
我国完成了首个5G+智慧农机示范应用
Netflix 正在尝试支持苹果 “空间音频”,春季推出
随着政策推动的高景气环境 网络安全产业增速继续向上发展
专用结构钢板和彩色涂层钢板
郭台铭亲访OLED屏幕工厂,为不错过苹果iPhone8订单
硬件原理图中的“英文缩写”
小米9透明版的王源定制版即将发布
运用重力铸造机的环境基本要求是怎样的
自动驾驶是链接物理世界和虚拟世界的入口
ChatGPT AI兴起,芯片、服务器、智能算力浪潮来袭
一定剂量的人工智能可以加快3D打印的生物支架的发展