⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gps.lst

📁 GPS信号接收程序
💻 LST
字号:
C51 COMPILER V8.02   GPS                                                                   09/29/2008 23:53:26 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE GPS
OBJECT MODULE PLACED IN GPS.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE GPS.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg52.h>
   2          #include"GPS.h"
   3          /**********************************************************
   4                  LCD1602.c (GPS)
   5                  
   6                  Created by Cao Jian 
   7                  email: cj19870223@sina.com      
   8          *************************************************************/
   9          sbit P07=P0^7;
  10          
  11          unsigned char idata GPS[6];
  12          unsigned char idata GPSBuf0[60];
  13          unsigned char idata m_sTime[9];                                 //提取时间所用
  14          unsigned char idata m_sPositionY[8];                //提取纬度所用
  15          unsigned char idata m_sPositionX[9];                    //提取经度所用
  16          unsigned char idata m_sData[9];                                 //提取日期所用
  17          unsigned char j=8;
  18          unsigned char x=0;
  19          unsigned char y=0;
  20          unsigned char m=0;
  21          unsigned char n=0;
  22          
  23          void inituart()
  24          {
  25   1              TMOD=0x20;//定时器1,方式2 
  26   1              TH1=0xfa;//波特率9600 
  27   1              TCON=0x40;//启动定时器1 
  28   1      
  29   1              SCON=0x50;//方式1,允许串行接收 
  30   1              IE=0x90;//开总中断,允许串行中断 
  31   1      }
  32          
  33          void uart() interrupt 4 using 1
  34          {
  35   1              unsigned char i;
  36   1              unsigned char SectionID=0;
  37   1      
  38   1              if(RI==1)
  39   1              {
  40   2                      RI=0;//清除中断 
  41   2                      GPS[0]=SBUF;    
  42   2      
  43   2                      if(GPS[0]=='$')
  44   2                      {
  45   3                              RI=0;
  46   3                              SectionID=0;
  47   3                              for(i=1;i<6;i++)
  48   3                              {
  49   4                                      while(!RI);     //等待该次八位数据接收完毕 
  50   4                                      RI=0;//清除中断  
  51   4                                      GPS[i]=SBUF;
  52   4                              }
  53   3      
  54   3                              if(GPS[3]=='R')
  55   3                              {
C51 COMPILER V8.02   GPS                                                                   09/29/2008 23:53:26 PAGE 2   

  56   4                                      if(j==9)
  57   4                                      {
  58   5                                              for(i=0;i<70;i++)
  59   5                                              {
  60   6                                                      while(!RI);     //等待该次八位数据接收完毕 
  61   6                                                      RI=0;//清除中断  
  62   6                                                      GPSBuf0[i]=SBUF;
  63   6                                                      if(GPSBuf0[i]=='*')break;//校验位不再接收
  64   6                                                      if(SBUF==',')
  65   6                                                              SectionID++;              //提取逗号个数
  66   6                                                      else
  67   6                                                      {
  68   7                                                              switch(SectionID)
  69   7                                                              {
  70   8                                                                      case 1: m_sTime[x++]=SBUF;                 break;          //提取时间
  71   8                                                                      case 3: m_sPositionY[y++]=SBUF;    break;          //提取纬度
  72   8                                                                      case 5: m_sPositionX[m++]=SBUF;    break;          //提取经度
  73   8                                                                      case 9: m_sData[n++]=SBUF;         break;          //提取日期
  74   8                                                                      default: break;
  75   8                                                              }
  76   7                                                      }
  77   6                                              }
  78   5                                              //等待校验位发送完毕
  79   5                                              while(!RI);
  80   5                                              RI=0;
  81   5                                              while(!RI);
  82   5                                              RI=0;
  83   5                                                              
  84   5                                              j=0;
  85   5                                      }
  86   4                                      else j=j+1;
  87   4                              }
  88   3                      }
  89   2              }
  90   1      }
  91          
  92          void main()
  93          {
  94   1              unsigned int m,n;
  95   1              unsigned char temp;
  96   1      
  97   1              LCD_init();
  98   1      
  99   1              LCD_write_string("Welcome!");
 100   1              LCD_en_com(0xc3);
 101   1              LCD_write_string("Show you these!!!");
 102   1      
 103   1              inituart();
 104   1              while(1)
 105   1              {
 106   2                      if(j==0)
 107   2                      {
 108   3                              //调整时间 
 109   3                              m_sTime[0]=m_sTime[0]-'0';
 110   3                              m_sTime[1]=m_sTime[1]-'0';
 111   3      
 112   3                              temp=m_sTime[0]*10+m_sTime[1];
 113   3                              if(temp>=16)                            
 114   3                              {//如果大于等于16就-16 
 115   4                                              
 116   4                                      temp=temp-16;
 117   4                                      m_sTime[0]=temp/10;
C51 COMPILER V8.02   GPS                                                                   09/29/2008 23:53:26 PAGE 3   

 118   4                                      m_sTime[1]=temp%10;
 119   4                              }
 120   3                              else  
 121   3                              {//否则就+8 
 122   4                                      temp=temp+8;
 123   4                                      m_sTime[0]=temp/10;
 124   4                                      m_sTime[1]=temp%10;
 125   4                              }
 126   3                              m_sTime[0]=m_sTime[0]+0x30;
 127   3                              m_sTime[1]=m_sTime[1]+0x30;     
 128   3                              //显示数据
 129   3                              LCD_en_com(0x01);
 130   3                              _nop_();
 131   3                              _nop_();
 132   3                              _nop_();
 133   3                              _nop_();
 134   3                              LCD_en_com(0x7d);                                               //???
 135   3                              _nop_();
 136   3                              _nop_();
 137   3                              _nop_();
 138   3                              _nop_();
 139   3                              //LCD_write_string("$GPRMC");
 140   3                              LCD_write_string(m_sTime);
 141   3                              LCD_write_string(m_sPositionY);
 142   3                              LCD_write_string(m_sPositionX);
 143   3                              LCD_write_string(m_sData);
 144   3                              //LCD_write_string("It's Over....");
 145   3                                       
 146   3                              j=1;
 147   3                              P07=!P07;
 148   3                              for(m=0;m<280;m++)
 149   3                                      for(n=0;n<200;n++);
 150   3                      }
 151   2      
 152   2                      for(m=0;m<280;m++)
 153   2                              for(n=0;n<200;n++);
 154   2      
 155   2                      LCD_en_com(0x18);//整屏左移 
 156   2              }
 157   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    629    ----
   CONSTANT SIZE    =     27    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5       2
   IDATA SIZE       =    101    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -