基于51单片机的GPS定位系统的设计.docx
- 文档编号:5321743
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:21
- 大小:408.05KB
基于51单片机的GPS定位系统的设计.docx
《基于51单片机的GPS定位系统的设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的GPS定位系统的设计.docx(21页珍藏版)》请在冰豆网上搜索。
基于51单片机的GPS定位系统的设计
目录
第一章51单片机概述1
1.1单片机结构及原理1
1.28255芯片的结构及原理2
1.38250芯片的结构及原理4
1.4液晶显示模块4
第二章GPS定位系统简介5
2.1GPS定位系统的基本原理5
2.2GPS模块的主要技术参数及其特点6
2.3NMEA-0183数据格式6
第三章硬件连接电路8
3.1基于51单片机的GPS定位系统设计8
3.2GPS和单片机、LCD的接口连接电路9
第四章软件设计10
4.1实训框图10
4.2实训步骤11
4.3实训结果:
11
第五章实验总结12
附录13
参考文献17
第一章51单片机概述
1.1单片机结构及原理
图1-1是AT89C51单片机的基本组成功能框图。
由图可见,在这一块芯片上,集成了一台微信和计算机的各个主要部分。
其中主要有CPU、存储器、可编程I/O口、定时/计数器、串行口等,各部分通过内部总线相连。
图中的P0、P1、P2、P3为4个可变长I/O口,TXD、RXD为串行口的输入、输出端,以上各部分通过内部总线相连。
图1-1AT89C51的基本组成功能框图
下面介绍几个主要部件:
1、中央处理器(CPU)
中央处理器是单片机的最核心的部分,主要完成运算和控制功能,这一点与通用微处理器基本相同,只是它控制功能更强。
80C51系列的CPU是一个字长为8位的中央处理单元,它对数据的处理是按字节为单位进行的。
2、数据存储器(内部RAM)
数据存储器用于存放变化的数据。
在80C51单片机中通常把控制与管理寄存器在逻辑上划分在内部RAM中,因为其地址与RAM是连续的。
AT89C51中数据次年初七的地址空间为256个RAM单元,但其中能作为数据存储器供用户舒勇的仅有钱128个,后128个被阻焊用寄存器占用。
3、程序存储器(内部ROM)
程序存储器用于存放程序和固定的常数等。
通常采用只读存储器,只读存储器有多种类型,在89系列单片机中全部采用闪存。
4、定时/计数器
定时/计数器用于实现定时和计数功能,AT89C51共有2个16位的定时/计数器。
5、并行I/O口
并行I/O口主要用于实现与外部设备中数据的并行输入/输出,有些I/O口还具有其他多种功能。
6、串行口
AT89C51有一个UART全双工异步串行口,用以实现单片机和其他具有相应接口设备之间的异步串行数据传送,还有一个ISP全双工同步串行口,用以实现串行在线下载。
7、时钟电路
时钟电路的作用是产生单片机工作所需要的时钟脉冲序列。
8、中断系统
中断系统的主要作用是对外部或内部的中断请求进行管理和处理。
1.28255芯片的结构及原理
目前已生产了多种可编程接口芯片,如,可编程芯片8155、8255、计数/定时器8253、可编程串行接口8250、可编程中断控制器8259等。
8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。
同时必须具有与外设连接的接口A、B、C口。
由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:
与CPU连接部分、与外设连接部分、控制部分。
1)与CPU连接部分
根据定义,8255能并行传送8位数据,所以其数据线为8根D0~D7。
由于8255具有3个通道A、B、C,所以只要两根地址线就能寻址A、B、C口及控制寄存器,故地址线为两根A0~A1。
此外CPU要对8255进行读、写与片选操作,所以控制线为片选、复位、读、写信号。
各信号的引脚编号如下:
(1)数据总线DB:
编号为D0~D7,用于8255与CPU传送8位数据。
(2)地址总线AB:
编号为A0~A1,用于选择A、B、C口与控制寄存器。
(3)控制总线CB:
片选信号、复位信号RST、写信号、读信号。
当CPU要对8255进行读、写操作时,必须先向8255发片选信号选中8255芯片,然后发读信号或写信号对8255进行读或写数据的操作。
2)与外设接口部分
根据定义,8255有3个通道A、B、C与外设连接,每个通道又有8根线与外设连接,所以8255可以用24根线与外设连接,若进行开关量控制,则8255可同时控制24路开关。
各通道的引脚编号如下:
(1)A口:
编号为PA0~PA7,用于8255向外设输入输出8位并行数据。
(2)B口:
编号为PB0~PB7,用于8255向外设输入输出8位并行数据。
(3)C口:
编号为PC0~PC7,用于8255
向外设输入输出8位并行数据,当8255工作于应答I/O方式时,C口用于应答信号的通信。
3)控制器8255将3个通道分为两组,即PA0~PA7与PC4~PC7组成A组,PB0~PB7与PC0~PC3组成B组。
如图7.5所示,相应的控制器也分为A组控制器与B组控制器,各组控制器的作用如下:
(1)A组控制器:
控制A口与上C口的输入与输出。
(2)B组控制器:
控制B口与下C口的输入与输出。
8255A共有40个引脚,采用双列直插式封装,引脚分布图如下:
图1-28255引脚分布图
各引脚功能介绍:
(1)数据总线:
D0~D7、PA0~PA7、PB0~PB7、PC0~PC7,此32条数据线均为三态双向数据线。
D0~D7与单片机数据总线连接,用来传送CPU与8255A之间的命令与数据信息,PA0~PA7、PB0~PB7、PC0~PC7分别与A、B、C三个口相对应,以实现8255A与外设之间的数据传送。
(2)控制线:
RD、WR、RESET
RD:
读信号,低电平有效。
当这个引脚输入为低电平,CPU对8255A进行读操作。
WR:
写信号,低电平有效。
当这个引脚输入为低电平,CPU对8255A进行写操作。
RESET:
复位信号,高电平有效。
当这个引脚输入为高电平,所有8255A内部寄存器都清零。
(3)寻址线:
CS、A0、A1
CS:
芯片选择线,低电平有效。
当这个引脚输入为低电平,表示芯片被选中。
A1、A0:
地址线,用来选择8255内部端口。
1.38250芯片的结构及原理
8250可编程接口芯片内部结构图:
图1-38250芯片内部结构图
1.4液晶显示模块
在单片机中,常用的显示器是LCD液晶显示器。
LCD显示器功耗低,显示清晰度高。
液晶显示模块是一种将液晶显示器件、连接件、集成电路、PCB线路板、背光源、结构件装配在一起的组件.英文名称叫“LCDModule”,简称“LCM”,中文一般称为“液晶显示模块”。
液晶显示器件是一种高新技术的基础元器件,虽然其应用巳很广泛,但对很多人来说,使用、装配时仍感到困难。
特别是点阵型液晶显示器件,使用者更是会感到无从下手.特殊的连接方式和所需的专用设备也非人人了解和具备,故此液晶显示器件的用户希望有人代劳,将液晶显示器件与控制、驱动集成电路装在一起,形成一个功能部件,用户只需用传统工艺即可将其装配成一个整机系统。
第二章GPS定位系统简介
GPS卫星定位系统的前身是美军研制的一种“子午仪”导航卫星系统,GPS全球定位系统是20世纪70年代由美国陆海空三军联合研制的新一代空间卫星导航GPS定位系统。
经过20余年的研究实验,耗资300亿美元,到1994年3月,全球覆盖率高达98%的24颗GPS卫星星座己布设完成。
由于GPS具有全球覆盖以及精度高、定位速度快、实时性好、抗干扰能力强等特点,近年来在国内外得到广泛的应用,在各个领域发挥了极大的作用,已成为信时代不可缺少的一部分。
各种GPS民用产品的开发,已是经济和社会发展的必然要求,其前景将会非常广阔和光明,尤其是在我国,通过这些年来对它认识不断加深,我国的GPS开发应用也一定会以科技力量推动经济和社会发展的一颗巨星,对我国的经济和社会的发展产生重大的影响。
2.1GPS定位系统的基本原理
图2-1GPS定位原理图
GPS定位的基本原理是根据高速运动的卫星瞬间位置作为已知的起算数据,采用空间距离后方交会的方法,确定待测点的位置。
如图所示,假设t时刻在地面待测点上安置GPS接收机,可以测定GPS信号到达接收机的时间△t,再加上接收机所接收到的卫星星历等其它数据可以确定以下四个方程式。
2.2GPS模块定位流程
1.搜索可用卫星,接收卫星信号,与卫星信号同步,提取导航电文信息;
2.从导航电文中获取计算位置所需的信息,这些信息应该包括时钟信息和星历等数据;
3.计算卫星的准确位置,这包括计算卫星的高度和方位角,从而进行必要的对流层校正;
4.计算伪距,并进行电离层校正等;
5.重复上述过程,对所有可用卫星进行相应的计算;
6.进行其他必要的校正,例如根据卫星信号到达GPS接收机的时间,校正地球旋转所造成的卫星位置的偏差;
7.根据定位原理,计算出GPS接收机的初始位置,并将其转换成所需的坐标格式进行显示或输出;
8.加入闰秒和UTC(标准世界时)时间补偿计算当前精确的时间;
9.分析可用卫星的信息,计算最好的DOP(DilutionofPrecision),进行选星,并计算和修正GPS接收机的位置,给出GPS接收机的三维坐标和准确的时间信息。
2.2GPS模块的主要技术参数及其特点
主要技术参数:
(1)工作电压:
3.5~5V直流。
(2)接收灵敏度:
-159dBm。
(3)体积大小:
25.4×25.4×7mm。
(4)模块重量:
7克。
(5)定位精度:
<3m
(6)系统内存:
4MB
2.3NMEA-0183数据格式
NMEA-0183数据格式如下图:
注意:
加电后最长3s有数据输出。
设定多个参数时,两个命令的发送时间间隔应在40ms以上。
第三章硬件连接电路
3.1基于51单片机的GPS定位系统设计
(1)实训要求
此实训的工作要求是:
在液晶屏上显示,接收到的GPS定位信息,只显示纬度、经度、高度、时间、定位有效信息。
在实训中的核心器件是单片机和GPS器件,二者一起实现了单片机对GPS定位信息的采集。
(2)实训原理
GPS模块接收卫星的多颗卫星的定位信息,进行处理后按一定的格式输出串行数据,8250实现串并转换,通过总线与单片机通信。
GPS接收模块默认设置输出为:
(参照GPS接收模块文档)
$PFST,NMEA,E003,4800
在实验中需设置输出为:
$PFST,NMEA,2000
$GPGGA,hhmmss.dd,xxmm.dddd,
hhmmss.dd世界协调时(UTC)
hh:
时;mm:
分;ss:
秒;dd:
秒(小数部分)
xxmm.dddd纬度
xx:
度;mm:
分;dddd:
十进制分(小数部分)
yyymm.dddd经度
yyy:
度;mm:
分;dddd:
十进制分(小数部分)
V定位指示
0:
未定位1:
GPS定位
SS使用到的卫星数量:
0~12颗
d.dHDOP水平方向定位精度阀值
h.h天线高度(相对于海平面)
MNULL
g.gNULL
MNULL
a.aNULL
xxxxNULL
*hhhh:
校验和
从GPGGA输出信息中提取实验中的数据,显示在液晶屏上。
3.2GPS和单片机、LCD的接口连接电路
1.GPS硬件连接原理图:
GPS天线
图3-1GPS硬件连接原理图
2.GPS和单片机、LCD的实物连接图:
图3-2GPS和单片机、LCD的实物连接图
第四章软件设计
4.1实训框图
N
图4-1软件主程序流程图
4.2实训步骤
(1)实验连线:
8250的片选CS50与CS1相连,或把CS50的跳线帽短接CS1端;8255的片选CS8255与CS0相连;PA0~PA7分别与DB0~DB7相连;PC0与REQ相连;PC7与BUSY相连。
(2)运行实验程序GPS.ASM。
(3)观察实验箱上液晶屏上GPS信息显示。
4.3实训结果:
液晶屏分四行显示:
第一行纬度:
LAT(纬度的缩写):
+纬度值+N/S
第二行经度:
LONG(经度的缩写):
+经度值+E/W
第三行高度:
HIGH:
高度值+高度单位M+定位有效A:
0/1(1时有效)
第四行时间:
TIME:
时分秒.秒的小数两位(国际时间)
图4-2GPS定位系统结果图
第五章实验总结
时间过的很快,为期3天的单片机实训结束了。
每次实训对我们来说都有很大的帮助,因为通过实训,我们自己动手操作,身临其境的对问题进行思考,对程序进行分析。
这样更能帮助我们对单片机知识的掌握,和对汇编语言的理解。
最近几次的不同科目的实训,我觉得还是单片机实训最有意思,能提起我们的好奇心,而且让我们觉得单片机与GPS进行通信的技术非常神奇。
小小GPS却有很强大的功能,再通过LCD液晶显示器,将GPS全球定位的结果显示出来。
一开始,我们以为此次单片机实训又是类似之前的中断、定时器、串行口等一些实训那么简单,而且其实过程几乎一样,只不过改变了程序,加深我们对单片机程序的理解,但是这样仍会让我们觉得没有挑战,更激不起我们的好奇心。
而此次实训却让我们非常的感叹。
在程序中对GPS定位进行设置,一开始时只显示“LAT(纬度)”、“LONG(经度)”、“HIGH(高度)”、“TIME(时间)”,四个具体参数,可是这些词语貌似对GPS来说太简单了,而且对我们来说也有点遥远。
通过老师的讲解,我们知道了大致的显示含义,对GPS的工作原理也有了更深刻的了解。
所以通过此次基于51单片机的GPS定位系统的设计,让我们更清楚的了解到GSP与单片机之间的通信的基本原理,单片机、GPS全球定位系统、LCD液晶显示器的工作原理及单片机、GPS全球定位系统、LCD液晶显示器这三者之间存在着微妙的通信连接关系。
并通过LCD液晶显示器显示GPS接收的数据。
实际上单片机CPU是先经过8255可编程芯片,最后再到LCD液晶显示器。
此次实训让我们受益匪浅。
附录
GPS定位系统程序:
#include
#include
#include
#include
#defineucharunsignedchar
#defineCS00xcfa0
#defineCS10xcfa8
#defineCS20xcfb0
#defineCS30xcfb8
#defineCS8255CS0
#definePORTAXBYTE[CS8255]
#definePORTBXBYTE[CS8255+1]
#definePORTCXBYTE[CS8255+2]
#defineCTRLXBYTE[CS8255+3]
#defineSTOBE00x70
#defineSTOBE10x71
#defineCS50CS1
#defineADDR1XBYTE[CS50]
#defineADDR2XBYTE[CS50+1]
#defineINTRXBYTE[CS50+2]
#defineLCRXBYTE[CS50+3]
#defineMCRXBYTE[CS50+4]
#defineLSRXBYTE[CS50+5]
#defineMSRXBYTE[CS50+6]
#defineLENGTH100
unsignedcharxx=0,yy=0;
unsignedcharxdatagps_data[LENGTH];
unsignedcharxdataDisp_Data1[]={"LAT:
"
"LONG:
"
"HIGH:
A:
"
"TIME:
"};
unsignedcharxdata*p_gps=(unsignedchar*)0x7000;
codeconstucharDisp_Data0[]={"LAT:
"
"LONG:
"
"HIGH:
A:
"
"TIME:
"};
codeconstucharGPGGA[]={"$GPGGA,"};
codeconstucharGPS_config[]={"$PUNV,CONFIG,00,0000,00,1000,4800,01*37\r\n"};
codeconstucharTechshine[]={"欢迎光临北京精仪达盛科技有限公司"};
codeconstucharDisp_Char1[]={"abcdefghijklmnopqrst-=\\';?
/12345"
"67890+-*/~!
@#$%^&*()_+|<>?
./;':
\""};
voidInit_8255();
voidDisp_LCD(unsignedcharData);
voidWord_Disp(unsignedcharxx_data,unsignedcharyy_data,unsignedchar*word);
voidByte1_Disp(unsignedcharxx_data,unsignedcharyy_data,unsignedcharAS);
voidByte2_Disp(unsignedcharxx_data,unsignedcharyy_data,unsignedcharAS);
voidDot_Disp(unsignedcharxx_data,unsignedcharyy_data);
voidBDot_Disp(unsignedcharxx_data,unsignedcharyy_data,unsignedcharBT);
voidCLS_Disp();
voidUp_Disp();
voidDown_Disp();
voidLeft_Disp();
voidRight_Disp();
voidDelay_ms(unsignedintData);
voidInit_8250(void);
voidSend_8250(unsignedchars_sbuf);
unsignedcharRece_8250(void);
intstrindex(char*str,char*substr);
voidInit_8255()
{
CTRL=0x88;
CTRL=STOBE0;
}
voidDisp_LCD(unsignedcharData)
{
while((PORTC&0x80)==0x80)
{
;
}
PORTA=Data;
CTRL=STOBE1;
while((PORTC&0x80)!
=0x80)
{
;
}
CTRL=STOBE0;
}
voidWord_Disp(ucharxx_data,ucharyy_data,uchar*word)
{
Disp_LCD(0xf0);
Disp_LCD(xx_data);
Disp_LCD(yy_data);
Disp_LCD((*word)-0xa0);
Disp_LCD((*(word+1))-0xa0);
}
voidByte1_Disp(ucharxx_data,ucharyy_data,ucharAS)
{
Disp_LCD(0xf1);
Disp_LCD(xx_data);
Disp_LCD(yy_data);
Disp_LCD(AS);
}
voidByte2_Disp(ucharxx_data,ucharyy_data,ucharAS)
{
Disp_LCD(0xf9);
Disp_LCD(xx_data);
Disp_LCD(yy_data);
Disp_LCD(AS);
}
voidDot_Disp(ucharxx_data,ucharyy_data)
{
Disp_LCD(0xf2);
Disp_LCD(xx_data);
Disp_LCD(yy_data);
}
voidBDot_Disp(ucharxx_data,ucharyy_data,ucharBT)
{
Disp_LCD(0xf3);
Disp_LCD(xx_data);
Disp_LCD(yy_data);
Disp_LCD(BT);
}
voidCLS_Disp()
{
Disp_LCD(0xf4);
}
voidUp_Disp()
{
Disp_LCD(0xf5);
}
voidDown_Disp()
{
Disp_LCD(0xf6);
}
voidLeft_Disp()
{
Disp_LCD(0xf7);
}
voidRight_Disp()
{
Disp_LCD(0xf8);
}
voidDelay_ms(unsignedintData)
{uchari=248;
while(Data--)
{
i=248;
while(--i);
}
}
voidInit_8250(void)
{uchari;
LCR=0x80;
ADDR1=0x18;
ADDR2=0x00;
LCR=0x03;
ADDR2=0x01;
i=LSR;
i=ADDR1;
}
voidSend_8250(uchars_sbuf)
{while(!
(LSR&0x20))
{;
}
ADDR1=s_sbuf;
}
unsignedcharRece_8250(void)
{while(!
(LSR&0x01))
{;
}
returnADDR1;
}
intstrindex(char*str,char*substr)
{
intend,i,j;
end=strlen(str)-strlen(substr);
if(end>0)
{
for(i=0;i<=end;i++)
for(j=i;str[j]==substr[j-i];j++)
if(substr[j-i+1]=='\0')
returni;
}
return-1;
}
voidmain()
{
unsignedchari=0,tmp=0;
unsignedchar*p=NULL;
intresult=-1;
bitflag=0;
Init_8255();
Init_8250();
CLS_Disp();
for(i=0;i { gps_data[i]='\0'; } fo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 GPS 定位 系统 设计