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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

GSM收發短信打電話的stm32源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:303561 發表于 2018-4-8 11:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
GSM短信發送

單片機源程序如下:
  1. /******************** (C) COPYRIGHT 2012 WildFire Team **************************
  2. * 文件名  :main.c
  3. * 描述    :通過電腦的超級終端向單片機發送數據,單片機將接收到的數據發回電腦,
  4. *         :并顯示在超級終端上。用的是串口1的中斷方式。         
  5. * 實驗平臺:野火STM32開發板
  6. * 庫版本  :ST3.5.0
  7. *********************************************************************************/
  8. #include "stm32f10x.h"
  9. #include "usart1.h"
  10. #include "systick.h"
  11. #include "bit.h"
  12. #include "GSM.h"

  13. #define led1      PE5
  14. #define led2      PE6

  15. int seat=0; //接收字符串的存儲位置
  16. extern vu32 TimingDelay;
  17. extern u8 Uart1_Get_Data;
  18. extern u8 Uart1_Get_Flag;
  19. extern char RX[200];
  20. char content[]="Hi!I am xioawenjun,I have another telephone number,Please call me with 625073,Thanks";
  21. char content_ZT[]="ALL OK";
  22. char NUM_Magz[17]={0x22,0x2b,0x38,0x36,0x31,0x38,0x30,0x32,0x32,0x33,0x30,0x35,0x38,0x36,0x36,0x22};
  23. char NUM1[14]={0x22,0x31,0x38,0x30,0x32,0x32,0x33,0x30,0x35,0x38,0x36,0x36,0x22};
  24. char NUM_Receive[12]={0x31,0x38,0x30,0x32,0x32,0x33,0x30,0x35,0x38,0x36,0x36};

  25. /*
  26. * 函數名:main
  27. * 描述  :主函數
  28. * 輸入  :無
  29. * 輸出  :無
  30. */
  31. int main(void)
  32. {       
  33.     u16 i,j,FLAG=0;
  34.     SysTick_Init();                     /*systick 初始化*/
  35.         /* USART1 config 115200 8-N-1 */
  36. //        USART1_Config();       
  37.         USART2_Config();
  38.         NVIC_Configuration();
  39.     led1=0;
  40.         led2=1;
  41.         GSM_Init();
  42. ///////////////////////////////////////////////////////////////////
  43.         GPIO_ResetBits(GPIOA, GPIO_Pin_8); //啟動信號開始
  44.         Delay_us(100000);         //延時1s
  45.         GPIO_SetBits(GPIOA, GPIO_Pin_8); //啟動信號開始
  46.         Delay_us(100000);
  47.         while(!Hand("Interpreter ready"))
  48.               {
  49.                     CLR_RX();
  50.                     GPIO_ResetBits(GPIOA, GPIO_Pin_8); //啟動信號開始
  51.                         Delay_us(100000);         //延時1s
  52.                         GPIO_SetBits(GPIOA, GPIO_Pin_8); //啟動信號開始
  53.                         Delay_us(100000);
  54.               }
  55.         led1=1;
  56.         Delay_us(500000);
  57.         led1=0;

  58.         USART2_Puts("\r\nAT\r\n");  //握手

  59.     CLR_RX();
  60.         Delay_us(10000);          
  61.         while(!Hand("OK"))
  62.               {
  63.                   led1=~led1;
  64.                   USART2_Puts("AT\r");  //握手
  65.                   Delay_us(100000);             
  66.               }
  67.         CLR_RX();
  68.         Delay_us(10000);

  69. //        USART2_Puts("ATD611123;\r");//撥號“611123”
  70. //        while(!Hand("OK"))       //等待設置成功
  71. //         CLR_RX();
  72. //        Delay_us(200000);
  73. //
  74. //        USART2_Puts("ATH\r");//掛斷
  75. //        while(!Hand("OK"))       //等待設置成功
  76. //         CLR_RX();
  77. //        Delay_us(10000);

  78.          led2=~led2;
  79.         while(!Hand("OK"))       //等待設置成功
  80.                   {                            
  81.           USART2_Puts("AT+CMGF=1\r");//設置為TXT模式
  82.                   Delay_us(100000);                               
  83.                   }
  84.          CLR_RX();
  85.         Delay_us(1000);

  86.         led2=~led2;
  87.         while(!Hand("OK"))       //等待設置成功
  88.                   {                            
  89.           USART2_Puts("AT+CSCS=\"GSM\"\r");//設置當前字符集為“GSM”
  90.                   Delay_us(100000);                               
  91.                   }
  92.          CLR_RX();
  93.         Delay_us(1000);
  94.         led2=~led2;

  95.     while(!Hand("OK"))       //等待設置成功
  96.                   {
  97.                   CLR_RX();                           
  98.           USART2_Puts("AT+CSCA?\r");//設置當前字符集為“GSM”
  99.                   Delay_us(100000);                               
  100.                   }
  101.      for(i=0;i<200;i++)
  102.            {
  103.             if(RX[i]==0x22)                //找到8
  104.              {
  105.                  for(j=0;j<16;j++)
  106.                     {
  107.                         NUM_Magz[j]=RX[i];  //讀消息中心的號碼
  108.                         i++;
  109.                         }
  110.                  i=200;
  111.                  }
  112.            }
  113.          CLR_RX();
  114.         Delay_us(1000);
  115.         led2=~led2;

  116. //                led2=~led2;
  117. //        while(!Hand("OK"))       //等待設置成功
  118. //                  {                            
  119. //          USART2_Puts("AT+CMGR=1\r");//設置讀第一條短信
  120. //                  Delay_us(100000);                               
  121. //                  }
  122. //         CLR_RX();
  123. //        Delay_us(1000);

  124.                 led2=~led2;
  125.         while(!Hand("OK"))       //等待設置成功
  126.                   {                            
  127.           USART2_Puts("AT+CNMI=2,1\r\n");//設置當有新短信到來時提示     
  128.                   Delay_us(100000);                               
  129.                   }
  130.          CLR_RX();
  131.         Delay_us(1000);

  132.                 led2=~led2;
  133.         while(!Hand("OK")&&!Hand("ERROR"))       //等待設置成功
  134.                   {                            
  135.           USART2_Puts("AT+CMGD=1\r\n");//設置刪除第一條短信     
  136.                   Delay_us(100000);                               
  137.                   }
  138.          CLR_RX();
  139.         Delay_us(1000);

  140.     /* 設置信息中心號碼        */
  141.         USART2_Puts("AT+CSCA=");
  142.         USART2_Puts(NUM_Magz);       
  143.         USART2_Puts("\r");
  144.         while(!Hand("OK"));          //等待設置成功
  145.          CLR_RX();
  146.         Delay_us(1000);
  147.         led2=~led2;
  148.         led1=1;       
  149.         for(;;)
  150.         {
  151.                    if(Hand("+CMTI")) //若緩存字符串中含有"+CMTI"就表示有新的短信
  152.                     {
  153.                           Delay_us(1000);   
  154.                         CLR_RX();                   //清除緩存內容
  155.                         USART2_Puts("AT+CMGR=1\r\n");//發送讀取信息指令
  156.                 while(!Hand("OK"));          //等待設置成功
  157.                         for(i=0;i<200;i++)
  158.                            {
  159.                            if(RX[i]==0x22)
  160.                              {
  161.                              FLAG++;
  162.                                  }
  163.                            if(FLAG==3)
  164.                              {
  165.                                  FLAG=0;
  166.                                  for(j=0;j<11;j++)
  167.                                     {
  168.                                         i++;
  169.                                         NUM_Receive[j]=RX[i];                                       
  170.                                         if(RX[i]==0x22)
  171.                                           {
  172.                                            NUM_Receive[j]='\0';
  173.                                            j=11;
  174.                                           }
  175.                                         }
  176.                                  i=200;
  177.                                  }
  178.                            }
  179.                         if(Hand("1HD"))         //收到"1HD"回電話
  180.                           {
  181.                             CLR_RX();
  182.                                 Delay_us(1000);
  183.                                 USART2_Puts("ATD");   //打電話
  184.                                 USART2_Puts(NUM_Receive);
  185.                                 USART2_Puts(";\r");
  186.                                 while(!Hand("OK"));
  187.                                 while(!Hand("NO CARRIER"));
  188.                                 CLR_RX();       
  189.                                 Delay_us(1000);
  190.                                 USART2_Puts("AT+CMGD=1\r\n");//刪除短信
  191.                         while(!Hand("OK"));          //等待設置成功
  192.                                 CLR_RX();
  193.                                 Delay_us(1000);
  194.                           }
  195.                         if(Hand("1HX"))  //收到"1HX"回復短信
  196.                           {
  197.                             MESSAGE(NUM_Receive,content_ZT); //發短信
  198.                                 while(!Hand("OK"))       //等待設置成功
  199.                                           {                            
  200.                                       USART2_Puts("AT+CMGD=1\r\n");//刪除短信   
  201.                                           Delay_us(100000);                               
  202.                                           }
  203.                                 CLR_RX();
  204.                                 Delay_us(1000);
  205.                           }
  206.                
  207.                     }

  208.                    if(Hand("RING")) //若緩存字符串中含有"RING"就表示有新的來電
  209.                     {
  210.                         Delay_us(10000);   
  211.                         CLR_RX();                   //清除緩存內容
  212.                         USART2_Puts("AT+CLCC\r");//讀取來電號碼
  213.                 while(!Hand("OK"));          //等待設置成功
  214.                         for(i=0;i<200;i++)
  215.                            {
  216.                            if(RX[i]==0x22)
  217.                              {
  218.                                  for(j=0;j<11;j++)
  219.                                     {
  220.                                         i++;
  221.                                         NUM_Receive[j]=RX[i];                                       
  222.                                         if(RX[i]==0x22)
  223.                                           {
  224.                                            NUM_Receive[j]='\0';
  225.                                            j=11;
  226.                                           }
  227.                                         }
  228.                                  i=200;
  229.                                  }
  230.                            }
  231.                         CLR_RX();
  232.                         USART2_Puts("ATH\r\n");//掛斷電話
  233.                         while(!Hand("OK"));
  234.                         if(NUM_Receive[0]==0x36) //只回復開頭為1的手機號碼
  235.                           {
  236.                           MESSAGE(NUM_Receive,content);        //發短信
  237.                        }
  238.                          CLR_RX();
  239.                      Delay_us(300000);
  240.                          USART2_Puts("ATD");   //打電話
  241.                          USART2_Puts(NUM_Receive);
  242.                          USART2_Puts(";\r");
  243.                          while(!Hand("OK"));
  244.                          while(!Hand("NO CARRIER"));
  245.                          CLR_RX();       
  246.                          Delay_us(10000);
  247.                          
  248.                          USART2_Puts("ATD");   //打電話
  249.                          USART2_Puts(NUM_Receive);
  250.                          USART2_Puts(";\r");
  251.                          while(!Hand("OK"));
  252.                          CLR_RX();
  253.                          Delay_us(1500000);
  254.                          USART2_Puts("ATH\r\n");//掛斷電話
  255.                          while(!Hand("OK"));
  256.                          CLR_RX();
  257.                          }       
  258.         }
  259. }
  260. /******************* (C) COPYRIGHT 2012 WildFire Team *****END OF FILE************/
復制代碼
  1. #include "GSM.h"
  2. #include "usart1.h"
  3. #include "systick.h"
  4. #include "bit.h"

  5. extern char RX[200];
  6. extern char NUM_Magz[17];

  7. /*
  8. * 函數名:GSM_Init
  9. * 描述  :GSM模塊初始化
  10. * 輸入  :無
  11. * 輸出  :無
  12. * 調用  :由main調用
  13. */
  14. void GSM_Init(void)
  15. {
  16.     u16 i,j;
  17.           GPIO_ResetBits(GPIOA, GPIO_Pin_8); //啟動信號開始
  18.         Delay_us(100000);         //延時1s
  19.         GPIO_SetBits(GPIOA, GPIO_Pin_8); //啟動信號開始
  20.         Delay_us(100000);
  21.         while(!Hand("Interpreter ready"))
  22.               {
  23.                     CLR_RX();
  24.                     GPIO_ResetBits(GPIOA, GPIO_Pin_8); //啟動信號開始
  25.                         Delay_us(100000);         //延時1s
  26.                         GPIO_SetBits(GPIOA, GPIO_Pin_8); //啟動信號開始
  27.                         Delay_us(100000);
  28.               }
  29.         led1=1;
  30.         Delay_us(500000);
  31.         led1=0;

  32.         USART2_Puts("\r\nAT\r\n");  //握手

  33.     CLR_RX();
  34.         Delay_us(10000);          
  35.         while(!Hand("OK"))
  36.               {
  37.                   led1=~led1;
  38.                   USART2_Puts("AT\r");  //握手
  39.                   Delay_us(100000);             
  40.               }
  41.         CLR_RX();
  42.         Delay_us(10000);

  43. //        USART2_Puts("ATD611123;\r");//撥號“611123”
  44. //        while(!Hand("OK"))       //等待設置成功
  45. //         CLR_RX();
  46. //        Delay_us(200000);
  47. //
  48. //        USART2_Puts("ATH\r");//掛斷
  49. //        while(!Hand("OK"))       //等待設置成功
  50. //         CLR_RX();
  51. //        Delay_us(10000);

  52.          led2=~led2;
  53.         while(!Hand("OK"))       //等待設置成功
  54.                   {                            
  55.           USART2_Puts("AT+CMGF=1\r");//設置為TXT模式
  56.                   Delay_us(100000);                               
  57.                   }
  58.          CLR_RX();
  59.         Delay_us(1000);

  60.         led2=~led2;
  61.         while(!Hand("OK"))       //等待設置成功
  62.                   {                            
  63.           USART2_Puts("AT+CSCS=\"GSM\"\r");//設置當前字符集為“GSM”
  64.                   Delay_us(100000);                               
  65.                   }
  66.          CLR_RX();
  67.         Delay_us(1000);
  68.         led2=~led2;

  69.     while(!Hand("OK"))       //等待設置成功
  70.                   {
  71.                   CLR_RX();                           
  72.           USART2_Puts("AT+CSCA?\r");//設置當前字符集為“GSM”
  73.                   Delay_us(100000);                               
  74.                   }
  75.      for(i=0;i<200;i++)
  76.            {
  77.             if(RX[i]==0x22)                //找到8
  78.              {
  79.                  for(j=0;j<16;j++)
  80.                     {
  81.                         NUM_Magz[j]=RX[i];  //讀消息中心的號碼
  82.                         i++;
  83.                         }
  84.                  i=200;
  85.                  }
  86.            }
  87.          CLR_RX();
  88.         Delay_us(1000);
  89.         led2=~led2;

  90. //                led2=~led2;
  91. //        while(!Hand("OK"))       //等待設置成功
  92. //                  {                            
  93. //          USART2_Puts("AT+CMGR=1\r");//設置讀第一條短信
  94. //                  Delay_us(100000);                               
  95. //                  }
  96. //         CLR_RX();
  97. //        Delay_us(1000);

  98.                 led2=~led2;
  99.         while(!Hand("OK"))       //等待設置成功
  100.                   {                            
  101.           USART2_Puts("AT+CNMI=2,1\r\n");//設置當有新短信到來時提示     
  102.                   Delay_us(100000);                               
  103.                   }
  104.          CLR_RX();
  105.         Delay_us(1000);

  106.                 led2=~led2;
  107.         while(!Hand("OK")&&!Hand("ERROR"))       //等待設置成功
  108.                   {                            
  109.           USART2_Puts("AT+CMGD=1\r\n");//設置刪除第一條短信     
  110.                   Delay_us(100000);                               
  111.                   }
  112.          CLR_RX();
  113.         Delay_us(1000);

  114.     /* 設置信息中心號碼        */
  115.         USART2_Puts("AT+CSCA=");
  116.         USART2_Puts(NUM_Magz);       
  117.         USART2_Puts("\r");
  118.         while(!Hand("OK"));          //等待設置成功
  119.          CLR_RX();
  120.         Delay_us(1000);
  121.         led2=~led2;
  122.         led1=1;
  123. }
復制代碼


所有資料51hei提供下載:
12-GSM收發短信打電話.rar (293.12 KB, 下載次數: 33)


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美另类视频 | 中文字幕第90页 | a在线视频观看 | 羞羞的视频免费在线观看 | 亚洲一区二区三区四区视频 | 国产三级 | 亚洲成人自拍网 | 亚洲一区中文 | 欧美 日韩 国产 一区 | 国产一级视频在线播放 | 亚洲视频在线播放 | 亚洲精品视频久久 | 国产精品日韩欧美一区二区三区 | 欧美精品 在线观看 | 成人免费视频网站在线看 | 国产亚洲欧美日韩精品一区二区三区 | 国产综合精品 | 91高清视频在线观看 | www.国产日本 | 欧美多人在线 | 日本a级大片 | 精品一区国产 | 狠狠综合久久av一区二区小说 | 亚洲精品成人 | 碰碰视频| 97在线观看 | 欧美一a一片一级一片 | 成人高潮片免费视频欧美 | aaa综合国产| 国产精品日韩欧美 | 极品粉嫩国产48尤物在线播放 | 午夜精品一区二区三区在线视频 | 老牛嫩草一区二区三区av | 久久精品国产免费 | 久久一区二区三区四区五区 | 成人二区 | 日韩靠逼 | 成人精品久久久 | 亚洲国产成人精品在线 | 中日韩av | 久久久精品天堂 |