当前位置: 首页 > article >正文

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

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

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

功能介绍

具体功能:

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

2.LED作指示灯;

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


#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原理图、设计报告、任务书、流程图、结构图、元件清单、仿真视频等。具体内容如下,全网最全! !

下面是开源51单片机设计资料

​大家共同学习进步:

链接:https://pan.baidu.com/s/1dKH-eHPWi6IR90_09u066w?pwd=qy0u

提取码:qy0u

点赞分享,一起学习进步!一起成长。

http://www.lryc.cn/news/2417935.html

相关文章:

  • 七夕表白爱心代码,可任意自定义名字
  • 短地址
  • Ophone2.0开发环境的搭建
  • python-类的属性和方法练习
  • MyEclipse7.5+EclipseMe+WTK2.5搭建J2ME开发环境
  • 分享78个ASP电子商务源码,总有一款适合您
  • 网络原理 | 广域网数据传输流程(DNS、NAPT、路由)
  • 探索前沿科技:12306 系统克隆与学习项目
  • 盘点那些不为人知却堪称神器的8款系统管理软件
  • iPhone史上最全的使用教程
  • Apache配置
  • Windows Phone 8应用开发工具特性详解
  • SetWindowsHookEx实现过程
  • 美拍解析去水印原理,sign签名算法,获得无水印播放地址
  • Win10/11系统修复不求人,FixWin11.1系统修复小工具。
  • 龙将加速浏览器_《命运2》“凌光之刻”各版本内容介绍,迅游加速流畅开玩全新DLC...
  • BUUCTF 每日打卡 2021-7-18
  • 巨丝滑 —— 自己动手撸一个图片编辑器(支持长图)
  • 2020年有寓意的领证日期_2020有寓意的领证日期 2020热门领证日期
  • 8小时理解go - 基本语法
  • PC端分享至QQ空间、新浪、微信
  • PHP实现Trim函数功能(附完整源码)
  • .net core 请求外部接口;ABP HttpClientFactory的使用
  • vuex结合mixin在实际项目中的使用(超详细)
  • 前端缓存详解
  • 学习记录333@MySQL问题之server name is already exists解决方案
  • kernel panic 分析解决方法
  • 基于Java游戏论坛平台设计和实现(源码+LW+调试文档+讲解等)
  • Picasa生成图片幻灯片页面图文教程
  • Java集合详解(超详细)