找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2880|回复: 0
打印 上一主题 下一主题
收起左侧

单片机gps远程手机控制直流电机调速系统设计源码

[复制链接]
跳转到指定楼层
楼主
本人校赛做了一个双机通信加gps远程手机控制电机调速装置,现在发上来与大家分享。


所有资料51hei提供下载:
直流电机 互联网 调速系统程序.rar (398.62 KB, 下载次数: 14)

一 硬件构成
1 l298n一个 stc12c60s2最小系统2个(与51最小系统基本相同 具体百度)
2 1.8寸tft屏(淘宝)
3 sim808模块
4 直流减速电机 霍尔传感器
5 1802电池三节 电池盒
6 其他 自己想
二 说明
1 tft屏幕档位初始值不可控  现初始值为8 原因未知 解决
2 tft屏档位及实时速度加减速度上下限未设置
3 调速范围实际0—60转每分钟 范围过小 由经费不足 电机调速范围有限所致
想改可以花钱买好电机
4 经纬度无法实时显示在tft上 能力知识所限 以后解决
5 程序还有不懂 待消化 程序臃肿 待优化
6 调速过程稍慢 远程调速与近程调速无法继承 例如 远程开启电机后近程无法关闭
只能单独远程或近程
7 远程开关启停信息代码会显示在档位上
8 实时转速无法发送给手机

gps远程调速部分程序:
本程序通过GPRS服务器控制LED的亮灭
使用单片机串口1与模块通信;接法如下
    STC单片机   GPRS模块
    P3.0(RXD1)->RXD
    P3.1(TXD1)->TXD
    GND      ->GND
   
    晶振选用11.0592MHz
1、1、板子上电后运行指示灯RUNING_LED会以一秒的频率闪烁;
2、通过单片机的串口1,可以监视模块的登录情况;
3、手机发送“onled”点亮LED;
4、手机发送“offled”熄灭LED;
5、单片机每隔10秒会向服务器发送心跳帧“OK”
6、通过串口助手监控单片机的串口1可以看到服务器发送的信息;

单片机源程序如下:
  1. /**********************************************************************************
  2. * 工程名  :GPRS
  3. * 描述    :测试GPRS连接,并且服务器可以通过GPRS控制LED
  4. * 实验平台:C51
  5. * 库版本  :


  6. * 软件功能说明
  7.    板子上电后运行指示灯RUNING_LED会以一秒的频率闪烁
  8.          服务器发送“onled”点亮LED;
  9.    服务器发送“offled”熄灭LED;
  10.          单片机每隔10秒会向服务器发送心跳帧“OK”
  11. **********************************************************************************/
  12. #include "config.h"
  13. #include "string.h"
  14. #include "delay.h"
  15. #include "uart.h"

  16. #define Automatic_Startup 1     //定义自启动 V1.2版本起有自启动功能
  17. #define Buf2_Max 200
  18. #define Buf1_Max 200                                           //串口2缓存长度
  19. /*************        本地常量声明        **************/
  20. xdata unsigned char content[100]="GPS positioning success";//发送短信内容
  21. static unsigned char *phone="\"18800435381\"";     //短信接收方手机号
  22. //const u8 *string = "AT+CIPSTART=\"TCP\",\"116.31.51.113\",9015";        //IP登录服务器
  23. //sbit RUNING_LED = P1^1;                                        //运行指示灯
  24. //sbit LED                          = P1^2;                                        //控制指示灯
  25. char flag1=0;

  26. /*************  本地变量声明        **************/
  27. xdata u8 Uart1_Buf[Buf1_Max];
  28. xdata u8 Uart2_Buf[Buf2_Max];
  29. u8 Times=0,First_Int = 0,shijian=0;
  30. u8 key_buf=0;
  31. char *p2;
  32. //u16 Heartbeat=0;
  33. //u8 Time_count=0;
  34. bdata u8 Flag;//定时器标志位
  35. sbit Timer0_start =Flag^0;        //定时器0延时启动计数器
  36. //sbit Heart_beat                =Flag^1;        //发送心跳帧标志位
  37. sbit KEY=P3^5;
  38. sbit RUNING_LED=P1^0;

  39. /*************        本地函数声明        **************/
  40. void GPIO_config(void);
  41. void Timer0Init(void);
  42. void CLR_Buf1(void);
  43. u8 Find(u8 *a);
  44. void Second_AT_Command(u8 *b,u8 *a,u8 wait_time);
  45. //void Set_ATE0(void);
  46. //void Connect_Server(void);
  47. //void Rec_Server_Data(void);
  48. void Wait_CREG(void);
  49. //void Send_OK(void);
  50. void Set_Text_Mode(void); //设置短信为TEXT模式
  51. void Check_New_Message(void);  //查询新短信

  52. /*************  外部函数和变量声明*****************/

  53. /*******************************************************************************
  54. * 函数名 : Uart1
  55. * 描述   : 串口1中断服务入口函数
  56. * 输入   :
  57. * 输出   :
  58. * 返回   :
  59. * 注意   :
  60. *******************************************************************************/
  61. void Uart1() interrupt 4
  62. {
  63.     if (RI)
  64.     {
  65.       RI = 0;                           //清除RI位
  66.                         Uart1_Buf[First_Int] = SBUF;            //将接收到的字符串存到缓存中
  67.                         First_Int++;                                        //缓存指针向后移动
  68.                         if(First_Int > Buf1_Max)                       //如果缓存满,将缓存指针指向缓存的首地址
  69.                         {
  70.                                 First_Int = 0;
  71.                         }
  72.     }
  73.     if (TI)
  74.     {
  75.         TI = 0;                          //清除TI位
  76.     }
  77. }

  78. void Timer0Init(void)                //20毫秒@11.0592MHz
  79. {
  80.         AUXR &= 0x7F;                //定时器时钟12T模式
  81.         TMOD &= 0xF0;                //
  82.         TMOD |= 0x01;                //设置定时器模式,16位定时器
  83.         TL0 = 0x00;                  //设置定时器初值
  84.         TH0 = 0xB8;                  //设置定时器初值
  85.         TF0 = 0;                    //清TF0标志
  86.         TR0 = 1;                    //定时器0开始计时
  87.         ET0 = 1;              //使能定时器0中断
  88. }

  89. void Timer0_ISR() interrupt 1
  90. {
  91.         static u8 Time_count=0;
  92.         TR0=0;//关定时器
  93.         TL0 = 0x00;                //重设定时器初值
  94.         TH0 = 0xB8;                //重设定时器初值
  95.         Time_count++;
  96.         if(Time_count>=50)//1秒运行指示灯闪烁
  97.         {
  98.                 Time_count = 0;
  99.                 RUNING_LED =~RUNING_LED;
  100.         }
  101.         /*if(count_20ms) //20ms延时计数器
  102.                 count_20ms--;*/
  103.         /*Heartbeat++;
  104.         if(Heartbeat>500)//每10秒发送心跳帧
  105.         {
  106.                 Heartbeat=0;
  107.                 Heart_beat=1;
  108.         } */
  109.         if(Timer0_start)
  110.         Times++;
  111.         if(Times > (50*shijian))
  112.         {
  113.                 Timer0_start = 0;
  114.                 Times = 0;
  115.         }
  116.         TR0=1;//开定时器
  117. }

  118. void CLR_Buf1(void)
  119. {
  120.         u16 k;
  121.         for(k=0;k<Buf1_Max;k++)      //将缓存内容清零
  122.         {
  123.                 Uart1_Buf[k] = 0x00;
  124.         }
  125.     First_Int = 0;             //接收字符串的起始存储位置
  126. }

  127. void         Wait_CREG(void)
  128. {
  129.         u8 i;
  130.         u8 k;
  131.         i = 0;
  132.         CLR_Buf1();
  133.   while(i == 0)                                
  134.         {
  135.                 CLR_Buf1();        
  136.                 UART1_SendString("AT+CREG?");
  137.                 UART1_SendLR();
  138.                 delay_ms(250);                                                  
  139.             for(k=0;k<Buf1_Max;k++)                              
  140.             {
  141.                         if(Uart1_Buf[k] == ':')
  142.                         {
  143.                                 if((Uart1_Buf[k+4] == '1')||(Uart1_Buf[k+4] == '5'))
  144.                                 {
  145.                                         i = 1;
  146.                                   break;
  147.                                 }
  148.                         }
  149.                 }
  150.         }
  151. }

  152. u8 Find(u8 *a)
  153. {
  154.   if(strstr(Uart1_Buf,a)!=NULL)
  155.             return 1;
  156.         else
  157.                         return 0;
  158. }

  159. /*******************************************************************************
  160. * 函数名 : Timer0_ISR
  161. * 描述   : 定时器0中断服务入口函数,20ms中断一次
  162. * 输入   :
  163. * 输出   :
  164. * 返回   :
  165. * 注意   :
  166. *******************************************************************************/

  167. /*******************************************************************************
  168. * 函数名 : Timer0Init
  169. * 描述   : 定时器0初始化,20ms定时
  170. * 输入   :
  171. * 输出   :
  172. * 返回   :
  173. * 注意   :
  174. *******************************************************************************/


  175. /*******************************************************************************
  176. * 函数名 : CLR_Buf1
  177. * 描述   : 清除串口2缓存数据
  178. * 输入   :
  179. * 输出   :
  180. * 返回   :
  181. * 注意   :
  182. *******************************************************************************/

  183. /*******************************************************************************
  184. * 函数名 : Wait_CREG
  185. * 描述   : 等待模块注册成功
  186. * 输入   :
  187. * 输出   :
  188. * 返回   :
  189. * 注意   :
  190. *******************************************************************************/

  191. /*******************************************************************************
  192. * 函数名 : Find
  193. * 描述   : 判断缓存中是否含有指定的字符串
  194. * 输入   :
  195. * 输出   :
  196. * 返回   : unsigned char:1 找到指定字符,0 未找到指定字符
  197. * 注意   :
  198. *******************************************************************************/


  199. /*******************************************************************************
  200. * 函数名 : Second_AT_Command
  201. * 描述   : 发送AT指令函数
  202. * 输入   : 发送数据的指针、发送等待时间(单位:S)
  203. * 输出   :
  204. * 返回   :
  205. * 注意   :
  206. *******************************************************************************/

  207. void Second_AT_Command(u8 *b,u8 *a,u8 wait_time)         
  208. {
  209.         u8 i;
  210.         u8 *c;
  211.         c = b;                                                                                //保存字符串地址到c
  212.         CLR_Buf1();
  213.   i = 0;
  214.         while(i == 0)                    
  215.         {
  216.                 if(!Find(a))
  217.                 {
  218.                         if(Timer0_start == 0)
  219.                         {
  220.                                 b = c;                                                        //将字符串地址给b
  221.                                 for (b; *b!='\0';b++)
  222.                                 {
  223.                                         UART1_SendData(*b);
  224.                                 }
  225.                                 UART1_SendLR();        
  226.                                 Times = 0;
  227.                                 shijian = wait_time;
  228.                                 Timer0_start = 1;
  229.                    }
  230.     }
  231.            else
  232.                 {
  233.                         i = 1;
  234.                         Timer0_start = 0;
  235.                 }
  236.         }
  237. //        CLR_Buf1();
  238. }

  239. /*******************************************************************************
  240. * 函数名 : Set_ATE0
  241. * 描述   : 取消回显
  242. * 输入   :
  243. * 输出   :
  244. * 返回   :
  245. * 注意   :
  246. *******************************************************************************/
  247. /*void Set_ATE0(void)
  248. {
  249.         Second_AT_Command("ATE0","OK",3);                                                                //取消回显               
  250. }*/
  251. /*******************************************************************************
  252. * 函数名 : Connect_Server
  253. * 描述   : GPRS连接服务器函数
  254. * 输入   :
  255. * 输出   :
  256. * 返回   :
  257. * 注意   :
  258. *******************************************************************************/
  259. /*void Connect_Server(void)
  260. {
  261.         UART1_SendString("AT+CIPCLOSE=1");        //关闭连接
  262.         delay_ms(5);
  263.         Second_AT_Command("AT+CIPSHUT","SHUT OK",2);                //关闭移动场景
  264.         Second_AT_Command("AT+CGCLASS=\"B\"","OK",2);//设置GPRS移动台类别为B,支持包交换和数据交换
  265.         Second_AT_Command("AT+CGDCONT=1,\"IP\",\"CMNET\"","OK",2);//设置PDP上下文,互联网接协议,接入点等信息
  266.         Second_AT_Command("AT+CGATT=1","OK",2);//附着GPRS业务
  267.         Second_AT_Command("AT+CIPCSGP=1,\"CMNET\"","OK",2);//设置为GPRS连接模式
  268.         Second_AT_Command("AT+CIPHEAD=1","OK",2);//设置接收数据显示IP头(方便判断数据来源,仅在单路连接有效)
  269.         Second_AT_Command(string,"OK",5);        
  270.         delay_ms(5);
  271.         CLR_Buf1();
  272. } */
  273. /*******************************************************************************
  274. * 函数名 : Rec_Server_Data
  275. * 描述   : 接收服务器数据函数
  276. * 输入   :
  277. * 输出   :
  278. * 返回   :
  279. * 注意   :
  280. *******************************************************************************/
  281. /*void Rec_Server_Data(void)
  282. {
  283.         if(strstr(Uart1_Buf,"+IPD")!=NULL)                   //若缓存字符串中含有^SISR
  284.         {        
  285.                 Heartbeat=0;        //清除心跳帧计数器
  286.                 Heart_beat=0;
  287.                 delay_ms(10);
  288.                 if(strstr(Uart1_Buf,"onled")!=NULL)
  289.                 {
  290.                         LED = 0;
  291.                 }
  292.                 else if(strstr(Uart1_Buf,"offled")!=NULL)
  293.                 {
  294.                         LED = 1;
  295.                 }
  296.                 CLR_Buf1();
  297.                 Heart_beat=1;//发送应答数据,告诉服务器收到数据               
  298.         }
  299. } */
  300. /*******************************************************************************
  301. * 函数名 : Send_OK
  302. * 描述   : 发送数据应答服务器的指令,该函数在有两功能
  303.                                         1:接收到服务器的数据后,应答服务器
  304.                                         2:服务器无下发数据时,每隔10秒发送一帧心跳,保持与服务器连接
  305. * 输入   :
  306. * 输出   :
  307. * 返回   :
  308. * 注意   :
  309. *******************************************************************************/
  310. /*void Send_OK(void)
  311. {
  312.         Second_AT_Command("AT+CIPSEND",">",2);
  313.         Second_AT_Command("OK\32\0","SEND OK",8);;                        //回复OK
  314.         delay_ms(10);
  315.         CLR_Buf1();
  316. }
  317. */
  318. /*******************************************************************************
  319. * 函数名 : Set_Text_Mode
  320. * 描述   : 设置短信为TEXT文本模式
  321. * 输入   :
  322. * 输出   :
  323. * 返回   :
  324. * 注意   :
  325. *******************************************************************************/
  326. void Set_Text_Mode(void)
  327. {
  328.         //unsigned char temp[25]="AT+CSCA=";
  329.         Second_AT_Command("ATE0","OK",3);                                                                                //取消回显        
  330.         Second_AT_Command("AT+CMGF=1","OK",3);                                                                //TEXT模式        
  331.         Second_AT_Command("AT+CSCS=\"GSM\"","OK",3);//所有操作都在SIM卡中进行
  332.         Second_AT_Command("AT+CSMP=17,167,0,241","OK",3);

  333.         Second_AT_Command("AT+CNMI=3,2,0,0,0","OK",3);
  334.         Second_AT_Command("AT+CPMS=\"SM\",\"SM\",\"SM\"","OK",3);                //所有操作都在SIM卡中进行                        
  335.                                 
  336.         Second_AT_Command("AT+CSCA?","OK",3);
  337. //        strcat(temp,SMS_Num); //字符串拼接函数(库函数)
  338.         //Second_AT_Command(temp,"OK",3);//设置短信中心号
  339. }

  340. void Check_New_Message(void)
  341. {
  342.         u8 temp=0;
  343.         if(strstr(Uart1_Buf,"+CMT")!=NULL)                   //若缓存字符串中含有"+CMT"就表示有新的短信
  344.         {
  345.                 delay_ms(3);//等待数据全部接收完成
  346.                 if(strstr(Uart1_Buf,"aa")!=NULL)        ///短信识别短信内容 通过串口2发送给另一个单片机信息
  347.                 {
  348.                 UART2_SendString("11105");
  349.                 }
  350.                 else
  351.                 if(strstr(Uart1_Buf,"ab")!=NULL)
  352.                 {
  353.                                 UART2_SendString("11106");

  354.                 }
  355.                 else
  356.                         if(strstr(Uart1_Buf,"ac")!=NULL)
  357.                 {
  358.                                 UART2_SendString("11107");//前三位为速度开关信息

  359.                 }
  360.                 else
  361.                 if(strstr(Uart1_Buf,"ad")!=NULL)
  362.                 {
  363.                                         UART2_SendString("11108");

  364.                 }
  365.                 else
  366.                         if(strstr(Uart1_Buf,"ae")!=NULL)
  367.                 {
  368.                                 UART2_SendString("11109");

  369.                 }
  370.                 else
  371.                 if(strstr(Uart1_Buf,"af")!=NULL)
  372.                 {
  373.                                         UART2_SendString("11110");

  374.                 }
  375.                 else
  376.                         if(strstr(Uart1_Buf,"ag")!=NULL)
  377.                 {
  378.                                 UART2_SendString("11111");
  379.                 }
  380.                 else
  381.                 if(strstr(Uart1_Buf,"ah")!=NULL)
  382.                 {
  383.                                 UART2_SendString("11112");
  384.                 }
  385.                 else
  386.                         if(strstr(Uart1_Buf,"ai")!=NULL)
  387.                 {
  388.                                 UART2_SendString("11113");
  389.                 }
  390.                 else
  391.                 if(strstr(Uart1_Buf,"aj")!=NULL)
  392.                 {
  393.                                 UART2_SendString("11114");
  394.                 }
  395.                 else
  396.                         if(strstr(Uart1_Buf,"ak")!=NULL)
  397.                 {
  398.                         UART2_SendString("11115");
  399.                 }
  400.                 else
  401.                 if(strstr(Uart1_Buf,"al")!=NULL)
  402.                 {
  403.                                 UART2_SendString("11116");
  404.                 }
  405.                 else
  406.                         if(strstr(Uart1_Buf,"am")!=NULL)
  407.                 {
  408.                                 UART2_SendString("11117");
  409.                 }
  410.                 else
  411.                 if(strstr(Uart1_Buf,"an")!=NULL)
  412.                 {
  413.                         UART2_SendString("11118");
  414.                 }
  415.                 if(strstr(Uart1_Buf,"ao")!=NULL)
  416.                 {
  417.                                 UART2_SendString("11119");
  418.                 }
  419.                 else
  420.                         if(strstr(Uart1_Buf,"ap")!=NULL)
  421.                 {
  422.                                 UART2_SendString("11120");
  423.                 }
  424.                 else
  425.                 if(strstr(Uart1_Buf,"aq")!=NULL)
  426.                 {
  427.                                 UART2_SendString("11121");
  428.                 }
  429.                 else
  430.                         if(strstr(Uart1_Buf,"ar")!=NULL)
  431.                 {
  432.                                 UART2_SendString("11122");
  433.                 }
  434.                 else
  435.                 if(strstr(Uart1_Buf,"as")!=NULL)
  436.                 {
  437.                                 UART2_SendString("11123");
  438.                 }
  439.                 else
  440.                         if(strstr(Uart1_Buf,"at")!=NULL)
  441.                 {
  442.                                 UART2_SendString("11124");
  443.                 }
  444.                 else
  445.                 if(strstr(Uart1_Buf,"au")!=NULL)
  446.                 {
  447.                                 UART2_SendString("11125");
  448.                 }
  449.                 else
  450.                         if(strstr(Uart1_Buf,"av")!=NULL)
  451.                 {
  452.                                 UART2_SendString("11126");
  453.                 }
  454.                 else
  455.                 if(strstr(Uart1_Buf,"aw")!=NULL)
  456.                 {
  457.                                 UART2_SendString("11127");
  458.                 }
  459.                 else
  460.                         if(strstr(Uart1_Buf,"ax")!=NULL)
  461.                 {
  462.                                 UART2_SendString("11128");
  463.                 }
  464.                 else
  465.                 if(strstr(Uart1_Buf,"ay")!=NULL)
  466.                 {
  467.                                 UART2_SendString("11129");
  468.                 }
  469.                 else
  470.                         if(strstr(Uart1_Buf,"az")!=NULL)
  471.                 {
  472.                                 UART2_SendString("11130");
  473.                 }
  474.                 else
  475.                 if(strstr(Uart1_Buf,"ba")!=NULL)
  476.                 {
  477.                                 UART2_SendString("11131");
  478.                 }
  479.                 else
  480.         //        *****************************************************************//
  481.                 if(strstr(Uart1_Buf,"bb")!=NULL)
  482.                 {
  483.                                 UART2_SendString("11132");
  484.                 }
  485.                 else
  486.                         if(strstr(Uart1_Buf,"bc")!=NULL)
  487.                 {
  488.                                 UART2_SendString("11133");
  489.                 }
  490.                 else
  491.                 if(strstr(Uart1_Buf,"bd")!=NULL)
  492.                 {
  493.                                 UART2_SendString("11134");
  494.                 }
  495.                 else
  496.                         if(strstr(Uart1_Buf,"be")!=NULL)
  497.                 {
  498.                                 UART2_SendString("11135");
  499.                 }
  500.                 else
  501.                 if(strstr(Uart1_Buf,"bf")!=NULL)
  502.                 {
  503.                                 UART2_SendString("11136");
  504.                 }
  505.                 else
  506.                         if(strstr(Uart1_Buf,"bg")!=NULL)
  507.                 {
  508.                                 UART2_SendString("11137");
  509.                 }
  510.                 else
  511.                 if(strstr(Uart1_Buf,"bh")!=NULL)
  512.                 {
  513.                                 UART2_SendString("11138");
  514.                 }
  515.                 else
  516.                         if(strstr(Uart1_Buf,"bi")!=NULL)
  517.                 {
  518.                                 UART2_SendString("11139");
  519.                 }
  520.                 else
  521.                 if(strstr(Uart1_Buf,"bj")!=NULL)
  522.                 {
  523.                                 UART2_SendString("11140");
  524.                 }
  525.                 else
  526.                         if(strstr(Uart1_Buf,"bk")!=NULL)
  527.                 {
  528.                                 UART2_SendString("11141");
  529.                 }
  530.                 else
  531.                 if(strstr(Uart1_Buf,"bl")!=NULL)
  532.                 {
  533.                                 UART2_SendString("11142");
  534.                 }
  535.                 else
  536.                         if(strstr(Uart1_Buf,"bm")!=NULL)
  537.                 {
  538.                                 UART2_SendString("11143");
  539.                 }
  540.                 else
  541.                 if(strstr(Uart1_Buf,"bn")!=NULL)
  542.                 {
  543.                                 UART2_SendString("11144");
  544.                 }
  545.                 else
  546.                         if(strstr(Uart1_Buf,"bo")!=NULL)
  547.                 {
  548.                                 UART2_SendString("11145");
  549.                 }
  550.                 else
  551.                 if(strstr(Uart1_Buf,"bp")!=NULL)
  552.                 {
  553.                                 UART2_SendString("11146");
  554.                 }
  555.                 else
  556.                 if(strstr(Uart1_Buf,"bq")!=NULL)
  557.                 {
  558.                                 UART2_SendString("11147");
  559.                 }
  560.                 else
  561.                 if(strstr(Uart1_Buf,"br")!=NULL)
  562.                 {
  563.                                 UART2_SendString("11148");
  564.                 }
  565.                 else
  566.                 if(strstr(Uart1_Buf,"bs")!=NULL)
  567.                 {
  568.                                 UART2_SendString("11149");
  569.                 }
  570.                 else
  571.                 if(strstr(Uart1_Buf,"bt")!=NULL)
  572.                 {
  573.                                 UART2_SendString("11150");
  574.                 }
  575.                 else
  576.                 if(strstr(Uart1_Buf,"bu")!=NULL)
  577.                 {
  578.                                 UART2_SendString("11151");
  579.                 }
  580.                 else
  581.                 if(strstr(Uart1_Buf,"bv")!=NULL)
  582.                 {
  583.                                 UART2_SendString("11152");
  584.                 }
  585.                 else
  586.                 if(strstr(Uart1_Buf,"bw")!=NULL)
  587.                 {
  588.                                 UART2_SendString("11153");
  589.                 }
  590.                 else
  591.                 if(strstr(Uart1_Buf,"bx")!=NULL)
  592.                 {
  593.                                 UART2_SendString("11154");
  594.                 }else
  595.                 if(strstr(Uart1_Buf,"by")!=NULL)
  596.                 {
  597.                                 UART2_SendString("11155");
  598.                 }else
  599.                 if(strstr(Uart1_Buf,"bz")!=NULL)
  600.                 {
  601.                                 UART2_SendString("11156");
  602.                 } else
  603.                 if(strstr(Uart1_Buf,"ca")!=NULL)
  604.                 {
  605.                                 UART2_SendString("11157");
  606.                 }else
  607.                 if(strstr(Uart1_Buf,"cb")!=NULL)
  608.                 {
  609.                                 UART2_SendString("11158");
  610.                 }else
  611.                 if(strstr(Uart1_Buf,"cc")!=NULL)
  612.                 {
  613.                                 UART2_SendString("11159");
  614.                 }else
  615.                 if(strstr(Uart1_Buf,"cd")!=NULL)
  616.                 {
  617.                                 UART2_SendString("11160");
  618.                 }else
  619.                 if(strstr(Uart1_Buf,"ce")!=NULL)
  620.                 {
  621.                                 UART2_SendString("11161");
  622.                 }else
  623.                 if(strstr(Uart1_Buf,"cf")!=NULL)
  624.                 {
  625.                                 UART2_SendString("11162");
  626.                 }else
  627.                 if(strstr(Uart1_Buf,"cg")!=NULL)
  628.                 {
  629.                                 UART2_SendString("11163");
  630.                 }else
  631.                 if(strstr(Uart1_Buf,"G")!=NULL)
  632.                 {
  633.                                 UART2_SendString("004");
  634.                 }else
  635.                 if(strstr(Uart1_Buf,"Z")!=NULL)
  636.                 {
  637.                                 UART2_SendString("002");
  638.                 }else
  639.                 if(strstr(Uart1_Buf,"F")!=NULL)
  640.                 {
  641.                                 UART2_SendString("003");
  642.                 }
  643.                 CLR_Buf1();
  644.                 Second_AT_Command("AT+CMGD=1,4","OK",3);//删除短信
  645.         }
  646. }

  647. /*******************************************************************************
  648. * 函数名 : Send_Text_Sms
  649. * 描述   : 发送TEXT文本短信
  650. * 输入   :
  651. * 输出   :
  652. * 返回   :
  653. * 注意   :
  654. *******************************************************************************/
  655. void Send_Text_Sms(void)
  656. {
  657.         unsigned char temp[50]="AT+CMGS=";
  658.         
  659.         strcat(temp,phone); //字符串拼接函数(库函数)
  660.         Second_AT_Command(temp,">",3); //等待接收到“>”才发送短信内容
  661.         UART1_SendString(content);     //发送短信内容
  662.         UART1_SendData(0X1A);          //发送结束符
  663. }
  664. void main(void)
  665. {
  666.         Timer0Init();
  667.         EA=1;        //开总中断
  668.         Uart1Init();
  669.         Uart2Init();
  670.                 Wait_CREG();    //查询等待模块注册成功
  671.                 Set_Text_Mode();//设置短信为TEXT模式
  672.                 Second_AT_Command("AT+CGNSPWR=1\r\n","OK",2);   //打开GPS电源
  673.          /**************************************************************/
  674.         
  675.         Send_Text_Sms();//发送一条短消息
  676.         
  677.         /*************************************************************/
  678.         while(1)
  679.         {        
  680.                 Check_New_Message();
  681.         //        if(!KEY)delay_ms(10);//按键松开
  682.         //        {
  683.                  
  684.         //        if(KEY==0)//按键按下
  685. //        {                  
  686. //        UART2_SendString("16\r\n");
  687.                          if(Find("CRING")|Find("RING"))  //有新来电
  688.                         {
  689.                                                   CLR_Buf1();
  690.                                   UART1_SendString("ATH\r\n");//挂断来电
  691.                                   flag1=1;
  692.                         }
  693.                         delay_ms(250);
  694.                                   if(flag1)
  695.                                 {
  696.                                    flag1=0;
  697.                                 content[0]=0;//添加字符串结束符
  698.                                 strcat(content,"GPS data:");
  699.                                 Second_AT_Command("AT+CGNSINF\r\n","OK",3);
  700.                                 if((p2=(char*)strstr(Uart1_Buf,"OK")),(p2!=NULL))//寻找结束符
  701.                                 {
  702.                                         *p2=0;//添加结束符
  703.                                         p2=strtok(Uart1_Buf,",");
  704.                                         p2=(char*)strtok(NULL,",");
  705.                                         p2=(char*)strtok(NULL,",");
  706.                                         p2=(char*)strtok(NULL,",");

  707.                                         strcat(content,"latitude:");
  708.                                         strcat(content,(char *)p2);
  709.                                         p2=(char*)strtok(NULL,",");

  710.                                         strcat(content,"longitude:");
  711.                                         strcat(content,(char *)p2);
  712.                                         p2=(char*)strtok(NULL,",");

  713.                                         strcat(content,"elevation:");
  714.                                         strcat(content,(char *)p2);
  715.                                         Send_Text_Sms();//发送定位信息
  716.                                         delay_ms(1000);
  717.                                         CLR_Buf1();
  718. ……………………

  719. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表