통신 > GPS 시계 예제 소스

TODAY1,426 TOTAL2,701,331
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 통신 | GPS시계 | GPS 시계 예제 소스

페이지 정보

작성자 키트 작성일2017-09-01 13:40 조회1,318회 댓글0건

첨부파일

본문

 

3660040649_VEf1ectS_GPS-8.jpg3Ftype3Dw740

 

 
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)|1lcd_E=1delay_us(1); lcd_E=0delay_us(1);
  lcd_Out=(d<<4)|1lcd_E=1delay_us(1); lcd_E=0delay_us(40);
}
//
void lcdCmd(char c){
  lcd_RS=0;
  lcd_Out=c&0xF0lcd_E=1delay_us(1); lcd_E=0delay_us(1);
  lcd_Out=c<<4lcd_E=1delay_us(1); lcd_E=0delay_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//null
    if(strncmp("$GPRMC",rx_buf,6)==0){
      GPS_cut=strtok(rx_buf,",");
      for(i=0GPS_cuti++){ GPS_Dcut[i]=GPS_cutGPS_cut=strtok(0,","); }
//day
      d=(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);
//time
      Zulu_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);
//speed
      Knots=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=0xF0DDRC=0x47//Lcd PORT
  PORTC.6=1//lcd back light on,K128LCD 사용자만
  DDRE.3=1;
//
  UCSR0B=0x98UBRR0L=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*40
Dcut[2][0] A 때에 보내면 됩니다.
신호가 약하면 A라고 해도 엉터리 데이터지만...
//
 
 
 
 

 

댓글 0

조회수 1,318

등록된 댓글이 없습니다.

통신HOME > 통신 > GPS시계 목록

게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기