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

📄 1602gps.lst

📁 基于51单片机与GPS系统的智能坦克车源代码+PROTUES仿真+电路图。欢迎下载~
💻 LST
📖 第 1 页 / 共 2 页
字号:
 192   3                  while(!KEY1);
 193   3                  delayms(10);
 194   3                  return(1);
 195   3              }
 196   2          }
 197   1          return(0);
 198   1      }
 199          
 200          //系统初始化
 201          void sys_init() {
 202   1          unsigned char i;
 203   1          SCON = 0x50;     /* SCON: mode 1, 8-bit UART, enable rcvr */
 204   1          TMOD = 0x21;     /* TMOD: timer 1, mode 2, 8-bit reload */
 205   1              TH1 = 0xfa;            /* TH1: reload value for 4800 baud @ 11.059MHz */
 206   1          if(SPD_TYPE){
 207   2              spd_type=1;            //速度单位km/h
 208   2          }else{
 209   2              spd_type=0;            //速度单位knot
 210   2          }
 211   1          TR1 = 1;         /* TR1: timer 1 run */
 212   1          LCD_init();        //初始化LCD
 213   1          LCD_write_string(0,0,"GPS&GSM TANKING");
 214   1                                                     //显示版权信息
 215   1          LCD_write_string(0,1,"Design by 0523-1");
 216   1          for(i=1;i<10;i++){
 217   2              delayms(250);
 218   2          }
 219   1          LCD_cls();
 220   1              LCD_write_string(0,0,"  Faster Higher");
 221   1              LCD_write_string(0,1,"   Stronger!!! ");
 222   1              for(i=1;i<10;i++){
 223   2              delayms(250);
 224   2          }
 225   1              LCD_cls();
 226   1          IE=0x90;            //开总中断、串口中断
 227   1      }
 228          
 229          //串口接收中断
 230          void uart(void) interrupt 4
 231          {
 232   1          unsigned char tmp;
 233   1          if(RI){
 234   2              tmp=SBUF;
 235   2              switch(tmp){
 236   3                  case '$':
 237   3                      cmd_number=0;        //命令类型清空
 238   3                      mode=1;                //接收命令模式
 239   3                      byte_count=0;        //接收位数清空
 240   3                      break;
 241   3                  case ',':
C51 COMPILER V6.23a  1602GPS                                                               06/16/2008 13:14:49 PAGE 5   

 242   3                      seg_count++;        //逗号计数加1
 243   3                      byte_count=0;
 244   3                      break;
 245   3                  case '*':
 246   3                      switch(cmd_number){
 247   4                          case 1:
 248   4                              buf_full|=0x01;
 249   4                              break;
 250   4                          case 2:
 251   4                              buf_full|=0x02;
 252   4                              break;
 253   4                          case 3:
 254   4                              buf_full|=0x04;
 255   4                              break;
 256   4                      }
 257   3                      mode=0;
 258   3                      break;
 259   3                  default:
 260   3                      if(mode==1){
 261   4                          //命令种类判断
 262   4                          cmd[byte_count]=tmp;            //接收字符放入类型缓存
 263   4                          if(byte_count>=4){                //如果类型数据接收完毕,判断类型
 264   5                              if(cmd[0]=='G'){
 265   6                                  if(cmd[1]=='P'){
 266   7                                      if(cmd[2]=='G'){
 267   8                                          if(cmd[3]=='G'){
 268   9                                              if(cmd[4]=='A'){
 269  10                                                  cmd_number=1;
 270  10                                                  mode=2;
 271  10                                                  seg_count=0;
 272  10                                                  byte_count=0;
 273  10                                              }
 274   9                                          }
 275   8                                          else if(cmd[3]=='S'){
 276   9                                              if(cmd[4]=='V'){
 277  10                                                  cmd_number=2;
 278  10                                                  mode=2;
 279  10                                                  seg_count=0;
 280  10                                                  byte_count=0;
 281  10                                              }
 282   9                                          }
 283   8                                      }
 284   7                                      else if(cmd[2]=='R'){
 285   8                                          if(cmd[3]=='M'){
 286   9                                              if(cmd[4]=='C'){
 287  10                                                  cmd_number=3;
 288  10                                                  mode=2;
 289  10                                                  seg_count=0;
 290  10                                                  byte_count=0;
 291  10                                              }
 292   9                                          }
 293   8                                      }
 294   7                                  }
 295   6                              }
 296   5                          }
 297   4                      }
 298   3                      else if(mode==2){
 299   4                          //接收数据处理
 300   4                          switch (cmd_number){
 301   5                              case 1:                //类型1数据接收。GPGGA
 302   5                                  switch(seg_count){
 303   6                                      case 2:                                //纬度处理
C51 COMPILER V6.23a  1602GPS                                                               06/16/2008 13:14:49 PAGE 6   

 304   6                                          if(byte_count<9){
 305   7                                              WD[byte_count]=tmp;
 306   7                                          }
 307   6                                          break;
 308   6                                      case 3:                                //纬度方向处理
 309   6                                          if(byte_count<1){
 310   7                                              WD_a=tmp;
 311   7                                          }
 312   6                                          break;
 313   6                                      case 4:                                //经度处理
 314   6                                          if(byte_count<10){
 315   7                                              JD[byte_count]=tmp;
 316   7                                          }
 317   6                                          break;
 318   6                                      case 5:                                //经度方向处理
 319   6                                          if(byte_count<1){
 320   7                                              JD_a=tmp;
 321   7                                          }
 322   6                                          break;
 323   6                                      case 6:                                //定位判断
 324   6                                          if(byte_count<1){
 325   7                                              lock=tmp;
 326   7                                          }
 327   6                                          break;
 328   6                                      case 7:                                //定位使用的卫星数
 329   6                                          if(byte_count<2){
 330   7                                              use_sat[byte_count]=tmp;
 331   7                                          }
 332   6                                          break;
 333   6                                      case 9:                                //高度处理
 334   6                                          if(byte_count<6){
 335   7                                              high[byte_count]=tmp;
 336   7                                          }
 337   6                                          break;
 338   6                                  }
 339   5                                  break;
 340   5                              case 2:                //类型2数据接收。GPGSV
 341   5                                  switch(seg_count){
 342   6                                      case 3:                                //天空中的卫星总数
 343   6                                          if(byte_count<2){
 344   7                                              total_sat[byte_count]=tmp;
 345   7                                          }
 346   6                                          break;
 347   6                                  }
 348   5                                  break;
 349   5                              case 3:                //类型3数据接收。GPRMC
 350   5                                  switch(seg_count){
 351   6                                      case 1:
 352   6                                          if(byte_count<6){                //时间处理
 353   7                                              time[byte_count]=tmp;    
 354   7                                          }
 355   6                                          break;
 356   6                                      case 7:                                //速度处理
 357   6                                          if(byte_count<5){
 358   7                                              speed[byte_count]=tmp;
 359   7                                          }
 360   6                                          break;
 361   6                                      case 8:                                //方位角处理
 362   6                                          if(byte_count<5){
 363   7                                              angle[byte_count]=tmp;
 364   7                                          }
 365   6                                          break;
C51 COMPILER V6.23a  1602GPS                                                               06/16/2008 13:14:49 PAGE 7   

 366   6                                  }
 367   5                                  break;
 368   5                          }
 369   4                      }
 370   3                      byte_count++;        //接收数位加1
 371   3                      break;
 372   3              }
 373   2          }
 374   1          RI=0;
 375   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1787    ----
   CONSTANT SIZE    =    133    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     63      11
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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