BASIC4MCU | 통신 | GPS시계 | GPS 시계 예제 소스
페이지 정보
작성자 키트 작성일2017-09-01 13:40 조회1,318회 댓글0건첨부파일
본문
0 1 2 3 4 5 6 7 8 9 10 11 12<-Dcut[]$GPRMC,004343.000,A,3657.4760,N,12806.0945,E,34.36,344.26,110114,0,0,A*58$GPRMC,004344.000,A,3657.4675,N,12806.1714,E,34.43,343.61,110114,0,0,A*57$GPRMC,004345.000,V,3657.4766,N,12806.1681,E,34.43,343.61,110114,0,0,E*4B$GPRMC,004346.000,V,3657.4858,N,12806.1647,E,34.43,343.61,110114,0,0,E*40$GPRMC,004347.000,V,3657.4950,N,12806.1613,E,34.43,343.61,110114,0,0,E*49$GPRMC,004348.000,V,3657.5042,N,12806.1580,E,34.43,343.61,110114,0,0,E*44$GPRMC,004349.000,V,3657.5134,N,12806.1546,E,34.43,343.61,110114,0,0,E*4F$GPRMC,004350.000,V,3657.5226,N,12806.1512,E,34.43,343.61,110114,0,0,E*46$GPRMC,004351.000,V,3657.5318,N,12806.1479,E,34.43,343.61,110114,0,0,E*47$GPRMC,004352.000,V,3657.5409,N,12806.1445,E,34.43,343.61,110114,0,0,E*4C$GPRMC,004353.000,V,3657.5501,N,12806.1411,E,34.43,343.61,110114,0,0,E*45////[lcd][AVR PortC]//RS(pin4)-----bit 0//RD(pin 5)-----bit 1//EN(pin 6)-----bit 2//사용안함 bit 3//[lcd][AVR PortA]//DB4(pin 11)---bit 4//DB5(pin 12)---bit 5//DB6(pin 13)---bit 6//DB7(pin 14)---bit 7//#include <mega128.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <delay.h>//char rx_buf[100];//char rx_cnt=0;//char*GPS_cut=0;char*GPS_Dcut[16]={0};//char DO,BOON,CHO,HH,MM,SS,y,m,d;long Zulu_time;float speed,Knots;float Latitude,Longitude;//char str[30];//#define lcd_RS PORTC.0#define lcd_E PORTC.2#define lcd_Out PORTA // PORTA.4~7 4bits//void lcdData(char d){lcd_RS=1;lcd_Out=(d&0xF0)|1; lcd_E=1; delay_us(1); lcd_E=0; delay_us(1);lcd_Out=(d<<4)|1; lcd_E=1; delay_us(1); lcd_E=0; delay_us(40);}//void lcdCmd(char c){lcd_RS=0;lcd_Out=c&0xF0; lcd_E=1; delay_us(1); lcd_E=0; delay_us(1);lcd_Out=c<<4; lcd_E=1; delay_us(1); lcd_E=0; delay_us(40);}//void lcd_init(void){delay_ms(50);lcdCmd(0x28); lcdCmd(0x28); lcdCmd(0x28);lcdCmd(0x0C); lcdCmd(0x06); lcdCmd(0x01); delay_ms(2);}//void lcd_gotoxy(char x,char y){if(y==0)lcdCmd(0x80+x);else if(y==1)lcdCmd(0xC0+x);else if(y==2)lcdCmd(0x94+x);else if(y==3)lcdCmd(0xD4+x);}//void lcd_puts(char*str){ while(*str)lcdData(*str++); }void lcd_putsf(char flash*str){ while(*str)lcdData(*str++); }//interrupt[USART0_RXC]void usart0_rx_isr(void){unsigned char RX;int i;RX=UDR0;//if(RX=='$'){ rx_buf[0]='$'; rx_cnt=1; }else if(RX==0x0A){rx_buf[rx_cnt++]=0; //nullif(strncmp("$GPRMC",rx_buf,6)==0){GPS_cut=strtok(rx_buf,",");for(i=0; GPS_cut; i++){ GPS_Dcut[i]=GPS_cut; GPS_cut=strtok(0,","); }//dayd=(GPS_Dcut[9][0]&0x0F)*10+(GPS_Dcut[9][1]&0x0F);m=(GPS_Dcut[9][2]&0x0F)*10+(GPS_Dcut[9][3]&0x0F);y=(GPS_Dcut[9][4]&0x0F)*10+(GPS_Dcut[9][5]&0x0F);//timeZulu_time=atol(GPS_Dcut[1]);HH=(char)(Zulu_time/10000+9)%24;MM=(char)((Zulu_time%10000)/100);SS=(char)(Zulu_time%100);sprintf(str,"20%02d/%02d/%02d%02d:%02d:%02d",y,m,d,HH,MM,SS); lcd_gotoxy(0,0); lcd_puts(str);//speedKnots=atof(GPS_Dcut[7]);speed=Knots*1.8;sprintf(str,"SPEED:%6.2f Km/h ",speed);; lcd_gotoxy(0,1); lcd_puts(str);//Latitude 위 도Latitude=atof(GPS_Dcut[3]);DO=(char)(Latitude/100.0);BOON=(int)Latitude%100;CHO=(char)((Latitude-(int)Latitude)*60.0);sprintf(str,"LATIT:%c%3d\xdf%02d'%02d\x22",GPS_Dcut[4][0],DO,BOON,CHO); lcd_gotoxy(0,2); lcd_puts(str);//Longitude 경도Longitude=atof(GPS_Dcut[5]);DO=(char)(Longitude/100.0);BOON=((int)Longitude%100);CHO=(char)((Longitude-(int)Longitude)*60.0);sprintf(str,"LONGI:%c%3d\xdf%02d'%02d\x22",GPS_Dcut[6][0],DO,BOON,CHO); lcd_gotoxy(0,3); lcd_puts(str);}rx_cnt=0;}else if(RX==0x0D){rx_buf[rx_cnt++]=0; //null}else if(RX==','){if(rx_buf[rx_cnt-1]==',')rx_buf[rx_cnt++]='0'; // 연속된 ','인경우 '0'을 추가함rx_buf[rx_cnt++]=RX;}else{if(rx_cnt<95)rx_buf[rx_cnt++]=RX;}}//void main(void){DDRA=0xF0; DDRC=0x47; //Lcd PORTPORTC.6=1; //lcd back light on,K128LCD 사용자만DDRE.3=1;//UCSR0B=0x98; UBRR0L=103;lcd_init();SREG=0x80;delay_ms(1000);while(1){ };}//GPS 신호가 약해서스피드 및 경도 위도 데이터가 오락가락 합니다.다른데로 데이터를 보내야 하는 경우라면0 1 2 3 4 5 6 7 8 9 10 11 12<-Dcut[]$GPRMC,004343.000,A,3657.4760,N,12806.0945,E,34.36,344.26,110114,0,0,A*58$GPRMC,004344.000,A,3657.4675,N,12806.1714,E,34.43,343.61,110114,0,0,A*57$GPRMC,004345.000,V,3657.4766,N,12806.1681,E,34.43,343.61,110114,0,0,E*4B$GPRMC,004346.000,V,3657.4858,N,12806.1647,E,34.43,343.61,110114,0,0,E*40Dcut[2][0]이 A일 때에 보내면 됩니다.신호가 약하면 A라고 해도 엉터리 데이터지만...//
댓글 0
조회수 1,318등록된 댓글이 없습니다.