GPS全球定位系统仿真(基于PIC)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//----------------------------------------------------main.c---------------------------------------------------
// 名称:GPS全球定位系统仿真
//----------------------------------------------------------------------------------------------------------------
// 说明:在运行时,LCD屏将显示出当前经纬度,时间,速度信息
// 在Proteus环境下完成本实验时,需要运行程序:// 1、Virtual serial port Driver(VSPD,虚拟串口驱动)
// 2、Virtual GPS(虚拟GPS软件)
// 建议在VSPD中将COM3和COM4设为对联串口// Proteus中设COMPIM为COM3,在虚拟GPS软件中选择COM4
// 单片机程序将接收虚拟GPS软件通过串口发回来的信息
// 解析与显示在LCD上。
//
//-----------------------------------------------------------------------------------------------------------------
#include
#include
#include ”PG160128.h”
#include ”PictureDots.h”
volatile INT8U rec_OK = 0;
volatile char time[] = ”00:00:00”;
volatile char Longitude [] = ”ddd\xAl\xE3mm.mmmm’X”; //经度
volatile char Latitude [] = ”dd\xAl\xE3mm.mmmm’X”; //纬度
volatile char Speed[12]; //地面速度
const char p[] = ”SGPRMC”;
//---------------------------------------------------------------------------------------------------------------
// 延时函数
//---------------------------------------------------------------------------------------------------------------
void delay (INT8U x)
{
While (--x)_delay_ms(100);
}
//---------------------------------------------------------------------------------------------------------------
// 串口初始化
//---------------------------------------------------------------------------------------------------------------
void Init_SerialPort()
{
TRISC6 = 0; //TXD 输出
TRISC7 = 1; //RXD 输入
SYNC = 0;//选择异步通信模式
BRGH = 1;//选择高速波特率发生模式
TXEN = 1; //允许发送数据
SPBRG = _XTAL_FREQ/16/4800-1; //设置波特率为4800
SPEN = 1 //串行通信端口打开
CREN = 1;//使能
连续接收串行数据
}
//---------------------------------------------------------------------------------------------------------------
// 主程序
//---------------------------------------------------------------------------------------------------------------
void main()
{
ADCON1 = 6;//RA端口设置为数字端口
TRISC2 = TRISC3 = TRISC4 = 0; //液晶输出端口
PORTD = TRISD = 0x00;
LCD_Initialise(); //初始化LCD
Clear_Screen(); //清屏
Draw_Image((INT8U*) Title_Image,0,0); //显示GPS导航系统标题
Draw_Image((INT8U*) info4_Image,30,0); //显示GPS导航系统4项信息
Init_SerialPort(); //初始化串口
RCIE = 1; //使能接收中断
GIE = 1;//开放全局中断
PEIE = 1;//使能外部中断
While(1)
{
//处理SGPRMC,分解出时间,经纬度及速度信息并显示
If(rec_OK == 1)
{
//显示经度信息
Disp_Str_at_xy(40,36,(char*)Longitude,15,1);
//显示纬度信息
Disp_Str_at_xy(40,52,(char*)Latitude,15,1);
//显示速度信息(Knots 单位转换为km/s)