|
單片機(jī)源程序如下:
- //======================================================================
- //【版權(quán)】(C) COPYRIGHT 2009 天祥電子TXMCU ALL RIGHTS RESERVED
- //【聲明】此程序僅用于學(xué)習(xí)與參考,引用請注明版權(quán)和作者信息!
- //======================================================================
- //======================================================================
- // 工程名稱: GPS模塊測試程序
- // 文件名稱: main.c
- // 功能描述: GPS模塊接收定位信息,在LCD上顯示
- // 組成文件: main.c LCD.c GPS.c display.c
- // 頭文件: LCD.h GPS.h display.h
- // 程序分析: GPS模塊通過串口向單片機(jī)發(fā)送固定格式的數(shù)據(jù)
- // 單片機(jī)的串口接收到數(shù)據(jù)后,進(jìn)行解析,在LCD上顯示
- // 定位信息包括:日期時(shí)間,經(jīng)緯度,速度,角度,高度
- // 硬件連接: 將GPS模塊插在51STAR實(shí)驗(yàn)箱的MP3模塊插座上,或使用TTL電平
- // 接口和51單片機(jī)連接
- // 維護(hù)記錄: 2009-8-23 v1.0 by xgc
- // 2010-1-30 v1.1 by xgc 加入了可視衛(wèi)星數(shù)量
- //
- // 代碼作者: 相廣超
- //======================================================================
- #include <reg52.h>
- #include <stdio.h>
- #include <string.h>
- #include "GPS.h"
- #include "LCD.h"
- #include "display.h"
- sbit led1 = P1^0; //接收數(shù)據(jù)指示燈
- sbit led2 = P1^1; //GPRMC數(shù)據(jù)有效指示燈
- sbit led3 = P1^2; //GPGGA數(shù)據(jù)有效指示燈
- uchar code init1[] = {"GPS 模塊測試程序"};
- uchar code init2[] = {" WWW*TXMCU*COM "};
- uchar code init3[] = {"GPS 初始化......"};
- uchar code init4[] = {"搜索定位衛(wèi)星...."};
- #define REV_YES led1 = 0
- #define REV_NO led1 = 1
- #define RMC_YES led2 = 0
- #define RMC_NO led2 = 1
- #define GGA_YES led3 = 0
- #define GGA_NO led3 = 1
- char xdata rev_buf[80]; //接收緩存
- uchar xdata rev_start = 0; //接收開始標(biāo)志
- uchar xdata rev_stop = 0; //接收停止標(biāo)志
- uchar xdata gps_flag = 0; //GPS處理標(biāo)志
- uchar xdata change_page = 0; //換頁顯示標(biāo)志
- uchar xdata num = 0; //
- extern GPS_INFO GPS; //在display.c中定義,使用時(shí)要加extern
- //====================================================================//
- // 語法格式: void GPS_Init(void)
- // 實(shí)現(xiàn)功能: GPS初始化,在LCD上顯示初始化信息
- // 參數(shù): 無
- // 返回值: 無
- //====================================================================//
- void GPS_Init(void)
- {
- Lcd_DispLine(0, 0, init1);
- Lcd_DispLine(1, 0, init2);
- Lcd_DispLine(2, 0, init3);
- Lcd_DispLine(3, 0, init4);
- if (GPS_GSV_Parse(rev_buf, &GPS))
- {
- GPS_DispSatellite(); //顯示可視衛(wèi)星數(shù)量
- }
- }
- /****************************************
- 串口初始化
- /****************************************/
- void Uart_Init(void)
- {
- TMOD = 0x21;
- TH0=0x3c;
- TL0=0xb0;
- TH1=0xfd;
- TL1=0xfd;
- TR1=1; //開啟定時(shí)器1
- REN=1; //允許接收數(shù)據(jù)
- SM0=0;
- SM1=1;
- TI=0;
- RI=0;
- EA=1; //開總中斷
- ES=1; //串口1中斷允許
- ET0 = 1; //定時(shí)器1中斷允許
- }
- /****************************************
- 主函數(shù)
- /****************************************/
- void main(void)
- {
- uchar error_num = 0;
- dula = 0;
- wela = 0;
- Uart_Init(); //初始化串口
- Lcd_Init(); //初始化LCD
- GPS_Init(); //初始化GPS
- while(1)
- {
- if (rev_stop) //如果接收完一行
- {
- TR0 = 1; //開啟定時(shí)器
- REV_YES;
- if (change_page % 2 == 1) //換頁
- {
- if (GPS_GGA_Parse(rev_buf, &GPS)) //解析GPGGA
- {
- GGA_YES;
- GPS_DisplayTwo(); //顯示第二頁信息
- error_num = 0;
- gps_flag = 0;
- rev_stop = 0;
- REV_NO;
- }
- else
- {
- error_num++;
- if (error_num >= 20) //如果數(shù)據(jù)無效超過20次
- {
- GGA_NO;
- error_num = 20;
- GPS_Init(); //返回初始化
- }
- gps_flag = 0;
- rev_stop = 0;
- REV_NO;
- }
- }
- else
- {
- if (GPS_RMC_Parse(rev_buf, &GPS)) //解析GPRMC
- {
- RMC_YES;
- GPS_DisplayOne(); //顯示GPS第一頁信息
- error_num = 0;
- gps_flag = 0;
- rev_stop = 0;
- REV_NO;
- }
- else
- {
- error_num++;
- if (error_num >= 20) //如果數(shù)據(jù)無效超過20次
- {
- RMC_NO;
- error_num = 20;
- GPS_Init(); //返回初始化
- }
- gps_flag = 0;
- rev_stop = 0;
- REV_NO;
- }
- }
- }
- }
- }
- /****************************************
- 定時(shí)器中斷
- /****************************************/
- void timer0(void) interrupt 1
- {
- static uchar count = 0;
- TH0 = 0x3c;
- TL0 = 0xb0;
- count++;
- if (count == 100) //5秒鐘
- {
- count = 0;
- change_page++; //換頁
- if (change_page == 10)
- change_page = 0;
- }
- }
- /****************************************
- 串口接收中斷
- /****************************************/
- void Uart_Receive(void) interrupt 4
- {
- uchar ch;
- ES = 0;
- if (RI)
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
GPS模塊測試程序(51).rar
(77.06 KB, 下載次數(shù): 148)
2017-12-2 09:31 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|