/*************************************
GPS解码12864显示程序
作者:HEKUN
***************************************/
#include "GPSData.h"
//#include <reg51.h>
//#include <stdio.h>
char code TIME_AREA= 8; //时区
//GPS数据存储数组
unsigned char JD[10]; //经度
unsigned char JD_a; //经度方向
unsigned char WD[9]; //纬度
unsigned char WD_a; //纬度方向
unsigned char time[6]; //时间
unsigned char speed[4];
unsigned char date[6];
//串口中断需要的变量
unsigned char seg_count; //逗号计数器
//unsigned char dot_count; //小数点计数器
unsigned char byte_count; //位数计数器
unsigned char cmd_number; //命令类型
unsigned char mode; //0:结束模式,1:命令模式,2:数据模式
unsigned char buf_full; //1:整句接收完成,相应数据有效。0:缓存数据无效。
unsigned char cmd[5]; //命令类型存储数组
//显示需要的变量
unsigned int dsp_count; //刷新次数计数器
unsigned char time_count;
//void sys_init(void);
main()
{
unsigned char i;
unsigned char Tim0,Tim1;
// unsigned char data2;
// char Bhour=0;
sys_init();
while(1)
{
if(buf_full==0) //无GPS信号时
{
dsp_count++;
if(dsp_count>=65000){
//initial_lcd1602();//Init_Lcd12864(); //清屏
//ResetCursor(0,2);
lcd_displaystr(0,0x00,"No GPS ..");//printf("No GPS connect..");
while(buf_full==0);
//ClearAS();
dsp_count=0;
}
}
else if(buf_full)
{ //有GPS信号时 //RMC语句
//ResetCursor(0,0);
//lcd_displaystr(0,0x00,"GPS System!");
lcd_displaystr(1,0x00,"JD: E");//printf("JD:");
//ResetCursor(3,0);
//printf("%c",JD_a);
//显示经度
for(i=0;i<10;i++){
LCD_write_char(1,0x03+i,JD[i]);
//ResetCursor(i+4,0);
//printf("%c",JD[i]);
}
delay_nms(10000);
//ResetCursor(0,1);
lcd_displaystr(1,0x00,"WD: N"); //printf("WD:");
// ResetCursor(3,1);
//printf("%c",WD_a);
for(i=0;i<9;i++) //显示纬度
{
LCD_write_char(1,0x03+i,WD[i]);
// ResetCursor(i+4,1);
// printf("%c",WD[i]);
}
delay_nms(10000);
//ResetCursor(0,2);
lcd_displaystr(1,0x00,"BJT: : : ");//printf("BJT:");
// ResetCursor(4,2);
// printf("%c",date[4]);
// ResetCursor(5,2);
// printf("%c",date[5]);
// ResetCursor(6,2);
// printf("%c",date[2]);
// ResetCursor(7,2);
// printf("%c",date[3]);
// ResetCursor(8,2);
// printf("%c",date[0]);
// ResetCursor(9,2);
// printf("%c",date[1]);
// time[0]=((time[0]-'0')*10+(time[1]-'0'))/10+'0';
// time[1]=((time[0]-'0')*10+(time[1]-'0'))%10+'0';
// for(i=0;i<6;i++) //显示Time
// {
///LCD_write_char(1,0x05,((time[1]-0x30)+8)/10+time[0]);
///delay_nms(5);
///LCD_write_char(1,0x06,((time[1]-0x30)+8)%10);
///delay_nms(5);
if(((time[1]-0x30)+(time[0]-0x30)*10)<16)
{
Tim0=((time[1]-0x30)+8)/10+(time[0]-0x30);
Tim1=((time[1]-0x30)+8) %10;
delay_nms(5);
}
else if(((time[1]-0x30)+(time[0]-0x30)*10)>15)
{
Tim0=0;
Tim1=((time[1]-0x30)+(time[0]-0x30)*10)-16;
delay_nms(5);
}
LCD_write_char(1,0x05,Tim0);
LCD_write_char(1,0x06,Tim1);
LCD_write_char(1,0x08,time[2]);
LCD_write_char(1,0x09,time[3]);
LCD_write_char(1,0x0b,time[4]);
LCD_write_char(1,0x0c,time[5]);
//ResetCursor(i+10,2);
//printf("%c",time[i]);
// }
delay_nms(10000);
// ResetCursor(0,3);
//// printf("Speed:");
// for(i=0;i<4;i++) //显示speed
// {
// ResetCursor(i+6,3);
/// printf("%c",speed[i]);
// }
// ResetCursor(10,3);
// printf("knots");
lcd_displaystr(1,0x00,"RQ: 20 - - ");
LCD_write_char(1,0x06,date[4]);
LCD_write_char(1,0x07,date[5]);
LCD_write_char(1,0x09,date[2]);
LCD_write_char(1,0x0a,date[3]);
LCD_write_char(1,0x0c,date[0]);
LCD_write_char(1,0x0d,date[1]);
delay_nms(10000);
//
///
dsp_count=0;
buf_full&=~0x01;
}
}
}
//系统初始化
void sys_init()
{
// unsigned char i;
SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */
TMOD = 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
TH1=TL1=0xf9; /* TH1: reload value for 4800 baud @ 11.059MHz */
TR1 = 1; /* TR1: timer 1 run */
//Init_Lcd12864(); //初始化LCD
//ResetCursor(0,1);
initial_lcd1602();
lcd_displaystr(0,0x00,"GPS System!");//printf("GPS Monitor V1.2");
//ClearAS();
IE=0x90; //开总中断、串口中断
}
//串口接收中断
void uart(void) interrupt 4
{
unsigned char tmp;
if(RI){
tmp=SBUF;
switch(tmp)
{
case '$':
cmd_number=0; //命令类型清空
mode=1; //接收命令模式
byte_count=0; //接收位数清空
break;
case ',':
seg_count++; //逗号计数加1
byte_count=0;
break;
case '*':
mode=0;
buf_full=1;
break;
default:
if(mode==1){
//命令种类判断
cmd[byte_count]=tmp; //接收字符放入类型缓存
if(byte_count>=4){ //如果类型数据接收完毕,判断类型
if(cmd[0]=='G'){
if(cmd[1]=='P'){
if(cmd[2]=='R'){
if(cmd[3]=='M'){
if(cmd[4]=='C'){
cmd_number=1;
mode=2;
seg_count=0;
byte_count=0;
}
}
}
}
}
}
51单片机读取GPS数据C程序
5星 · 超过95%的资源 需积分: 50 26 浏览量
2011-05-03
18:31:35
上传
评论 15
收藏 41KB RAR 举报
ktomrz
- 粉丝: 1
- 资源: 14
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
- 5
- 6
前往页