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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stm32煙霧報警器源程序_手機發送短信

[復制鏈接]
跳轉到指定樓層
樓主
ID:679189 發表于 2021-3-15 19:26 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機源程序如下:
  1. /**********************************************************************************
  2. * 工程名  :發送TEXT文本短信
  3. * 描述    :通過STM32開發板控制模塊發送TEXT文本短信
  4. * 實驗平臺:STM32F10X
  5. * 庫版本  :

  6. * 硬件連接說明
  7.          使用單片串口2與GPRS模塊通信  注:使用串口2可以避免下載和通信不會沖突
  8.          STM32      GPRS模塊
  9.          5V        ->5V
  10.          3.3V      ->V_TTL
  11.          PA3 (RXD2)->TXD
  12.          PA2 (TXD2)->RXD
  13.          GND           ->GND
  14.          
  15.          VBAT      ->供電5V(大電流)
  16.          GND           ->GND
  17.          PB9       ->PWR
  18.          PWR:這個引腳是控制模塊啟動,V1.2版本已經有自啟動電路所以不必接

  19. * 軟件功能說明
  20.    板子上電后運行指示燈600ms亮/3000ms滅的頻率閃爍
  21.          修改短信中心號、接收方手機號和短信內容,編譯成功后下載到單片機里面,就可以實現發
  22.          送一條文本短信
  23. **********************************************************************************/

  24. #include "sys.h"
  25. #include "delay.h"
  26. #include "lcd.h"
  27. #include "usart.h"
  28. #include "timer.h"
  29. #include "string.h"
  30. #include "MQ_smog.h"
  31. #include "ds18b20.h"

  32. #define Buf1_Max 60                                           //串口1緩存長度
  33. #define Buf2_Max 200                                           //串口2緩存長度
  34. /*************        本地常量聲明        **************/
  35. static unsigned char *SMS_Num="\"+8613800270500\"";//短信中心號 關于中心號的介紹可以看串口調試筆記的第二部分
  36. static unsigned char *phone="\"18672942506\"";     //短信接收方手機號
  37. static unsigned char *content="Fire Alarm!";//發送短信內容
  38. static unsigned char *content1="I am a fire alarm";

  39. /*************  本地變量聲明        **************/
  40. char Uart2_Buf[Buf2_Max];//串口2接收緩存

  41. u8 Times=0,First_Int = 0,shijian=0;

  42. vu8 Timer0_start;        //定時器0延時啟動計數器
  43. vu8 Uart2_Start;        //串口2開始接收數據
  44. vu8 Uart2_End;          //串口2接收數據結束

  45. u8 t=0;
  46. u8 SMS_flag=1;
  47. u8 flag1 = 1;
  48. short temperature;

  49. extern int flag;

  50. /*************        本地函數聲明        **************/
  51. void CLR_Buf2(void);
  52. u8 Find(char *a);
  53. void Second_AT_Command(char *b,char *a,u8 wait_time);
  54. void Set_Text_Mode(void);
  55. void Wait_CREG(void);
  56. void Send_Text_Sms(void);
  57. void Send_Text_Sms1(void);

  58. /*******************************************************************************
  59. * 函數名 : main
  60. * 描述   : 主函數
  61. * 輸入   :
  62. * 輸出   :
  63. * 返回   :
  64. * 注意   : 串口2負責與MG323模塊通信,串口1用于串口調試,可以避免在下載程序時數據
  65.                                          還發送到模塊
  66. *******************************************************************************/        
  67. int main(void)
  68. {                
  69.         NVIC_Configuration();          //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
  70.         delay_init();                     //延時函數初始化       
  71.         uart_init(9600);
  72.         USART2_Init_Config(9600);
  73.         Timer2_Init_Config();
  74.         LCD_Init();
  75.         Init_smog();
  76.        
  77.         BACK_COLOR=WHITE;  //字體背景色
  78.         POINT_COLOR=RED;
  79.         LCD_Clear(WHITE);
  80.        
  81.         Wait_CREG();    //查詢等待模塊注冊成功

  82.         Set_Text_Mode();//設置短信為TEXT模式
  83.        

  84.         while(DS18B20_Init())        //1:未檢測到DS18B20的存在 0:存在
  85.         {
  86.                 LCD_ShowString(60,130,200,16,16,"DS18B20 Error");
  87.                 delay_ms(200);
  88.                 LCD_Fill(60,130,239,130+16,WHITE);
  89.                 delay_ms(200);
  90.         }                                                                  
  91. //        LCD_ShowString(60,20,200,16,16,"DS18B20 OK");
  92.         LCD_ShowString(60,40,200,16,16,"Temp:   . C");
  93.        
  94.         while(1)
  95.         {                        
  96.                 if(t%10==0)//每100ms讀取一次
  97.                 {                                                                          
  98.                         temperature=DS18B20_Get_Temp();       
  99.                         if(temperature<0)
  100.                         {
  101.                                 LCD_ShowChar(60+40,40,'-',16,0);                        //顯示負號
  102.                                 temperature=-temperature;                                        //轉為正數
  103.                         }else LCD_ShowChar(60+40,40,' ',16,0);                        //去掉負號
  104.                         POINT_COLOR=BLUE;//設置字體為藍色
  105.                         LCD_ShowNum(60+40+8,40,temperature/10,2,16);        //顯示正數部分            
  106.                            LCD_ShowNum(60+40+32,40,temperature%10,1,16);        //顯示小數部分
  107.                        
  108.                         smog();
  109.                         if(flag == 1){
  110.                                 POINT_COLOR=RED;
  111.                                 LCD_ShowString(30,180,160,16,16,"smog:warning!");
  112.                         }
  113.                         else LCD_ShowString(30,180,160,16,16,"             ");
  114.                 }
  115.                 LCD_ShowxNum(30,220,flag,1,16,0);
  116.                 if(flag1 == 1){
  117.                         Send_Text_Sms1();//發送一條短消息
  118.                         flag1=0;
  119.                 }
  120.                
  121.                 if(flag==1 && (temperature/10)>20 && SMS_flag==1){  //使用溫度報警時。只用了整數部分
  122.                         LCD_ShowString(60,200,160,16,16,"Fire Alarm!");
  123.                         Send_Text_Sms();//發送一條短消息
  124.                         SMS_flag = 0;
  125.                 }
  126. //                else{
  127. //                        LCD_ShowString(60,200,160,16,16,"           ");
  128. //                        //SMS_flag = 1;
  129. //                }
  130.         }
  131. }

  132. /*******************************************************************************
  133. * 函數名 : CLR_Buf2
  134. * 描述   : 清除串口2緩存數據
  135. * 輸入   :
  136. * 輸出   :
  137. * 返回   :
  138. * 注意   :
  139. *******************************************************************************/
  140. void CLR_Buf2(void)
  141. {
  142.         u16 k;
  143.         for(k=0;k<Buf2_Max;k++)      //將緩存內容清零
  144.         {
  145.                 Uart2_Buf[k] = 0x00;
  146.         }
  147.     First_Int = 0;              //接收字符串的起始存儲位置
  148. }

  149. /*******************************************************************************
  150. * 函數名 : Find
  151. * 描述   : 判斷緩存中是否含有指定的字符串
  152. * 輸入   :
  153. * 輸出   :
  154. * 返回   : unsigned char:1 找到指定字符,0 未找到指定字符
  155. * 注意   :
  156. *******************************************************************************/
  157. u8 Find(char *a)
  158. {
  159.   if(strstr(Uart2_Buf,a)!=NULL)
  160.             return 1;
  161.         else
  162.                 return 0;
  163. }

  164. /*******************************************************************************
  165. * 函數名 : Second_AT_Command
  166. * 描述   : 發送AT指令函數
  167. * 輸入   : 發送數據的指針、希望接收到的應答數據指針、發送等待時間(單位:S)
  168. * 輸出   :
  169. * 返回   :
  170. * 注意   :
  171. *******************************************************************************/
  172. void Second_AT_Command(char *b,char *a,u8 wait_time)         
  173. {
  174.         u8 i;
  175.         char *c;
  176.         c = b;  //保存字符串地址到c
  177.         CLR_Buf2();  //清除串口2緩存數據
  178.         i = 0;
  179.         while(i == 0)                    
  180.         {
  181.                 if(!Find(a))  //判斷緩存中是否含有指定的字符串,如果沒有就一直發送
  182.                 {
  183.                         if(Timer0_start == 0)
  184.                         {
  185.                                         b = c;                                                        //將字符串地址給b
  186.                                         for (; *b!='\0';b++)  //  \0--字符串結尾---一次發送一位字符串,然后b++,當字符串結束時,發送完成
  187.                                         {
  188.                                                 while(USART_GetFlagStatus(USART2, USART_FLAG_TC)==RESET);  //串口2接收引腳無數據時,空循環
  189.                                                 USART_SendData(USART2,*b);  //UART2_SendData(*b);
  190.                                         }
  191.                                         UART2_SendLR();       
  192.                                         Times = 0;
  193.                                         shijian = wait_time;
  194.                                         Timer0_start = 1;
  195.                         }
  196.                 }
  197.                 else  //如果有,即發送成功,則令i=1跳出循環
  198.                 {
  199.                         i = 1;
  200.                         Timer0_start = 0;
  201.                 }
  202.         }
  203.         CLR_Buf2();
  204. }

  205. /*******************************************************************************
  206. * 函數名 : Set_Text_Mode
  207. * 描述   : 設置短信為TEXT文本模式
  208. * 輸入   :
  209. * 輸出   :
  210. * 返回   :
  211. * 注意   :
  212. *******************************************************************************/
  213. void Set_Text_Mode(void)
  214. {
  215.         char temp[50]="AT+CSCA=";
  216.        
  217.         Second_AT_Command("ATE0","OK",3);  //取消回顯        ,發送ATE0,等待接收到“OK”才結束,并執行下一步
  218.         Second_AT_Command("AT+CMGF=1","OK",3);  //TEXT模式       
  219.         Second_AT_Command("AT+CPMS=\"SM\",\"SM\",\"SM\"","OK",3);//所有操作都在SIM卡中進行
  220.         strcat(temp,(char*)SMS_Num); //字符串拼接函數(庫函數)---把"AT+CSCA="與\"+8613800270500\"拼接,并存入temp
  221.         Second_AT_Command(temp,"OK",3);//設置短信中心號
  222.        
  223.         LCD_ShowString(30,60,200,16,16,"Set_Text_Mode successful");
  224. }
  225. /*******************************************************************************
  226. * 函數名 : Send_Text_Sms
  227. * 描述   : 發送TEXT文本短信
  228. * 輸入   :
  229. * 輸出   :
  230. * 返回   :
  231. * 注意   :
  232. *******************************************************************************/
  233. void Send_Text_Sms(void)
  234. {
  235.         char temp[50]="AT+CMGS=";
  236.        
  237.         strcat(temp,(char*)phone); //字符串拼接函數(庫函數)
  238.         Second_AT_Command(temp,">",3); //發送temp,等待接收到“>”才發送短信內容
  239.         UART2_SendString((char*)content);     //發送短信內容
  240.         USART_SendData(USART2 ,0X1A);  //發送結束符
  241.         UART2_SendLR();
  242.        
  243.         LCD_ShowString(30,90,200,16,16,"Send_Text_Sms successful");
  244. }

  245. void Send_Text_Sms1(void)
  246. {
  247.         char temp[50]="AT+CMGS=";
  248.        
  249.         strcat(temp,(char*)phone); //字符串拼接函數(庫函數)
  250.         Second_AT_Command(temp,">",3); //發送temp,等待接收到“>”才發送短信內容
  251.         UART2_SendString((char*)content1);     //發送短信內容
  252.         USART_SendData(USART2 ,0X1A);  //發送結束符
  253.         UART2_SendLR();
  254.        
  255.         LCD_ShowString(30,90,200,16,16,"Send_Text_Sms successful");
  256. }

  257. /*******************************************************************************
  258. * 函數名 : Wait_CREG
  259. * 描述   : 等待模塊注冊成功
  260. * 輸入   :
  261. * 輸出   :
  262. * 返回   :
  263. * 注意   :
  264. *******************************************************************************/
  265. void Wait_CREG(void)
  266. {
  267.         u8 i;
  268.         u8 k;
  269.         i = 0;
  270.         CLR_Buf2();
  271.         while(i == 0)                               
  272.         {
  273.                 CLR_Buf2();        
  274.                 UART2_SendString("AT+CREG?");   //查詢模塊是否注冊成功
  275. //                UART2_SendString("/r/n");
  276.                 UART2_SendLR();  //發回車換行
  277. //                LCD_ShowString(30,120,200,16,16,"debug1");
  278.                 delay_ms(5000);
  279.                 for(k=0;k<Buf2_Max;k++)                             
  280.                 {
  281.                         u8 aa  = Uart2_Buf[0];
  282.                         LCD_ShowString(30,140,200,16,16,(u8*)aa);
  283.                         if(Uart2_Buf[k] == ':')  //如果響應返回的結果中有分號
  284.                         {
  285. //                                LCD_ShowString(30,140,200,16,16,"debug2");
  286.                                 if((Uart2_Buf[k+4] == '1')||(Uart2_Buf[k+4] == '5')) //說明模塊注冊成功 0:未注冊,且沒有進行搜尋新網絡,1:已注冊本地網絡,2:未注冊,正在搜尋網絡,4:未知代碼,5:已注冊,處于漫游狀態
  287.                                         {
  288.                                                 i = 1;  //可跳出while
  289.                                                 break;  //跳出for
  290.                                         }
  291.                         }
  292.                 }
  293. //                LCD_ShowString(30,120,200,16,16,"         ");
  294.         }
  295.         LCD_ShowString(30,120,200,16,16,"CREG successful");
  296. }

  297. //void USART2_IRQHandler(void)                       
  298. //{
  299. //        u8 Res=0;
  300. //        Res =USART_ReceiveData(USART2);
  301. //        LCD_ShowString(30,140,200,16,16,(u8*)Res);
  302. //        Uart2_Buf[First_Int] = Res;            //將接收到的字符串存到緩存中
  303. //        First_Int++;                                        //緩存指針向后移動
  304. //        if(First_Int > Buf2_Max)                       //如果緩存滿,將緩存指針指向緩存的首地址
  305. //        {
  306. //                First_Int = 0;
  307. //        }   
  308. //}        


  309. void USART2_IRQHandler(void)                       
  310. {
  311.         u8 Res=0;
  312.         if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET){
  313.                 Res = USART_ReceiveData(USART2);
  314. //                LCD_ShowString(30,140,200,16,16,(u8*)Res);
  315.                 Uart2_Buf[First_Int] = Res;            //將接收到的字符串存到緩存中
  316.                 First_Int++;                                        //緩存指針向后移動
  317.                 if(First_Int > Buf2_Max)                       //如果緩存滿,將緩存指針指向緩存的首地址
  318.                 {
  319.                         First_Int = 0;
  320.                 }   
  321.         }
  322. }
復制代碼


_煙霧報警器_手機發送短信.zip

567.29 KB, 下載次數: 45, 下載積分: 黑幣 -5

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91久久 | 精品成人av | 欧美日韩电影一区二区 | 91精品国产高清一区二区三区 | 国产一区二区三区免费观看在线 | 国产综合精品一区二区三区 | 91就要激情 | 中文字幕一区二区三区四区 | 国产免费看 | 免费福利视频一区二区三区 | 精品日本中文字幕 | 中文字幕一区二区三区乱码图片 | 国产精品欧美日韩 | 黄色片在线观看网址 | 欧美日韩国产精品激情在线播放 | 岛国av免费在线观看 | caoporn国产 | 日本久久网站 | 久久久久国产精品 | 欧美综合在线视频 | 自拍视频一区二区三区 | av网站免费在线观看 | 九九热精品视频在线观看 | 亚洲精品一区二区三区 | 91成人| 黄一级| 日韩欧美成人精品 | 国产99在线 | 欧美 | 97精品国产 | 日韩欧美一区二区三区免费看 | 国产免费一区二区三区网站免费 | 一区二区三区 在线 | 成人h免费观看视频 | 色综合色综合色综合 | 免费1区2区3区 | 99精品久久 | 91久久国产综合久久 | 色狠狠一区 | 亚洲国产激情 | 夜夜艹 | 91视频在线 |