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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

SIM800c與手機通信 另使用ld3320芯片 智能家具程序

[復制鏈接]
跳轉到指定樓層
樓主
單片機使用STC15W4K58S4  晶振使用22.1184M
SIM800C連接到單片機串口2
P10  串口2 RX
P11  串口1 TX
串口1連接語音識別
P30  RX
P31  TX

P17  藍色燈
P16  綠色燈
P15  紅色燈
P14  繼電器
以上繼電器以及LED燈全部為高電平觸發
P01  觸摸模塊
P02  聲音檢測(聲控開關)
P03  測溫模塊18B20
   

程序的注解我只做了  “單片機源碼  測溫版本”   這一個程序 這個程序是通用的  不需要測溫 直接注解就可以

使用SIM8000C 與 LD3320 語音識別 單片機使用stc15w4k58s4單片機實現網絡控制 以及語音控制  另外使用18b20 測溫  使用手機可以檢測溫度值  先將程序源碼奉上    有問題可以私我  電話18363353598  qq1506175115   無法上傳全部資料 我就只上傳程序   另外還有視頻  教程 可以私信我



單片機源程序如下:
  1. #include "string.h"
  2. #include "delay.h"
  3. #include "uart.h"
  4. #include "intrins.h"

  5. #define Buf1_Max 60                                           //串口1緩存長度
  6. #define Buf2_Max 200                                           //串口2緩存長度
  7. /*************        本地常量聲明        **************/

  8. const u8 *string = "AT+CIPSTART=\"TCP\",\"121.42.182.188\",8080";        //IP登錄服務器
  9. sbit RUNING_LED = P2^1;                                        //運行指示燈
  10. sbit LED                          = P1^6;                                        //控制指示燈



  11. /*************  本地變量聲明        **************/
  12. xdata u8 Uart1_Buf[Buf1_Max];
  13. xdata u8 Uart2_Buf[Buf2_Max];

  14. u8 Times=0,First_Int = 0,shijian=0;
  15. u16 Heartbeat=0;
  16. unsigned char ccc[]={"123"};
  17. ////u8 Time_count=0;
  18. ////bdata u8 Flag;//定時器標志位
  19. //sbit Timer0_start =Flag^0;        //定時器0延時啟動計數器
  20. //sbit Heart_beat                =Flag^1;        //發送心跳幀標志位
  21. bit Timer0_start;
  22. bit Heart_beat;
  23. bit user;
  24. /*************        本地函數聲明        **************/
  25. void GPIO_config(void);
  26. void Timer0Init(void);
  27. void CLR_Buf2(void);
  28. u8 Find(u8 *a);
  29. void Second_AT_Command(u8 *b,u8 *a,u8 wait_time);
  30. void Set_ATE0(void);
  31. void Connect_Server(void);
  32. void Rec_Server_Data(void);
  33. void Wait_CREG(void);
  34. void Send_OK(void);
  35. void Send_shuju(u8 *b);
  36. /*************  外部函數和變量聲明*****************/




  37. /*******************************************************************************
  38. * 函數名 : main
  39. * 描述   : 主函數
  40. * 輸入   :
  41. * 輸出   :
  42. * 返回   :
  43. * 注意   : 串口2負責與GPRS模塊通信,串口1用于串口調試,可以避免在下載程序時數據
  44.                                          還發送到模塊
  45. *******************************************************************************/
  46. void main(void)
  47. {         P1M0=0XE0;
  48. P1M1=0X00;
  49. P17=0;
  50. P16=0;
  51. P15=0;
  52.         GPIO_config();
  53.         Uart1Init();
  54.         Uart2Init();
  55.         Timer0Init();
  56.         EA=1;        //開總中斷
  57.         UART1_SendString("GPRS模塊GPRS測試程序\r\n");
  58.         UART1_SendString("GPRS模塊在注冊網絡\r\n");
  59.         Wait_CREG();
  60.         UART1_SendString("GPRS模塊注冊成功\r\n");
  61.         UART1_SendString("GPRS模塊開始連接服務器\r\n");
  62.         Set_ATE0();                 //設置回顯
  63.         Connect_Server();        //設置GSM工作在網絡連接 并連接到ip
  64.         Send_OK();                // 連接到賽靈網站
  65.         UART1_SendString("連接成功\r\n");
  66.         while(1)
  67.         {
  68.                 Rec_Server_Data();
  69.                 if(Heart_beat==1)
  70.                 {               
  71.                         Send_shuju("zzo");
  72.                         Heart_beat=0;
  73.                 }       
  74.                
  75.                 if(P24==0||user==1)
  76.                 {
  77.                 Send_shuju("ok");
  78.                 user=0;
  79.                 while(!P24);
  80.                 }               


  81.         }
  82. }

  83. /*******************************************************************************
  84. * 函數名 : Uart1
  85. * 描述   : 串口1中斷服務入口函數
  86. * 輸入   :
  87. * 輸出   :
  88. * 返回   :
  89. * 注意   :
  90. *******************************************************************************/
  91. void Uart1() interrupt 4
  92. {
  93.     if (RI)
  94.     {
  95.         RI = 0;                 //清除RI位
  96.     }
  97.     if (TI)
  98.     {
  99.         TI = 0;                 //清除TI位
  100.     }
  101. }

  102. /*******************************************************************************
  103. * 函數名 : Uart2
  104. * 描述   : 串口2中斷服務入口函數
  105. * 輸入   :
  106. * 輸出   :
  107. * 返回   :
  108. * 注意   :
  109. *******************************************************************************/
  110. void Uart2() interrupt 8
  111. {
  112.                 IE2  &= ~0x01;   //關閉串口2中斷
  113.     if (S2CON & S2RI)
  114.     {
  115.       S2CON &= ~S2RI;         //清除S2RI位
  116.                         Uart2_Buf[First_Int] = S2BUF;            //將接收到的字符串存到緩存中
  117.                         First_Int++;                                        //緩存指針向后移動
  118.                         if(First_Int > Buf2_Max)                       //如果緩存滿,將緩存指針指向緩存的首地址
  119.                         {
  120.                                 First_Int = 0;
  121.                         }
  122.     }
  123.     if (S2CON & S2TI)
  124.     {
  125.       S2CON &= ~S2TI;         //清除S2TI位
  126.     }
  127.                 IE2  |= 0x01;   //使能串口2中斷
  128. }
  129. /*******************************************************************************
  130. * 函數名 : Timer0_ISR
  131. * 描述   : 定時器0中斷服務入口函數,20ms中斷一次
  132. * 輸入   :
  133. * 輸出   :
  134. * 返回   :
  135. * 注意   :
  136. *******************************************************************************/
  137. void Timer0_ISR() interrupt 1
  138. {
  139.         TR0=0;//關定時器
  140.         Heartbeat++;
  141.         if(Heartbeat>500)//每10秒發送心跳幀
  142.         {
  143.                 Heartbeat=0;
  144.                 Heart_beat=1;
  145.         }
  146.         if(Timer0_start)
  147.         Times++;
  148.         if(Times > (50*shijian))
  149.         {
  150.                 Timer0_start = 0;
  151.                 Times = 0;
  152.         }
  153.         TR0=1;//開定時器
  154. }
  155. /*******************************************************************************
  156. * 函數名 : GPIO_config
  157. * 描述   : IO口配置函數
  158. * 輸入   :
  159. * 輸出   :
  160. * 返回   :
  161. * 注意   :
  162. *******************************************************************************/
  163. void        GPIO_config(void)
  164. {
  165.                 P3M1 &= 0XC3;  //配置P32~P35為推挽輸出
  166.                 P3M0 |=        ~0XC3;
  167.                 LED=0;
  168.                 RUNING_LED=0;
  169. }
  170. /*******************************************************************************
  171. * 函數名 : Timer0Init
  172. * 描述   : 定時器0初始化函數
  173. * 輸入   :
  174. * 輸出   :
  175. * 返回   :
  176. * 注意   :
  177. *******************************************************************************/
  178. void Timer0Init(void)                //20毫秒@22.1184MHz
  179. {
  180.         AUXR &= 0x7F;        //12T模式
  181.         TMOD &= 0xF0;        //設置定時器模式 16位重載
  182.         TL0 = 0x00;                //設定定時器初值
  183.         TH0 = 0x70;                //設定定時器初值
  184.         TF0 = 0;                        //清除TF0標志
  185.         TR0 = 1;                        //定時器0開始計時
  186.         ET0 = 1;            //使能定時器0中斷
  187. }
  188. /******
  189. /*******************************************************************************
  190. * 函數名 : CLR_Buf2
  191. * 描述   : 清除串口2緩存數據
  192. * 輸入   :
  193. * 輸出   :
  194. * 返回   :
  195. * 注意   :
  196. *******************************************************************************/
  197. void CLR_Buf2(void)
  198. {
  199.         u16 k;
  200.         for(k=0;k<Buf2_Max;k++)      //將緩存內容清零
  201.         {
  202.                 Uart2_Buf[k] = 0x00;
  203.         }
  204.     First_Int = 0;             //接收字符串的起始存儲位置
  205. }

  206. /*******************************************************************************
  207. * 函數名 : Wait_CREG
  208. * 描述   : 等待模塊注冊成功
  209. * 輸入   :
  210. * 輸出   :
  211. * 返回   :
  212. * 注意   :
  213. *******************************************************************************/
  214. void Wait_CREG(void)
  215. {
  216.         u8 i;
  217.         u8 k;
  218.         i = 0;
  219.         CLR_Buf2();
  220.   while(i == 0)                               
  221.         {
  222.                 CLR_Buf2();        
  223.                 UART2_SendString("AT+CREG?");
  224.                 UART2_SendLR();
  225.                 delay_ms(5000);                                                 
  226.             for(k=0;k<Buf2_Max;k++)                             
  227.             {
  228.                         if(Uart2_Buf[k] == ':')
  229.                         {
  230.                                 if((Uart2_Buf[k+4] == '1')||(Uart2_Buf[k+4] == '5'))  //說模塊注冊成功
  231.                                 {
  232.                                         i = 1;
  233.                                   break;
  234.                                 }
  235.                         }
  236.                 }
  237.                                 UART1_SendString("注冊中.....");
  238.         }

  239. }

  240. /*******************************************************************************
  241. * 函數名 : Find
  242. * 描述   : 判斷緩存中是否含有指定的字符串
  243. * 輸入   :
  244. * 輸出   :
  245. * 返回   : unsigned char:1 找到指定字符,0 未找到指定字符
  246. * 注意   :
  247. *******************************************************************************/

  248. u8 Find(u8 *a)
  249. {
  250.   if(strstr(Uart2_Buf,a)!=NULL)
  251.             return 1;
  252.         else
  253.                         return 0;
  254. }

  255. /*******************************************************************************
  256. * 函數名 : Second_AT_Command
  257. * 描述   : 發送AT指令函數
  258. * 輸入   : 發送數據的指針、發送等待時間(單位:S)
  259. * 輸出   :
  260. * 返回   :
  261. * 注意   :
  262. *******************************************************************************/

  263. void Second_AT_Command(u8 *b,u8 *a,u8 wait_time)         
  264. {
  265.         u8 i;
  266.         u8 *c;
  267.         c = b;       
  268.                                                                         //保存字符串地址到c
  269.         CLR_Buf2();
  270.   i = 0;
  271.         while(i == 0)                    
  272.         {
  273.                 if(!Find(a))
  274.                 {
  275.                         if(Timer0_start == 0)
  276.                         {
  277.                                 b = c;                                                        //將字符串地址給b
  278.                                 for (b; *b!='\0';b++)
  279.                                 {
  280.                                         UART2_SendData(*b);
  281.                                 }
  282.                                 UART2_SendLR();       
  283.                                 Times = 0;
  284.                                 shijian = wait_time;
  285.                                 Timer0_start = 1;
  286.                    }
  287.     }
  288.           else
  289.                 {
  290.                         i = 1;
  291.                         Timer0_start = 0;
  292.                 }
  293.         }
  294.         CLR_Buf2();
  295. }

  296. /*******************************************************************************
  297. * 函數名 : Set_ATE0
  298. * 描述   : 取消回顯
  299. * 輸入   :
  300. * 輸出   :
  301. * 返回   :
  302. * 注意   :
  303. *******************************************************************************/
  304. void Set_ATE0(void)
  305. {
  306.         Second_AT_Command("ATE0","OK",3);                                                                //取消回顯               
  307. }
  308. /*******************************************************************************
  309. * 函數名 : Connect_Server
  310. * 描述   : GPRS連接服務器函數
  311. * 輸入   :
  312. * 輸出   :
  313. * 返回   :
  314. * 注意   :
  315. *******************************************************************************/
  316. void Connect_Server(void)
  317. {
  318.         UART2_SendString("AT+CIPCLOSE=1");        //關閉連接
  319.         Second_AT_Command("AT+CIPSHUT","SHUT OK",2);                //關閉移動場景

  320.         Second_AT_Command("AT+CGCLASS=\"B\"","OK",2);//設置GPRS移動臺類別為B,支持包交換和數據交換
  321.         Second_AT_Command("AT+CGDCONT=1,\"IP\",\"CMNET\"","OK",2);//設置PDP上下文,互聯網接協議,接入點等信息
  322.         Second_AT_Command("AT+CGATT=1","OK",2);//附著GPRS業務
  323.         Second_AT_Command("AT+CIPCSGP=1,\"CMNET\"","OK",2);//設置為GPRS連接模式
  324.         Second_AT_Command("AT+CIPHEAD=1","OK",2);//設置接收數據顯示IP頭(方便判斷數據來源,僅在單路連接有效)
  325.         Second_AT_Command(string,"OK",5);
  326.         delay_ms(100);
  327.         CLR_Buf2();
  328. }
  329. /*******************************************************************************
  330. * 函數名 : Rec_Server_Data
  331. * 描述   : 接收服務器數據函數
  332. * 輸入   :
  333. * 輸出   :
  334. * 返回   :
  335. * 注意   :
  336. *******************************************************************************/
  337. void Rec_Server_Data(void)
  338. {
  339.         if(strstr(Uart2_Buf,"+IPD")!=NULL)                   //若緩存字符串中含有+IPD
  340.         {       
  341.                 Heartbeat=0;        //清除心跳幀計數器
  342.                 Heart_beat=0;
  343.                 delay_ms(100);
  344.                 if(strstr(Uart2_Buf,"oneled1")!=NULL)
  345.                 {
  346.                         P17 = ~P17;
  347.                         Send_shuju("zlany");
  348.                 }
  349.                 else if(strstr(Uart2_Buf,"oneled2")!=NULL)
  350.                 {
  351.                         P16=~P16;  
  352.                         Send_shuju("zlvy");

  353.                 }
  354.                         else if(strstr(Uart2_Buf,"oneled3")!=NULL)
  355.                 {
  356.                         P15=~P15;
  357.                         Send_shuju("zhongy");
  358.                 }
  359.                
  360.                         else if(strstr(Uart2_Buf,"oneled4")!=NULL)
  361.                 {
  362.                         P15=P16=P17=1;
  363.                         Send_shuju("zkaiy");
  364.                 }
  365.                         else if(strstr(Uart2_Buf,"offled")!=NULL)
  366.                 {
  367.                         P15=P16=P17=0;
  368.                         Send_shuju("zguany");
  369.                 }
  370.                 UART1_SendString("收到新信息:\r\n");
  371.                 UART1_SendLR();
  372.                 UART1_SendString(Uart2_Buf);                
  373.                 CLR_Buf2();
  374.        
  375.         }
  376. }
  377. /*******************************************************************************
  378. * 函數名 : Send_OK
  379. * 描述   : 發送數據應答服務器的指令,該函數在有兩功能
  380.                                         1:接收到服務器的數據后,應答服務器
  381.                                         2:服務器無下發數據時,每隔10秒發送一幀心跳,保持與服務器連接
  382. * 輸入   :
  383. * 輸出   :
  384. * 返回   :
  385. * 注意   :
  386. *******************************************************************************/
  387. void Send_OK(void)
  388. {
  389.         Second_AT_Command("AT+CIPSEND",">",2);
  390.         UART2_SendString("{");
  391.         UART2_SendString("\"LINK\":\"t2c\",\"ISTR\":\"log\",\"TID\":\"aCQZkMidVPXioM1Q\",\"PWD\":\"991004ssd\"}\r\n");
  392.         UART2_SendString("\32\0");     //發送短信內容
  393. }
  394. //向遠程服務器數據函數
  395. void Send_shuju(u8 *b)
  396. {

  397.         Second_AT_Command("AT+CIPSEND",">",2);
  398.         UART2_SendString("{");
  399.         UART2_SendString("\"LINK\":\"t2t\",\"ISTR\":\"tt\",\"MSG\":\"");                  //將數據發送到遠程端設備
  400.         for (b; *b!='\0';b++)
  401.         {
  402.                 UART2_SendData(*b);
  403.         }
  404.         UART2_SendString("\"}\r\n");                  //將數據發送到遠程端設備
  405.         UART2_SendString("\32\0");     //發送短信內容
  406. }
復制代碼

所有資料51hei提供下載:
SIM800C通信.7z (2.34 MB, 下載次數: 22)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 五月综合激情在线 | 亚洲黄色一区二区三区 | 久久久久国产一级毛片高清网站 | 久久精品国产一区二区电影 | 偷派自拍 | 在线日韩欧美 | 精品日韩 | 国内精品视频在线观看 | 精品国产一区探花在线观看 | 一区二区三区在线播放视频 | 精品一二三区在线观看 | 无码一区二区三区视频 | 国产精品综合网 | а天堂中文最新一区二区三区 | 日日躁狠狠躁aaaaxxxx | 欧美又大粗又爽又黄大片视频 | 亚洲国产精品久久久久婷婷老年 | 干干干操操操 | 久久亚洲综合 | 久久婷婷麻豆国产91天堂 | 国产精品v | 羞羞视频网站 | 狠狠亚洲 | 国产一区二区三区免费 | 国产精品视频不卡 | 国产精品一区一区三区 | 亚洲精品日本 | 国产欧美久久精品 | 久久91 | 欧美日韩精品在线免费观看 | 亚洲精品一区二区三区蜜桃久 | 农村黄性色生活片 | 日韩一区不卡 | 国产伦精品一区二区三区照片91 | 亚洲视频自拍 | 91视频88av| 四虎网站在线观看 | 天堂免费 | 美女久久久久久久久 | 亚洲欧美一区二区三区国产精品 | www.v888av.com |