久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3101|回復(fù): 3
收起左側(cè)

GPS定位單片機(jī)源程序

[復(fù)制鏈接]
ID:184877 發(fā)表于 2017-3-31 19:54 | 顯示全部樓層 |閱讀模式
  1. #include <reg52.h>
  2. void UTCDate2LocalDate(void);
  3. uchar GetMaxDay(uchar Month_Value,uint Year_Value);
  4. bit IsLeapYear(uint uiYear);
  5. //void Scan_Key();
  6. //void GPS_Data_Get(void);
  7. //void GPSShow(void);
  8. uchar start=1;
  9. uchar xdata RX_Buffer[68];
  10. uchar RX_Count = 0;
  11. uchar Hour = 0,Min_High = 0,Min_Low = 0,Sec_High = 0,Sec_Low = 0;
  12. uchar Month = 0,Day = 0,Month_High = 0, Month_Low = 0,Day_Low = 0 ,Day_High = 0, Year_High = 0,Year_Low = 0;
  13. uint Year = 0;
  14. long speed;
  15. bit Flag_GPS_OK = 0;
  16. uchar MaxDay = 0;
  17. uchar KEY_NUM = 0;
  18. uchar  Display_GPGGA_Buffer[68];
  19. uchar  Display_GPRMC_Buffer[68];
  20. bit Flag_OV = 0;
  21. bit Flag_Calc_GPGGA_OK = 0;
  22. bit Flag_Calc_GPRMC_OK = 0;

  23. //**********************************************************
  24. //oˉêyÃû3Æ:        void GPSShow(void)
  25. //oˉêy1|Äü£oGPS×ø±êÏÔê¾
  26. //èë¿ú2Îêy: ÎT  3ö¿ú2Îêy£oÎT
  27. //***********************************************************
  28. void GPSShow(void)
  29. {               
  30.                 if(Flag_Calc_GPRMC_OK == 1 && Flag_Calc_GPGGA_OK == 1)
  31.                 {
  32.                         Flag_Calc_GPGGA_OK = 0;
  33.                         Flag_Calc_GPRMC_OK = 0;
  34.                         start=0;

  35.                         LCD12864_Str_Write(1,1,"Î3¶è£o");                                                //ÏÔê¾ÄúèY                        
  36.                         LCD12864_Data_Write(Display_GPGGA_Buffer[28]);                        //N »òÕß S
  37.                         LCD12864_Data_Write(' ');
  38.                         LCD12864_Data_Write(Display_GPGGA_Buffer[17]);                        //Î3¶è
  39.                         LCD12864_Data_Write(Display_GPGGA_Buffer[18]);                        //Î3¶è
  40.                         LCD12864_Data_Write(0x07);
  41. //                        LCD12864_Str_Write(1,6,"¡ã");
  42.                         LCD12864_Data_Write(Display_GPGGA_Buffer[19]);                        //Î3¶è
  43.                         LCD12864_Data_Write(Display_GPGGA_Buffer[20]);                        //Î3¶è
  44.                         LCD12864_Data_Write(Display_GPGGA_Buffer[21]);                        //Î3¶è
  45.                         LCD12864_Data_Write(Display_GPGGA_Buffer[22]);
  46.                         LCD12864_Data_Write(0x27);                                                                //×Ö·û¡®·Ö¡ˉ
  47.                
  48.                         LCD12864_Str_Write(2,1,"¾-¶è£o");                                                //ÏÔê¾ÄúèY                        
  49.                         LCD12864_Data_Write(Display_GPGGA_Buffer[42]);                        //E »òÕß W
  50.                         LCD12864_Data_Write(Display_GPGGA_Buffer[30]);                        //¾-¶è
  51.                         LCD12864_Data_Write(Display_GPGGA_Buffer[31]);        
  52.                         LCD12864_Data_Write(Display_GPGGA_Buffer[32]);
  53.                         LCD12864_Data_Write(0x07);        
  54. //                        LCD12864_Str_Write(2,6,"¡ã");
  55.                         LCD12864_Data_Write(Display_GPGGA_Buffer[33]);                        
  56.                         LCD12864_Data_Write(Display_GPGGA_Buffer[34]);
  57.                         LCD12864_Data_Write(Display_GPGGA_Buffer[35]);                        
  58.                         LCD12864_Data_Write(Display_GPGGA_Buffer[36]);
  59.                         LCD12864_Data_Write(0x27);                                                        

  60.                         speed=((Display_GPRMC_Buffer[46]*1000+Display_GPRMC_Buffer[48]*100+Display_GPRMC_Buffer[49]*10+Display_GPRMC_Buffer[50])-53328)*1.852; //Ëù¶èo£àï×a»»3é1«àï
  61.                         LCD12864_Str_Write(3,1,"Ëù¶è£o");                                                //ÏÔê¾ÄúèY
  62.                         if(speed>10000)
  63.                         {
  64.                             LCD12864_Data_Write((char)(speed/10000+0x30));
  65.                                 LCD12864_Data_Write((char)(speed%10000/1000+0x30));               
  66.                                 LCD12864_Data_Write('.');               
  67.                                 LCD12864_Data_Write((char)(speed%10000%1000/100+0x30));                        
  68.                                 LCD12864_Data_Write((char)(speed%10000%1000%100/10+0x30));        
  69.                                 LCD12864_Data_Write((char)(speed%10000%1000%100%10+0x30));
  70.                         }
  71.                         else
  72.                         {
  73.                                 LCD12864_Data_Write((char)(speed/1000+0x30));               
  74.                                 LCD12864_Data_Write('.');               
  75.                                 LCD12864_Data_Write((char)(speed%1000/100+0x30));                        
  76.                                 LCD12864_Data_Write((char)(speed%1000%100/10+0x30));        
  77.                                 LCD12864_Data_Write((char)(speed%1000%100%10+0x30));
  78.                         }        
  79.                         LCD12864_Str_Write(3,7,"Km/h");

  80.                         LCD12864_Str_Write(4,1,"o£°Î£o");                                                //ÏÔê¾ÄúèY
  81.                         if('0'<Display_GPGGA_Buffer[54]<='9')        
  82.                         LCD12864_Data_Write(Display_GPGGA_Buffer[54]);        
  83.                         LCD12864_Data_Write(Display_GPGGA_Buffer[55]);        
  84.                         LCD12864_Data_Write(Display_GPGGA_Buffer[56]);
  85.                         if(Display_GPGGA_Buffer[57]!='.')        
  86.                         LCD12864_Data_Write(Display_GPGGA_Buffer[57]);
  87.                         LCD12864_Str_Write(4,7,"Ã×  ");                        
  88.                 }
  89.                 if(start == 1 )
  90.                 {
  91.                    LCD12864_Str_Write(2,3,"×ø±ê»ñè¡ÖD");
  92.                    LCD12864_Str_Write(3,3,"ÇëéÔoó...");
  93.                
  94.                 }        
  95. }               
  96.    //**********************************************************
  97. //oˉêyÃû3Æ:        void GPS_Data_Get(void)
  98. //oˉêy1|Äü£o»ñè¡GPS×a»»oóêy¾Y
  99. //èë¿ú2Îêy: ÎT  3ö¿ú2Îêy£oÎT
  100. //***********************************************************
  101. void GPS_Data_Get(void)
  102. {
  103.         uchar i = 0;
  104.         if(Flag_GPS_OK == 1 && RX_Buffer[4] == 'G' && RX_Buffer[6] == ',' && RX_Buffer[13] == '.')        //è·¶¨êÇ·ñêÕμ½"GPGGA"Õaò»Ö¡êy¾Y
  105.                 {
  106.                         for( i = 0; i < 68 ; i++)
  107.                         {
  108.                                 Display_GPGGA_Buffer[i] = RX_Buffer[i];        
  109.                         }
  110.                         Hour = (Display_GPGGA_Buffer[7]-0x30)*10+(Display_GPGGA_Buffer[8]-0x30)+8;                        //UTCê±¼ä×a»»μ½±±¾©ê±¼äUTC+8   
  111.                                                                                                                                                                                                 //0X30ÎaASCIIÂë×a»»Îaêy×Ö
  112.                                 if( Hour >= 24)                                                                                                                                        //òç3ö
  113.                         {
  114.                                 Hour %= 24;                                                                                                                                                //»ñè¡μ±Ç°Hour
  115.                                 Flag_OV = 1;                                                                                                                                        //èÕÆú½øÎ»
  116.                         }
  117.                         else
  118.                         {
  119.                                 Flag_OV = 0;
  120.                         }

  121.                         Min_High = Display_GPGGA_Buffer[9];
  122.                         Min_Low = Display_GPGGA_Buffer[10];
  123.         
  124.                         Sec_High = Display_GPGGA_Buffer[11];
  125.                         Sec_Low = Display_GPGGA_Buffer[12];

  126.                         Flag_Calc_GPGGA_OK = 1;
  127.                 }
  128.         if(Flag_GPS_OK == 1 && RX_Buffer[4] == 'M' && RX_Buffer[52] == ',' && RX_Buffer[59] == ',')        //è·¶¨êÇ·ñêÕμ½"GPRMC"Õaò»Ö¡êy¾Y
  129.                 {
  130.                         for( i = 0; i < 68 ; i++)
  131.                         {
  132.                                 Display_GPRMC_Buffer[i] = RX_Buffer[i];        
  133.                         }

  134.                         Year_High = Display_GPRMC_Buffer[57];
  135.                         Year_Low = Display_GPRMC_Buffer[58];

  136.                         Month_High = Display_GPRMC_Buffer[55];
  137.                         Month_Low = Display_GPRMC_Buffer[56];

  138.                         Day_High = Display_GPRMC_Buffer[53];
  139.                         Day_Low = Display_GPRMC_Buffer[54];


  140.                         if(Flag_OV == 1)                                                                                                                                        //óD½øÎ»
  141.                         {
  142.                                 UTCDate2LocalDate();                                                                                                                        //UTCèÕÆú×a»»Îa±±¾©ê±¼ä               
  143.                         }

  144.                         Flag_Calc_GPRMC_OK = 1;
  145.                 }
  146. }
  147. //**********************************************************
  148. //oˉêyÃû3Æ:        void RECEIVE_DATA(void) interrupt 8 using 3
  149. //oˉêy1|Äü£oÖD¶Ïoˉêy£¬í¨1y′®¿ú¶t»ñè¡GPSÔ-ê¼êy¾Y
  150. //èë¿ú2Îêy: ÎT  3ö¿ú2Îêy£oÎT
  151. //***********************************************************
  152. void RECEIVE_DATA(void) interrupt 8 using 3                          
  153. {
  154.         uchar temp=0;
  155.         SCON =0x50;                                                                                                                //Çå3yÖD¶ÏÇëÇó
  156.         IE2=0x00;                                                                                                                         //1رÕ′®¿ú¶tÖD¶Ï
  157.         temp = S2BUF;

  158.         
  159.         if(temp == ')
  160.         {
  161.                 RX_Count = 0;
  162.                 Flag_GPS_OK = 0;               
  163.         }

  164.         RX_Buffer[RX_Count++] = temp;

  165.         if(RX_Count >= 59)
  166.         {
  167.                 RX_Count = 59;
  168.                 Flag_GPS_OK = 1;               
  169.         }
  170.         IE=0x01;                                                                                                                           //′ò¿a′®¿úÖD¶Ï
  171. }

  172. //**********************************************************
  173. //oˉêyÃû3Æ:        void UTCDate2LocalDate(void)
  174. //oˉêy1|Äü£oUTCèÕÆúóëμ±μØèÕÆú×a»»
  175. //èë¿ú2Îêy: ÎT  3ö¿ú2Îêy£oÎT
  176. //**********************************************************
  177. void UTCDate2LocalDate(void)
  178. {
  179.         Day = (Day_High - 0x30) * 10 + (Day_Low-0x30) + 1;                                        //èÕ  ¼óò»
  180.         Month = (Month_High - 0x30) * 10 + (Month_Low - 0x30);
  181.         Year = 2000 + (Year_High - 0x30) * 10 + (Year_Low - 0x30);
  182.         
  183.         MaxDay = GetMaxDay(Month,Year);                                                                                //»ñè¡μ±Ô ììêy ×î′óÖμ
  184.         if(Day > MaxDay)                                                                                                        //òç3ö
  185.         {
  186.                 Day = 1;
  187.                 Month += 1;
  188.                 if(Month > 12)
  189.                 {
  190.                         Year+=1;
  191.                 }
  192.         }

  193.         Day_High = Day/10 + 0x30;                                                                                        //×a»»èÕÆúÖμÎaASCII
  194.         Day_Low = Day%10 + 0x30;

  195.         Month_High = Month/10 + 0x30;                                                                                //×a»»Ô·YÖμÎaASCII
  196.         Month_Low = Month%10 + 0x30;

  197.         Year_High = Year%100/10 + 0x30;                                                                                //×a»»Äê·YÖμÎaASCII
  198.         Year_Low = Year%10 + 0x30;                        
  199. }
  200. //**********************************************************
  201. //oˉêyÃû3Æ:        uchar GetMaxDay(uchar Month_Value,uint Year_Value)
  202. //oˉêy1|Äü£o»ñè¡μ±ÔÂèÕÆú×î′óÖμ
  203. //èë¿ú2Îêy: uchar Month_Value,uint Year_Value  3ö¿ú2Îêy£ouchar
  204. //**********************************************************
  205. uchar GetMaxDay(uchar Month_Value,uint Year_Value)
  206. {
  207.         unsigned char iDays;
  208.         switch(Month_Value)
  209.         {
  210.                 case 1:
  211.                 case 3:
  212.                 case 5:
  213.                 case 7:
  214.                 case 8:
  215.                 case 10:
  216.                 case 12:
  217.                         {
  218.                                 iDays = 31;
  219.                         }
  220.                         break;
  221.                 case 2:
  222.                         {                                                                                                                                                                                                                                                                                                               
  223.                                 iDays = IsLeapYear(Year_Value)?29:28;                                         //2Ô·Y±è½ÏìØêa£¬Dèòa¸ù¾YêÇ2»êÇèòÄêà′ÅD¶Ïμ±ÔÂêÇ28ìì»129ìì
  224.                         }
  225.                         break;
  226.                 case 4:
  227.                 case 6:
  228.                 case 9:
  229.                 case 11:
  230.                         {
  231.                                 iDays = 30;
  232.                         }
  233.                         break;
  234.                 default : break;
  235.         }
  236.         return(iDays);                                                
  237. }
  238. //**********************************************************
  239. //oˉêyÃû3Æ:        bit IsLeapYear(uint uiYear)
  240. //oˉêy1|Äü£oèòÄê¼ì2a
  241. //èë¿ú2Îêy: uint uiYear  3ö¿ú2Îêy£obit
  242. //**********************************************************
  243. bit IsLeapYear(uint uiYear)
  244. {
  245.         return (((uiYear%4)==0)&&((uiYear%100)!=0))||((uiYear%400)==0);
  246. }




  247. #endif

復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:116826 發(fā)表于 2017-4-1 06:39 | 顯示全部樓層
沒仔細(xì)看嗎,有很多亂碼。
回復(fù)

使用道具 舉報(bào)

ID:371527 發(fā)表于 2018-7-14 17:34 | 顯示全部樓層
亂碼沒關(guān)系,那僅是注釋顯示錯(cuò)誤
回復(fù)

使用道具 舉報(bào)

ID:373174 發(fā)表于 2018-7-17 15:05 | 顯示全部樓層
有人做出效果圖嘛  發(fā)一下可以么
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲黄色国产 | 久久在线 | av在线电影网 | 国产日韩在线观看一区 | 欧美在线一区二区三区 | 亚洲久草 | 视频一区二区三区中文字幕 | 91精品国产综合久久久久久丝袜 | 亚洲激情一区二区三区 | 国久久 | 国产在线观看 | 国内精品久久久久久 | 国产精品国产a级 | 日日干日日 | 国产精品中文字幕在线播放 | 日韩成人一区 | 欧美日韩中文在线观看 | 97国产精品视频人人做人人爱 | a级大片免费观看 | 亚洲综合天堂网 | 国产高清免费 | 日韩在线播放一区 | 久久久久久久久久久丰满 | 在线免费观看一区二区 | 成人综合一区二区 | 国产视频1区 | 欧美中文在线 | 久草视| 亚洲精品美女视频 | 网站一区二区三区 | 午夜影院在线观看免费 | 国产精品自拍视频 | 日韩久久精品视频 | 亚洲福利在线观看 | 91社区在线观看 | 一区二区三区免费在线观看 | 欧美日韩国产传媒 | 精品日韩一区二区 | 国产 日韩 欧美 在线 | 亚洲三区视频 | 精品国产一区二区三区观看不卡 |