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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4718|回復: 1
打印 上一主題 下一主題
收起左側

GPS定位程序 用51單片機+1602實現

[復制鏈接]
跳轉到指定樓層
樓主
          大二的時候學單片機沒事做搞得,現在快工作了,做個 紀念。。
     用到的器件:
           1、89c52
           2、gps
           3、1602顯示器



單片機源程序如下:
  1. //包含頭文件
  2. #include <REG52.h>
  3. #include "uart.c"

  4. //宏定義
  5. #define LCM_Data  P0                  //將P0口定義為LCM_Data
  6. #define uchar unsigned char
  7. #define uint  unsigned int

  8. //1602的控制腳
  9. sbit lcd1602_rs=P2^5;
  10. sbit lcd1602_rw=P2^6;
  11. sbit lcd1602_en=P2^7;

  12. #define RsBuf_N                800

  13. unsigned char xdata RsBuf[RsBuf_N];        //定義串口接收數據緩沖區
  14. uchar code sousuo[]="GPS Searching...";
  15. uint RsPoint;
  16. bit dis_flag=0;
  17. unsigned long weidunum=0;
  18. unsigned long jingdunum=0;
  19. //==================================================================================================
  20. //=======================================LCD1602====================================================
  21. //==================================================================================================
  22. //----------------延時函數,后面經常調用----------------------
  23. void delay(uint xms)//延時函數,有參函數
  24. {
  25.         uint x,y;
  26.         for(x=xms;x>0;x--)
  27.          for(y=10;y>0;y--);
  28. }

  29. //--------------------------寫指令---------------------------
  30. void write_1602com(uchar com)//****液晶寫入指令函數****
  31. {
  32.         lcd1602_rs=0;//數據/指令選擇置為指令
  33.         lcd1602_rw=0; //讀寫選擇置為寫
  34.         P0=com;//送入數據
  35.         delay(1);
  36.         lcd1602_en=1;//拉高使能端,為制造有效的下降沿做準備
  37.         delay(1);
  38.         lcd1602_en=0;//en由高變低,產生下降沿,液晶執行命令
  39. }

  40. //-------------------------寫數據-----------------------------
  41. void write_1602dat(uchar dat)//***液晶寫入數據函數****
  42. {
  43.         lcd1602_rs=1;//數據/指令選擇置為數據
  44.         lcd1602_rw=0; //讀寫選擇置為寫
  45.         P0=dat;//送入數據
  46.         delay(1);
  47.         lcd1602_en=1; //en置高電平,為制造下降沿做準備
  48.         delay(1);
  49.         lcd1602_en=0; //en由高變低,產生下降沿,液晶執行命令
  50. }

  51. //-------------------------初始化-------------------------
  52. void lcd_init(void)
  53. {
  54.         uchar i;
  55.         write_1602com(0x38);//設置液晶工作模式,意思:16*2行顯示,5*7點陣,8位數據
  56.         write_1602com(0x0c);//開顯示不顯示光標
  57.         write_1602com(0x06);//整屏不移動,光標自動右移
  58.         write_1602com(0x01);//清顯示
  59.         delay(1000);
  60.         write_1602com(0x80);
  61.         for(i=0;i<16;i++)
  62.         write_1602dat(sousuo[i]);
  63. }

  64. //  通訊中斷接收程序   中斷函數無返回值
  65.   void uart_rx(void)  interrupt 4        using 3         
  66. {
  67.          EA=0;
  68.            if((RsPoint<RsBuf_N)&&RI) //必須判斷RI是否為1

  69.     {
  70.             RI=0;
  71.                 if(SBUF=='

  72. )
  73.                 RsPoint=0;
  74.             RsBuf[RsPoint++]=SBUF;
  75.     }
  76.         EA=1;
  77. }
  78. //==============================主函數===============================
  79. void main(void)
  80. {
  81.          uint i;
  82.         uchar shi;
  83.          lcd_init();
  84.         Uart_init();
  85.         for(i=0;i<RsBuf_N;i++)
  86.         RsBuf[i]='0';
  87.         while(1)
  88.         {
  89.                    if(RsBuf[0]=='

  90. &&RsBuf[1]=='G'&&RsBuf[2]=='P'&&RsBuf[3]=='G'&&RsBuf[4]=='G'&&RsBuf[5]=='A'&&RsBuf[44]!='0')
  91.                    {
  92.                         if(RI==0&&((RsBuf[30]-48)*100+(RsBuf[31]-48)*10+(RsBuf[32]-48))>=0&&((RsBuf[30]-48)*100+(RsBuf[31]-48)*10+(RsBuf[32]-48))<=180)
  93.                         {
  94.                                 TR0=1;
  95.                                 if(dis_flag==0)
  96.                                 {        
  97.                                         write_1602com(0x80);
  98.                                         write_1602dat('T');
  99.                                         write_1602dat('i');
  100.                                         write_1602dat('m');
  101.                                         write_1602dat('e');
  102.                                         write_1602dat(':');
  103.                                         shi=((RsBuf[7]-0x30)*10+(RsBuf[8]-0x30)+8)%24;
  104.                                         write_1602dat(shi/10+0x30);
  105.                                         write_1602dat(shi%10+0x30);
  106.                                         write_1602dat('-');
  107.                                         write_1602dat(RsBuf[9]);
  108.                                         write_1602dat(RsBuf[10]);
  109.                                         write_1602dat('-');
  110.                                         write_1602dat(RsBuf[11]);
  111.                                         write_1602dat(RsBuf[12]);
  112.                                         write_1602dat(' ');
  113.                                         write_1602dat(' ');
  114.                                         write_1602dat(' ');
  115.                
  116.                                         write_1602com(0xc0);
  117.                                         write_1602dat('W');
  118.                                         write_1602dat('X');
  119.                                         write_1602dat(':');
  120.                                         write_1602dat(RsBuf[46]);
  121.                                         write_1602dat(RsBuf[47]);  
  122.                                         write_1602dat(' ');
  123.                                         write_1602dat(' ');

  124.                                         write_1602com(0xc7);
  125.                                         write_1602dat('J');
  126.                                         write_1602dat('D');
  127.                                         write_1602dat(':');
  128.                                         write_1602dat(RsBuf[49]);
  129.                                         write_1602dat(RsBuf[50]);
  130.                                         write_1602dat(RsBuf[51]);
  131.                                         write_1602dat(RsBuf[52]);
  132.                                         write_1602dat(' ');
  133.                                         write_1602dat(' ');
  134.                                 }
  135.                                 else
  136.                                 {
  137.                                         weidunum=        ((RsBuf[17]-48)*10000000+(RsBuf[18]-48)*1000000)
  138.                                                                 +(((((RsBuf[19]-48)*10)+(RsBuf[20]-48))*100000)/6)
  139.                                                                 +(((((RsBuf[22]-48)*1000)+((RsBuf[23]-48)*100)+((RsBuf[24]-48)*10)+(RsBuf[25]-48))*10)/6);         
  140.                                         write_1602com(0x80);
  141.                                         write_1602dat('W');
  142.                                         write_1602dat('D');
  143.                                         write_1602dat(':');
  144.                                         write_1602dat(' ');
  145.                                         write_1602dat(weidunum/10000000+0x30);
  146.                                         write_1602dat(weidunum%10000000/1000000+0x30);
  147.                                         write_1602dat('.');
  148.                                         write_1602dat(weidunum%1000000/100000+0x30);
  149.                                         write_1602dat(weidunum%100000/10000+0x30);
  150.                                         write_1602dat(weidunum%10000/1000+0x30);
  151.                                         write_1602dat(weidunum%1000/100+0x30);
  152.                                         write_1602dat(weidunum%100/10+0x30);
  153.                                         write_1602dat(weidunum%10+0x30);        
  154.                                         write_1602dat(RsBuf[28]);
  155.                                         write_1602dat(' ');
  156.                                         write_1602dat(' ');
  157.                
  158.                
  159.                                         jingdunum=        (((RsBuf[30]-48)*100000000)+((RsBuf[31]-48)*10000000)+((RsBuf[32]-48)*1000000))
  160.                                                                 +(((((RsBuf[33]-48)*10)+(RsBuf[34]-48))*100000)/6)
  161.                                                                 +(((((RsBuf[36]-48)*1000)+((RsBuf[37]-48)*100)+((RsBuf[38]-48)*10)+(RsBuf[39]-48))*10)/6);           
  162.                                         write_1602com(0xc0);
  163.                                         write_1602dat('J');
  164.                                         write_1602dat('D');
  165.                                         write_1602dat(':');
  166.                                         write_1602dat(jingdunum/100000000+0x30);
  167.                                         write_1602dat(jingdunum%100000000/10000000+0x30);
  168.                                         write_1602dat(jingdunum%10000000/1000000+0x30);
  169.                                         write_1602dat('.');
  170.                                         write_1602dat(jingdunum%1000000/100000+0x30);
  171.                                         write_1602dat(jingdunum%100000/10000+0x30);
  172.                                         write_1602dat(jingdunum%10000/1000+0x30);
  173. ……………………

  174. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
882-GPS定位1602顯示.rar (1.66 MB, 下載次數: 109)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:261025 發表于 2021-8-26 17:00 | 只看該作者
為什么緯度和手機導航軟件手機衛星地圖軟件不一樣   
手機導航上小數是078531  這個程序顯示068181
根據坐標在衛星地圖上看誤差1000多米
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品一区二区视频 | 国产精品99久 | 精品国产乱码久久久久久丨区2区 | 欧美亚洲视频 | 日韩精品一区二区三区中文字幕 | 91精品导航| 国产999精品久久久久久 | 国产一二区在线 | 人人爽人人爽 | 亚洲a视| 能看的av网站 | 亚洲一级二级三级 | 成人免费淫片aa视频免费 | 在线免费观看a级片 | 成人免费观看男女羞羞视频 | 麻豆国产一区二区三区四区 | 福利一区二区在线 | 91精品国产综合久久婷婷香蕉 | 在线精品一区二区 | 久草网址 | 午夜视频网站 | 欧美精品一区在线发布 | 精品欧美一区二区久久久伦 | 久久成人精品视频 | 亚洲精品美女视频 | 日韩在线一区二区三区 | 国产午夜高清 | 亚洲一区国产 | 日韩成人 | 欧美久久免费观看 | 男女久久久 | 日韩靠逼| av网站在线看 | 国产在线一区二区三区 | 黑人久久久 | 日本精品视频在线 | 国产精品99久久久久久www | 日韩精品一区二区三区在线播放 | 免费黄色日本 | 国产精品日韩欧美一区二区三区 | 日韩国产在线 |