![51单片机解析GPS最新程序_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-3/12/7cf06fb4-fa18-4ddf-91ae-cc8672882db9/7cf06fb4-fa18-4ddf-91ae-cc8672882db91.gif)
![51单片机解析GPS最新程序_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-3/12/7cf06fb4-fa18-4ddf-91ae-cc8672882db9/7cf06fb4-fa18-4ddf-91ae-cc8672882db92.gif)
![51单片机解析GPS最新程序_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-3/12/7cf06fb4-fa18-4ddf-91ae-cc8672882db9/7cf06fb4-fa18-4ddf-91ae-cc8672882db93.gif)
![51单片机解析GPS最新程序_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-3/12/7cf06fb4-fa18-4ddf-91ae-cc8672882db9/7cf06fb4-fa18-4ddf-91ae-cc8672882db94.gif)
![51单片机解析GPS最新程序_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-3/12/7cf06fb4-fa18-4ddf-91ae-cc8672882db9/7cf06fb4-fa18-4ddf-91ae-cc8672882db95.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、51单片机解析GPSt新程序这其中包括1602驱动头文件,和解析主程序,使用时分开粘贴到对应的文件中/*LCD1602马区动,兼容LCD2402*/sbitLCD_DB0=P0A0;sbitLCD_DB1=P0A1;sbitLCD_DB2=P0A2;sbitLCD_DB3=P0A3;sbitLCD_DB4=P0A4;sbitLCD_DB5=P0A5;sbitLCD_DB6=P0A6;sbitLCD_DB7=P0A7;sbitLCD1602_RS=P2A4;sbitLCD1602_RW=P2A5;charsbitLCD1602_EN=P2A6;voidLCD_write_char(unsigne
2、dx,unsignedy,unsignedchardat);在指定位置显示字符voidLCD_wMte_string(unsignedcharX,unsignedcharY,unsignedchar*s);/在指定位置显示字符串voidLCD_cls(void);清屏voidLCD_en_command(unsignedcharcommand);voidLCD_en_dat(unsignedchartemp);voidLCD_set_xy(unsignedcharx,unsignedchary);voidLCD_init(unsignedcharbw);voidSET_LCD(unsigned
3、charIO_temp);voiddelayms(unsignedcharms);voidlcddelay(void);unsignedcharLCDIO;unsignedcharBitWidth;voidLCD_cls(void)LCD_en_command(0x01);/0x01清屏delayms(2);voidLCD_en_command(unsignedcharcommand)LCD1602_RS=0;LCD1602_RW=0;LCD1602_EN=0;switch(BitWidth)case4:LCDIO=(command&0xf0);取高4位break;case8:LCDI
4、O=command;break;SET_LCD(LCDIO);LCD1602_EN=1;lcddelay();LCD1602_EN=0;if(BitWidth=4)LCDIO=(command&0x0f)<<4;取低4位SET_LCD(LCDIO);LCD1602_EN=1;lcddelay();LCD1602_EN=0;voidSET_LCD(unsignedcharIO_temp)高4位LCD_DB7=IO_temp&0x80;LCD_DB6=IO_temp&0x40;LCD_DB5=IO_temp&0x20;LCD_DB4=IO_temp&am
5、p;0x10;低4位if(BitWidth=8)LCD_DB3=IO_temp&0x08;LCD_DB2=IO_temp&0x04;LCD_DB1=IO_temp&0x02;LCD_DB0=IO_temp&0x01;voidLCD_en_dat(unsignedchardat)LCD1602_RS=1;LCD1602_RW=0;LCD1602_EN=0;switch(BitWidth)case4:LCDIO=(dat&0xf0);取高4位break;case8:LCDIO=dat;break;SET_LCD(LCDIO);LCD1602_EN=1;lcd
6、delay();LCD1602_EN=0;if(BitWidth=4)LCDIO=(dat&0x0f)<<4;取低4位SET_LCD(LCDIO);LCD1602_EN=1;lcddelay();LCD1602_EN=0;)/*1602输入参数:x、y :显示字符串的坐标,X:0-15, Y:0-1*LCD*LCD第一行显示寄存器地址:0X80-0X8F第二行显示寄存器地址:0XC0-0XCF*2404*LCD*LCD*LCD*LCD第1行显示地址:120(0x800x93) 第2行显示地址:120(0xc00xd3) 第3行显示地址:120(0x940xa7) 第4行显示
7、地址:120(0xd40xe7)*/voidLCD_set_xy(unsignedcharx,unsignedchary)(unsignedcharaddress;if(y=0)address=0x80+x;elseif(y=1)address=0xC0+x;elseif(y=2)address=0x94+x;elseif(y=3)address=0xD4+x;LCD_en_command(address);charvoidLCD_write_char(unsignedx,unsignedy,unsignedchardat)LCD_set_xy(x,y);LCD_en_dat(dat);voi
8、dLCD_write_string(unsignedcharX,unsignedcharY,unsignedchar*s)LCD_set_xy(X,Y);/setaddresswhile(*s)/writecharacterLCDIO=*s;SET_LCD(LCDIO);LCD_en_dat(*s);s+;LCD_init(unsignedcharbw)itWidth=bw;case4:LCD_en_command(0x33);delayms(20);LCD_en_command(0x32);delayms(20);break;case8:LCD_en_command(0x38);delaym
9、s(20);LCD_en_command(0x38);delayms(20);break;LCD_en_command(0x08);0x08delayms(5);LCD_en_command(0x01);0x01delayms(5);LCD_en_command(0x06);0x06模式设置指令写入数据后光标右移delayms(5);LCD_en_command(0x0c);0x0c标,0x0c=不显示,0乂0=显示闪动delayms(5);令显示器off清屏清屏指令光标模式设置进入显示开 令光voiddelayms(unsignedcharms)unsignedchari;while(ms-
10、)for(i=0;i<115;i+);voidlcddelay(void)unsignedchari;for(i=0;i<2;i+);/*GPS解码显示程序,*#include<reg52.h>#include”1602.h”/#include"math.h"#include<stdlib.h>sbitGPS_SPD=P3八2;/GPS模块速率设置sbitKEY1=P3八3;显示内容分屏切换,(T0,T1脚的第二功能为计数器。)charcodeTIME_AREA=8;时区/*这是做的部分更改*/unsignedlongmaxspeed,b
11、;unsignedintcount=0;unsignedinta5;unsignedcharhspeed5;unsignedintdot_count;小数点计数器/unsignedcharx;/GPS数据存储数组unsignedcharJD10;经度unsignedcharJD_a;经度方向unsignedcharWD9;纬度unsignedcharWD_a;纬度方向unsignedchardate6;日期unsignedchartime6;时间unsignedcharspeed5='0','0','0','.','0
12、39;速度unsignedcharhigh6;高度unsignedcharangle5='0','0','0','0','0'方位角unsignedcharuse_sat2;使用的卫星数unsignedchartotal_sat2;天空中总卫星数unsignedcharlock;定位状态串口中断需要的变量unsignedcharseg_count;逗号计数器unsignedcharbyte_count;/位数计数器unsignedcharcmd_number;/命令类型unsignedcharmode;。:结束模式
13、)1:命令模式,2:数据模式unsignedcharbuf_full;/1:整句接收完成)相应数据有效。0:缓存数据无效。unsignedcharcmd5;命令类型存储数组显示需要的变量unsignedintdsp_count;刷新次数计数器/unsignedchartime_count;bitpage;voidsys_init(void);bitchk_key(void);main()unsignedchari;charBhour;sys_init();lock=1;use_sat0='0'use_sat1='0'total_sat0='0't
14、otal_sat1='0'无GPS信号时while(1)if(buf_full=0)dsp_count+;if(dsp_count>=65000)LCD_cls();清屏LCD_write_string(0,0,"NoGPSconnect.");LCD_write_string(0,1,"PleaseCheck.");while(buf_full=0);LCD_cls();dsp_count=0;else有GPS信号时if(chk_key()检测到按键切换显示page=!page;LCD_cls();页面1示经度if(!page)i
15、f(buf_full|0x01)/GGA语句if(lock=0)如果未定位LCD_write_string(0,0,"*-.-.-")LCD_write_string(0,1,"*-.-.-");else如果已定位LCD_write_char(0,0,JD_a);/显for(i=0;i<3;i+)LCD_write_char(i+1,0,JDi);LCD_write_char(4,0,'.');for(i=3;i<10;i+)LCD_write_char(i+2,0,JDi);LCD_write_char(0,1,WD_a);
16、显示纬度LCD_write_char(1,1,'');for(i=0;i<2;i+)LCD_write_char(i+2,1,WDi);LCD_write_char(4,1,'.');for(i=2;i<9;i+)LCD_write_char(i+3,1,WDi);LCD_write_char(14,1,use_sat0);显示接收卫星数LCD_write_char(15,1,use_sat1);buf_full&=0x01;dsp_count=0;if(buf_full|0x02)GSV语句LCD_wMte_char(14,1,total_
17、sat0);LCD_write_char(15,1,total_sat1);buf_full&=0x02;dsp_count=0;if(buf_full|0x04)if(lock=0)如果未定位LCD_write_string(0,0,"*-.-.-"):LCD_write_string(0,1,"*-.-.-");else如果已定位LCD_write_char(0,0,JD_a);显示经度for(i=0;i<3;i+)LCD_write_char(i+1,0,JDi);显示纬显示LCD_write_char(4,0,'.'
18、);for(i=3;i<10;i+)LCD_write_char(i+2,0,JDi);LCD_write_char(0,1,WD_a);度LCD_write_char(1,1,'');for(i=0;i<2;i+)LCD_write_char(i+2,1,WDi);LCD_write_char(4,1,'.');for(i=2;i<9;i+)LCD_write_char(i+3,1,WDi);LCD_write_char(14,0,use_sat0);接收卫星数LCD_write_char(15,0,use_sat1);buf_full&am
19、p;=0x04;dsp_count=0;else页面2if(buf_full|0x01)/GGA语句buf_full&=0x01;dsp_count=0;if(buf_full|0x02)buf_full&=0x02;dsp_count=0;if(buf_full|0x04)RMC语句Bhour=(time0-0x30)*10+time1-0x30)+TIME_AREA;if(Bhour>=24)Bhour-=24;elseif(Bhour<0)Bhour+=24;LCD_write_char(0,1,date4);LCD_write_char(1,1,date5)
20、;LCD_write_char(2,1,date2);LCD_write_char(3,1,date3);LCD_write_char(4,1,date0);LCD_write_char(5,1,date1);LCD_write_char(8,1,Bhour/10+0x30);LCD_write_char(9,1,Bhour%10+0x30);LCD_write_char(10,1,':');LCD_write_char(11,1,time2);LCD_write_char(12,1,time3);LCD_write_char(13,1,':');LCD_wri
21、te_char(14,1,time4);A");LCD_write_char(15,1,time5);LCD_write_string(5,0,"knot在此处做的更改if(lock='0')如果未定位LCD_write_string(0,0,"-.-");LCD_write_string(11,0,"一.-");else已经定位,在此处做的改动。/*/*最大速度处理*/dot_count=0;b=0;for(i=0;i<5;i+)if(speedi!='.')dot_count+;elsebre
22、ak;switch(dot_count)case 1:b=(speed0-'0')*10+(speed2-'0')*1.852;break;case 2:b=(speed0-'0')*100+(speed1-'0')*10+(speed4-'0')*1.852;break;case 3:b=(speed0-'0')*1000+(speed1-'0')*100+(speed2-'0')*10+(speed4-'0')*1.852;break;if(b&g
23、t;maxspeed)maxspeed=b;/*最大速度处理*/if(count<10)for(i=0;i<5;i+)LCD_write_char(i,0,speedi);knotcount+;elseif(count>15)count=0;hspeed0=maxspeed/1000+0x30;把,小数转成字符数组hspeed1=(maxspeed/100)%10+0x30;hspeed2=(maxspeed/10)%10+0x30;hspeed3='.'hspeed4=maxspeed%10+0x30;count+;LCD_write_string(5,0,
24、"Km/hA");LCD_write_char(0,0,hspeed0);LCD_write_char(1,0,hspeed1);LCD_write_char(2,0,hspeed2);LCD_write_char(3,0,hspeed3);LCD_write_char(4,0,hspeed4);/最大速度显*/*/for(i=0;i<5;i+)LCD_write_char(11+i,0,anglei);buf_full&=0x04;dsp_count=0;bitchk_key(void)if(!KEY1)delayms(10);if(!KEY1)while(
25、!KEY1);delayms(10);return(1);LCD_cls();清屏return(0);系统初始化void sys_init() unsigned char i; SCON = 0x50;/*enable rcvr */TMOD = 0x21; /*reload */if(GPS_SPD)TH1 = 0xfa;baud 11.059MHz */elseSCON:TMOD:/* TH1:mode 1, 8-bit UART, timer 1, mode 2, 8-bitreload value for 9600TH1=0xfd;/*TH1:reloadvaluefor4800bau
26、d11.059MHz*/TR1=1;/*TR1:timer1run*/LCD_init(8);初始化LCDLCD_write_string(0,0,"GPSSIRFII2");LCD_write_string(0,1,”11-11-231342");for(i=1;i<4;i+)delayms(250);/LCD_cls();IE=0x90;开总中断、串口中断串口接收中断voiduart(void)interrupt4unsignedchartmp;if(RI)tmp=SBUF;switch(tmp)case'$':cmd_number=0;
27、命令类型清空mode=1;byte_count=0;break;case',':接收命令模式接收位数清空seg_count+;byte_count=0;break;逗号计数加1case1*1.switch(cmd_number)case 1:buf_full|=0x01;break;case 2:buf_full|=0x02;break;case 3:buf_full|=0x04;break;mode=0;break;default:if(mode=1)命令种类判断接收字符放/如果类型数cmdbyte_count=tmp;入类型缓存if(byte_count>=4)接收完
28、毕,判断类型if(cmd0='G')if(cmd1='P')if(cmd2='G')if(cmd3='G')if(cmd4='A')cmd_number=1;mode=2;seg_count=0;byte_count=0;elseif(cmd3='S')if(cmd4='V')cmd_number=2;mode=2;seg_count=0;byte_count=0;elseif(cmd2='R')if(cmd3='M')if(cmd4='C')cmd_number=3;mode=2;seg_count=0;byte_count=0;elseif(mode=2)接收数据处理switch(cmd_number)case 1:类型1数据接收GPGGAswitch(seg_count)case 2: 纬度处理if(byte_count<9)WDbyte_count=tmp;break;case 3: 纬度方向处理if(byte_count<1)WD_a=tmp;break;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年高中数学第一章集合与函数概念1.1.3.2补集及综合应用课时作业含解析新人教A版必修1
- 经准扶贫申请书范文
- 2025年度智能楼宇物业租赁合同范本
- 电影产业与科技创新的融合实践
- 现代城市雕塑的多元化材料选择与实践
- 2025年度建筑工程施工安全监测服务合同
- 四年级教学教学工作计划范文(33篇)
- 转正申请书奶酪
- 现代企业运营的管理咨询指南
- 现代办公环境下财务管理的优化与创新思维
- 2024新版《药品管理法》培训课件
- 浙江省杭州市2024年中考英语真题(含答案)
- 《陆上风电场工程设计概算编制规定及费用标准》(NB-T 31011-2019)
- 《静脉治疗护理技术操作规范》考核试题及答案(共140题)
- 英国文学8.2讲解Sonnet18
- 人事测评理论与方法-课件
- 最新卷宗的整理、装订(全)课件
- 人教版部编道德与法治三年级下册全册全套课件
- 信访事项受理、办理、复查、复核、听证程序课件
- 【北京】施工现场安全生产标准化管理图集
- 部编版小学道德与法治五年级下册教案(全册)
评论
0/150
提交评论