基于51单片机的GPS定位系统设计

您所在的位置:网站首页 基于单片机无人机设计图纸 基于51单片机的GPS定位系统设计

基于51单片机的GPS定位系统设计

2024-05-24 03:15| 来源: 网络整理| 查看: 265

基于51单片机的GPS定位系统

(仿真+程序+PCB+原理图+设计报告)

功能介绍 具体功能:

1.UBLOX-NEO-6M GPS模块采集信息;

2.LED作指示灯;

3.LCD12864显示数据信息,时间、经纬度、方向速度、海拔;

​演示视频:

基于51单片机的GPS定位系统设计

#include "display.h" GPS_INFO GPS; //GPS信息结构体 uchar code beiwei[] = "北纬"; uchar code nanwei[] = "南纬"; uchar code dongjing[] = "东经"; uchar code xijing[] = "西经"; uchar code sudu[] = "速度: "; uchar code hangxiang[] = "航向: "; uchar code gaodu[] = "高度: "; uchar code jiaodu[] = "角度: "; uchar code haiba[] = "海拔: "; uchar code du[] = "度"; uchar code meter[] = "米"; uchar code kmperhour[] = "km/h"; uchar code date[] = " 年 月 日 "; void Show_Float(float fla, uchar x, uchar y); void GPS_DispTime(void) { uchar i = 0; uchar ch; //char * yearp; //char year[5]; //char month[3]; //char day[3]; //char hour[3]; //char minu[3]; //char seco[3]; //yearp=year; char time[5]; Lcd_DispLine(0, 0, date); //年月日 //yearp=" "; Int_To_Str(GPS.D.year,time); //将年转换成字符串,存在time中 Lcd_SetPos(0, 0); //设置显示地址 if(strlen(time)==4) //判断接收数据是否有效,有效则显示 { i = 0; while(time[i] != '\0') { ch = time[i++]; Lcd_WriteDat(ch); //显示年 } } Int_To_Str(GPS.D.month,time); Lcd_SetPos(0, 3); if(strlen(time)==2) { i = 0; while(time[i] != '\0') { ch =time[i++]; Lcd_WriteDat(ch); } } Int_To_Str(GPS.D.day,time); Lcd_SetPos(0, 5); if(strlen(time)==2) { i = 0; while(time[i] != '\0') { ch =time[i++]; Lcd_WriteDat(ch); } } Int_To_Str(GPS.D.hour,time); Lcd_SetPos(1, 1); if(strlen(time)==2) { i = 0; while(time[i] != '\0') { ch =time[i++]; Lcd_WriteDat(ch); } } Lcd_WriteDat(' '); Lcd_WriteDat(':'); Int_To_Str(GPS.D.minute,time); Lcd_SetPos(1, 3); if(strlen(time)==2) { i = 0; while(time[i] != '\0') { ch =time[i++]; Lcd_WriteDat(ch); } } Lcd_WriteDat(' '); Lcd_WriteDat(':'); Int_To_Str(GPS.D.second,time); Lcd_SetPos(1, 5); if(strlen(time)==2) { i = 0; while(time[i] != '\0') { ch =time[i++]; Lcd_WriteDat(ch); } } } void GPS_DisplayOne(void) { uchar ch, i; char info[10]; ET0=0; clr_screen();//Lcd_WriteCmd(0x01); //清屏 /* Lcd_SetPos(3, 4); Lcd_WriteDat(0xA1); Lcd_WriteDat(0xE3); Lcd_SetPos(3, 6); Lcd_WriteDat(0xA1); Lcd_WriteDat(0xE4); Lcd_SetPos(2, 4); Lcd_WriteDat(0xA1); Lcd_WriteDat(0xE3); Lcd_SetPos(2, 6); Lcd_WriteDat(0xA1); Lcd_WriteDat(0xE4); */ GPS_DispTime(); //显示日期,时间 if (GPS.NS == 'N') //判断是北纬还是南纬 Lcd_DispLine(2, 0, beiwei); else if (GPS.NS == 'S') Lcd_DispLine(2, 0, nanwei); if (GPS.EW == 'E') //判断是东经还是西经 Lcd_DispLine(3, 0, dongjing); else if (GPS.EW == 'W') Lcd_DispLine(3, 0, xijing); //Lcd_DispLine(2, 2, info); //Int_To_Str(GPS.latitude_Cent,info); //纬分 //Lcd_DispLine(2, 5, info); //Int_To_Str(GPS.latitude_Second,info); //纬秒 //Lcd_DispLine(2, 7, info); Int_To_Str(GPS.latitude_Degree,info); //纬度 Lcd_SetPos(2, 2); if(strlen(info)==2) { //只有正常显示纬度,才显示纬分 i = 0; while(info[i] != '\0') { ch = info[i++]; Lcd_WriteDat(ch); } Lcd_WriteDat(' '); Lcd_WriteDat(' '); Lcd_WriteDat(0xA1); Lcd_WriteDat(0xE3); Int_To_Str(GPS.latitude_Cent,info); //纬分 if(strlen(info)==2) { //只有正常显示纬分,才显示纬秒 i = 0; while(info[i] != '\0') { ch = info[i++]; Lcd_WriteDat(ch); } Lcd_WriteDat(0xA1); Lcd_WriteDat(0xE4); Int_To_Str(GPS.latitude_Second,info); //纬秒 if(strlen(info)==2) { i = 0; while(info[i] != '\0') { ch = info[i++]; Lcd_WriteDat(ch); } } } } //Int_To_Str(GPS.longitude_Degree,info); //经度 //Lcd_SetPos(3, 2); //Lcd_WriteDat(' '); //Lcd_DispLine(3, 2, info); //Int_To_Str(GPS.longitude_Cent,info); //经分 //Lcd_DispLine(3, 5, info); //Int_To_Str(GPS.longitude_Second,info); //经秒 //Lcd_DispLine(3, 7, info); Int_To_Str(GPS.longitude_Degree,info); //经度 if(strlen(info)==3) { //Lcd_SetPos(3, 2); //i = 0; //while(info[i] != '\0') //{ // ch = info[i++]; // Lcd_WriteDat(ch); //} Lcd_DispLine(3, 2, info); Lcd_WriteDat(' '); Lcd_WriteDat(0xA1); Lcd_WriteDat(0xE3); Int_To_Str(GPS.longitude_Cent,info); //经分 if(strlen(info)==2) { //i = 0; //while(info[i] != '\0') //{ // ch = info[i++]; // Lcd_WriteDat(ch); //} Lcd_DispLine(3, 5, info); Lcd_WriteDat(0xA1); Lcd_WriteDat(0xE4); Int_To_Str(GPS.longitude_Second,info); //经秒 if(strlen(info)==2) { //i = 0; //while(info[i] != '\0') //{ // ch = info[i++]; // Lcd_WriteDat(ch); //} Lcd_DispLine(3, 7, info); } } } ET0=1; } void GPS_DisplayTwo(void) { clr_screen();//Lcd_WriteCmd(0x01); //清屏 ET0=0; Lcd_DispLine(0, 0, sudu); Lcd_DispLine(1, 0, hangxiang); Lcd_DispLine(2, 0, gaodu); Lcd_DispLine(3, 0, haiba); Show_Float(GPS.speed, 0, 3); Lcd_DispLine(0, 6, kmperhour); Show_Float(GPS.direction, 1, 3); Lcd_DispLine(1, 6, du); Show_Float(GPS.height_ground, 2, 3); Lcd_DispLine(2, 6, meter); Show_Float(GPS.height_sea, 3, 3); Lcd_DispLine(3, 6, meter); ET0=1; } 硬件设计 使用元器件:

单片机:STC89C52;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

12864液晶显示屏;

UBLOX-NEO-6M GPS模块;

LED灯(红、绿、黄);

1K电阻;10K滑动变阻;

30pf电容;10K电阻;

按键;AMS1117稳压器;

DC电源插口;

导线:若干;

流程图:

设计资料 01 仿真图

本设计使用proteus8.9版本设计,资料里有安装教程,无需担心!具体如图!

02 原理图

本系统原理图采用Altium Designer19设计,具体如图!

03 程序

本设计使用软件keil5版本编程设计,资料里有安装教程,无需担心!具体如图!

04 设计报告

六千字设计报告,具体如下!

05 设计资料

        资料获取请关注同名公众号,全部资料包括仿真源文件 、程序(含注释)、PCB电路图、AD原理图、设计报告、任务书、流程图、结构图、元件清单、仿真视频等。具体内容如下,全网最全! !

资料获取请观看前面演示视频!

点赞分享一起学习成长。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3