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

📄 can_gps.lst

📁 单片机和GPS接收机构成的车载卫星定位系统
💻 LST
📖 第 1 页 / 共 5 页
字号:
 967   1      byte_count=0;       //位数计数器
 968   1      cmd_number=0;       //命令类型,数据类型:1、GGA 2、GSV 3、RMC
 969   1      mode=0;             //0:结束模式,1:命令模式(判断数据类型)2:数据模式(数据接受和处理)
 970   1      buf_full=0;         //1:整句接收完成,相应数据有效。0:缓存数据无效。
 971   1      
 972   1      initial_screen();
 973   1      screen_cls();
 974   1      dis_hz_str(1,2,"卫星定位系统",6);
 975   1      dis_hz_str(3,1,"不大点电子实验室",8);
 976   1      dis_hz_str(4,2,"东北农业大学",6);
 977   1      delay_us(60000);
 978   1      instruct(clear);delay_us(100);
 979   1      init();
 980   1      dis_str(2,4,"Connect...",10);
 981   1      delay_us(65000);
 982   1      screen_cls();
C51 COMPILER V8.05a   CAN_GPS                                                              06/20/2008 15:11:44 PAGE 17  

 983   1      }
 984          /**************************************************************************************************/
 985          /********************** 主函数 ********************************************************************/
 986          /**************************************************************************************************/
 987          void main(void)
 988          {
 989   1       uchar key_val;
 990   1       //code uchar buff0[]="a1234567890";
 991   1       //code uchar buff1[]={'a','0','1','2','3','4','5','6','7','8','9'};
 992   1       //uchar str[6];
 993   1                    
 994   1      SYS_init();                /*系统初始化*/
 995   1      InitialCAN();
 996   1      EX0=1;   // 开外部中断
 997   1      IT0=0;   // 外部中断源采用边沿触发方式
 998   1      
 999   1      while(1)
1000   1       {       
1001   2           //key_val=keys();
1002   2               switch(key_val)
1003   2                {
1004   3                 case 1: /*get_24_buff(buff_send_SPI,1);comm_buff(buff_send_SPI,17);*/;break;
1005   3                 case 2: machine_NUM++;break;
1006   3                 case 3: machine_NUM--;break;
1007   3                 case 4: break;
1008   3                 default:break;
1009   3                 }
1010   2           if(buf_full==0)                //无GPS信号时
1011   2            {
1012   3                  dsp_count++;
1013   3                  if(dsp_count>=1000)
1014   3                      {
1015   4                      screen_cls();            //清屏
1016   4                      dis_str(2,1,"No GPS Connect..",16);
1017   4                      while(buf_full==0)
1018   4                                        {
1019   5                                         delay_us(30000);
1020   5                                         //spi_out(NO_GPS,19);
1021   5                                         request_data(NO_GPS,19);
1022   5                                        }
1023   4                      screen_cls();    
1024   4                      dsp_count=0;
1025   4                      }
1026   3             }
1027   2           else
1028   2            {                        //有GPS信号时 
1029   3                if(lock=='0')         //未定位
1030   3                  //spi_out(NO_position,19);
1031   3                      request_data(NO_position,19);        
1032   3                else
1033   3                      {                           //已定位
1034   4                       //data_dispose();
1035   4                   //spi_out(buff_send_SPI,19);
1036   4                       request_data(GPSdata,40);
1037   4                       }
1038   3                //save_24_buff(buff_send_SPI,1);
1039   3                if(buf_full|0x01)     //GGA语句
1040   3                  {                
1041   4                       if(lock=='0')//如果未定位
1042   4                {dis_str(1,1,"**/**/",6);      //日期
1043   5                         dis_str(1,11,"**:**:**",8);   //时间 
1044   5                         dis_str(2,1,"***.**",6);      //海拔
C51 COMPILER V8.05a   CAN_GPS                                                              06/20/2008 15:11:44 PAGE 18  

1045   5                         dis_str(2,11,"***.**",6);     //速度                  
1046   5                 dis_str(3,1,"-----.----",12);
1047   5                         dis_str(3,11,"**",2);         //显示经度方向
1048   5                         dis_str(3,15,"**",2);         //显示接收卫星数
1049   5                 dis_str(4,1," --.--.----  ",12); 
1050   5                         dis_str(4,11,"**",2);         //显示纬度方向
1051   5                         dis_str(4,15,"**",2);             //显示天空卫星总数                   
1052   5                 }
1053   4               else         //如果已定位
1054   4                {  
1055   5                         dis_str(1,1,date,6);          //日期 
1056   5                         dis_str(1,9,time,8);          //时间 
1057   5                         
1058   5                         dis_str(2,1,altitude,7);      //海拔
1059   5                         dis_str(2,11,speed,6);        //速度
1060   5      
1061   5                 dis_str(3,1,JD,10);           //显示经度
1062   5                         dis_str(3,11,JD_a,2);         //显示经度方向
1063   5                         dis_str(3,15,use_sat,2);      //显示接收卫星数
1064   5      
1065   5                 dis_str(4,2,WD,9);            //显示纬度
1066   5                         dis_str(4,11,WD_a,2);         //显示纬度方向
1067   5                         dis_str(4,15,total_sat,2);    //显示天空卫星总数
1068   5      
1069   5                 buf_full&=~0x01;
1070   5                 dsp_count=0;
1071   5                 }
1072   4                       }
1073   3                if(buf_full|0x02)     //GSV语句
1074   3                  {                
1075   4                       dis_str(1,15,total_sat,2);          //显示天空卫星总数
1076   4                       buf_full&=~0x02;
1077   4               dsp_count=0;
1078   4                       }
1079   3                if(buf_full|0x04)     //RMC语句
1080   3                  {                
1081   4                       if(lock=='0')//如果未定位
1082   4                {                   
1083   5                 dis_str(1,1,"**/**/",6);      //日期
1084   5                         dis_str(1,11,"**:**:**",8);   //时间 
1085   5                         dis_str(2,1,"***.**",6);      //海拔
1086   5                         dis_str(2,11,"***.**",6);     //速度                  
1087   5                 dis_str(3,1,"-----.----",12);
1088   5                         dis_str(3,11,"**",2);         //显示经度方向
1089   5                         dis_str(3,15,"**",2);         //显示接收卫星数
1090   5                 dis_str(4,1," --.--.----  ",12); 
1091   5                         dis_str(4,11,"**",2);         //显示纬度方向
1092   5                         dis_str(4,15,"**",2);             //显示天空卫星总数                     
1093   5                 }
1094   4               else         //如果已定位
1095   4                {
1096   5                         dis_str(1,1,date,6);          //日期 
1097   5                         dis_str(1,9,time,6);          //时间
1098   5                         
1099   5                         //dis_str(2,1,altitude,7);    //海拔
1100   5                         dis_str(2,1,high,7);          //高度
1101   5                         dis_str(2,11,speed,6);        //速度
1102   5      
1103   5                 dis_str(3,1,JD,12);           //显示经度
1104   5                         dis_str(3,13,JD_a,2);         //显示经度方向
1105   5                         dis_str(3,15,use_sat,2);      //显示接收卫星数
1106   5      
C51 COMPILER V8.05a   CAN_GPS                                                              06/20/2008 15:11:44 PAGE 19  

1107   5                 dis_str(4,2,WD,11);            //显示纬度
1108   5                         dis_str(4,13,WD_a,2);         //显示纬度方向
1109   5                         dis_str(4,15,total_sat,2);    //显示天空卫星总数
1110   5      
1111   5                 buf_full&=~0x04;
1112   5                 dsp_count=0;
1113   5                 }
1114   4                       }       
1115   3                }
1116   2       }
1117   1      }
1118          /*************************************************************/
1119          /********************** 中断 *********************************/
1120          /*************************************************************/
1121          void  DataReceive()  interrupt 0  using 1
1122          {
1123   1            red=0;                        //接受指示
1124   1            EX0=0;
1125   1            SJA_BCANAdr=REG_INTERRUPT;    //读取中断寄存器值,判断中断类型
1126   1            interrupt_flag=*SJA_BCANAdr;
1127   1            if((interrupt_flag&0x01)==1)//接收中断
1128   1               {
1129   2                BCAN_DATA_RECEIVE(SystemBuf); //读取缓冲区数据
1130   2                BCAN_CMD_PRG(RRB_CMD);        //释放接收缓冲区
1131   2                request_flag=1;
1132   2                }
1133   1             if((interrupt_flag&0x04)==1)//错误中断
1134   1                {
1135   2                 SJA_reset=0; //复位
1136   2                 }
1137   1         EX0=1;
1138   1      }
1139          void time1_int(void) interrupt 3 using 2
1140          {
1141   1      return;
1142   1      }
1143          /*----------------------------------*/
1144          void SCON_int(void) interrupt 4  using 2       //串口接收中断
1145          {
1146   1      unsigned char tmp;
1147   1          if(RI)
1148   1              {
1149   2              tmp=SBUF;
1150   2              switch(tmp)
1151   2              {
1152   3                  case '$':
1153   3                      cmd_number=0;        //命令类型清空
1154   3                      mode=1;              //接收命令模式
1155   3                      byte_count=0;        //接收位数清空
1156   3                                      GPSdataCount=0;          //接收总数据计数器清空
1157   3                      break;
1158   3                  case ',':
1159   3                      seg_count++;         //逗号计数加1
1160   3                      byte_count=0;
1161   3                      break;
1162   3                  case '*':
1163   3                      switch(cmd_number)
1164   3                      {
1165   4                          case 1:
1166   4                              buf_full|=0x01;         //GGA接收完毕
1167   4                              break;                          
1168   4                          case 2:
C51 COMPILER V8.05a   CAN_GPS                                                              06/20/2008 15:11:44 PAGE 20  

1169   4                              buf_full|=0x02;         //GSV接收完毕
1170   4                              break;
1171   4                          case 3:
1172   4                              buf_full|=0x04;         //RMC接收完毕
1173   4                              break;
1174   4                      }
1175   3                      mode=0;
1176   3                      break;
1177   3                  default:
1178   3                      if(mode==1)
1179   3                              {
1180   4                          //命令种类判断
1181   4                          cmd[byte_count]=tmp;            //接收字符放入类型缓存
1182   4                          if(byte_count>=4)
1183   4                              {                //如果类型数据接收完毕,判断类型
1184   5                              if(cmd[0]=='G')
1185   5                                      {
1186   6                                  if(cmd[1]=='P')
1187   6                                      {
1188   7                                      if(cmd[2]=='G')
1189   7                                              {
1190   8                                          if(cmd[3]=='G')
1191   8                                              {
1192   9                                              if(cmd[4]=='A')
1193   9                                                      {
1194  10                                                  cmd_number=1;
1195  10                                                  mode=2;
1196  10                                                  seg_count=0;
1197  10                                                  byte_count=0;
1198  10                                                      }
1199   9                                              }
1200   8                                          else if(cmd[3]=='S')
1201   8                                              {
1202   9                                              if(cmd[4]=='V')
1203   9                                                      {
1204  10                                                  cmd_number=2;
1205  10                                                  mode=2;
1206  10                                                  seg_count=0;
1207  10                                                  byte_count=0;
1208  10           

⌨️ 快捷键说明

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