|
單片機(jī)使用STC15W4K58S4 晶振使用22.1184M
SIM800C連接到單片機(jī)串口2
P10 串口2 RX
P11 串口1 TX
串口1連接語(yǔ)音識(shí)別
P30 RX
P31 TX
P17 藍(lán)色燈
P16 綠色燈
P15 紅色燈
P14 繼電器
以上繼電器以及LED燈全部為高電平觸發(fā)
P01 觸摸模塊
P02 聲音檢測(cè)(聲控開(kāi)關(guān))
P03 測(cè)溫模塊18B20
程序的注解我只做了 “單片機(jī)源碼 測(cè)溫版本” 這一個(gè)程序 這個(gè)程序是通用的 不需要測(cè)溫 直接注解就可以
使用SIM8000C 與 LD3320 語(yǔ)音識(shí)別 單片機(jī)使用stc15w4k58s4單片機(jī)實(shí)現(xiàn)網(wǎng)絡(luò)控制 以及語(yǔ)音控制 另外使用18b20 測(cè)溫 使用手機(jī)可以檢測(cè)溫度值 先將程序源碼奉上 有問(wèn)題可以私我 電話(huà)18363353598 qq1506175115 無(wú)法上傳全部資料 我就只上傳程序 另外還有視頻 教程 可以私信我
0.png (36.7 KB, 下載次數(shù): 63)
下載附件
2019-2-27 00:12 上傳
單片機(jī)源程序如下:
- #include "string.h"
- #include "delay.h"
- #include "uart.h"
- #include "intrins.h"
- #define Buf1_Max 60 //串口1緩存長(zhǎng)度
- #define Buf2_Max 200 //串口2緩存長(zhǎng)度
- /************* 本地常量聲明 **************/
- const u8 *string = "AT+CIPSTART=\"TCP\",\"121.42.182.188\",8080"; //IP登錄服務(wù)器
- sbit RUNING_LED = P2^1; //運(yùn)行指示燈
- sbit LED = P1^6; //控制指示燈
- /************* 本地變量聲明 **************/
- xdata u8 Uart1_Buf[Buf1_Max];
- xdata u8 Uart2_Buf[Buf2_Max];
- u8 Times=0,First_Int = 0,shijian=0;
- u16 Heartbeat=0;
- unsigned char ccc[]={"123"};
- ////u8 Time_count=0;
- ////bdata u8 Flag;//定時(shí)器標(biāo)志位
- //sbit Timer0_start =Flag^0; //定時(shí)器0延時(shí)啟動(dòng)計(jì)數(shù)器
- //sbit Heart_beat =Flag^1; //發(fā)送心跳幀標(biāo)志位
- bit Timer0_start;
- bit Heart_beat;
- bit user;
- /************* 本地函數(shù)聲明 **************/
- void GPIO_config(void);
- void Timer0Init(void);
- void CLR_Buf2(void);
- u8 Find(u8 *a);
- void Second_AT_Command(u8 *b,u8 *a,u8 wait_time);
- void Set_ATE0(void);
- void Connect_Server(void);
- void Rec_Server_Data(void);
- void Wait_CREG(void);
- void Send_OK(void);
- void Send_shuju(u8 *b);
- /************* 外部函數(shù)和變量聲明*****************/
- /*******************************************************************************
- * 函數(shù)名 : main
- * 描述 : 主函數(shù)
- * 輸入 :
- * 輸出 :
- * 返回 :
- * 注意 : 串口2負(fù)責(zé)與GPRS模塊通信,串口1用于串口調(diào)試,可以避免在下載程序時(shí)數(shù)據(jù)
- 還發(fā)送到模塊
- *******************************************************************************/
- void main(void)
- { P1M0=0XE0;
- P1M1=0X00;
- P17=0;
- P16=0;
- P15=0;
- GPIO_config();
- Uart1Init();
- Uart2Init();
- Timer0Init();
- EA=1; //開(kāi)總中斷
- UART1_SendString("GPRS模塊GPRS測(cè)試程序\r\n");
- UART1_SendString("GPRS模塊在注冊(cè)網(wǎng)絡(luò)\r\n");
- Wait_CREG();
- UART1_SendString("GPRS模塊注冊(cè)成功\r\n");
- UART1_SendString("GPRS模塊開(kāi)始連接服務(wù)器\r\n");
- Set_ATE0(); //設(shè)置回顯
- Connect_Server(); //設(shè)置GSM工作在網(wǎng)絡(luò)連接 并連接到ip
- Send_OK(); // 連接到賽靈網(wǎng)站
- UART1_SendString("連接成功\r\n");
- while(1)
- {
- Rec_Server_Data();
- if(Heart_beat==1)
- {
- Send_shuju("zzo");
- Heart_beat=0;
- }
-
- if(P24==0||user==1)
- {
- Send_shuju("ok");
- user=0;
- while(!P24);
- }
- }
- }
- /*******************************************************************************
- * 函數(shù)名 : Uart1
- * 描述 : 串口1中斷服務(wù)入口函數(shù)
- * 輸入 :
- * 輸出 :
- * 返回 :
- * 注意 :
- *******************************************************************************/
- void Uart1() interrupt 4
- {
- if (RI)
- {
- RI = 0; //清除RI位
- }
- if (TI)
- {
- TI = 0; //清除TI位
- }
- }
- /*******************************************************************************
- * 函數(shù)名 : Uart2
- * 描述 : 串口2中斷服務(wù)入口函數(shù)
- * 輸入 :
- * 輸出 :
- * 返回 :
- * 注意 :
- *******************************************************************************/
- void Uart2() interrupt 8
- {
- IE2 &= ~0x01; //關(guān)閉串口2中斷
- if (S2CON & S2RI)
- {
- S2CON &= ~S2RI; //清除S2RI位
- Uart2_Buf[First_Int] = S2BUF; //將接收到的字符串存到緩存中
- First_Int++; //緩存指針向后移動(dòng)
- if(First_Int > Buf2_Max) //如果緩存滿(mǎn),將緩存指針指向緩存的首地址
- {
- First_Int = 0;
- }
- }
- if (S2CON & S2TI)
- {
- S2CON &= ~S2TI; //清除S2TI位
- }
- IE2 |= 0x01; //使能串口2中斷
- }
- /*******************************************************************************
- * 函數(shù)名 : Timer0_ISR
- * 描述 : 定時(shí)器0中斷服務(wù)入口函數(shù),20ms中斷一次
- * 輸入 :
- * 輸出 :
- * 返回 :
- * 注意 :
- *******************************************************************************/
- void Timer0_ISR() interrupt 1
- {
- TR0=0;//關(guān)定時(shí)器
- Heartbeat++;
- if(Heartbeat>500)//每10秒發(fā)送心跳幀
- {
- Heartbeat=0;
- Heart_beat=1;
- }
- if(Timer0_start)
- Times++;
- if(Times > (50*shijian))
- {
- Timer0_start = 0;
- Times = 0;
- }
- TR0=1;//開(kāi)定時(shí)器
- }
- /*******************************************************************************
- * 函數(shù)名 : GPIO_config
- * 描述 : IO口配置函數(shù)
- * 輸入 :
- * 輸出 :
- * 返回 :
- * 注意 :
- *******************************************************************************/
- void GPIO_config(void)
- {
- P3M1 &= 0XC3; //配置P32~P35為推挽輸出
- P3M0 |= ~0XC3;
- LED=0;
- RUNING_LED=0;
- }
- /*******************************************************************************
- * 函數(shù)名 : Timer0Init
- * 描述 : 定時(shí)器0初始化函數(shù)
- * 輸入 :
- * 輸出 :
- * 返回 :
- * 注意 :
- *******************************************************************************/
- void Timer0Init(void) //20毫秒@22.1184MHz
- {
- AUXR &= 0x7F; //12T模式
- TMOD &= 0xF0; //設(shè)置定時(shí)器模式 16位重載
- TL0 = 0x00; //設(shè)定定時(shí)器初值
- TH0 = 0x70; //設(shè)定定時(shí)器初值
- TF0 = 0; //清除TF0標(biāo)志
- TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
- ET0 = 1; //使能定時(shí)器0中斷
- }
- /******
- /*******************************************************************************
- * 函數(shù)名 : CLR_Buf2
- * 描述 : 清除串口2緩存數(shù)據(jù)
- * 輸入 :
- * 輸出 :
- * 返回 :
- * 注意 :
- *******************************************************************************/
- void CLR_Buf2(void)
- {
- u16 k;
- for(k=0;k<Buf2_Max;k++) //將緩存內(nèi)容清零
- {
- Uart2_Buf[k] = 0x00;
- }
- First_Int = 0; //接收字符串的起始存儲(chǔ)位置
- }
- /*******************************************************************************
- * 函數(shù)名 : Wait_CREG
- * 描述 : 等待模塊注冊(cè)成功
- * 輸入 :
- * 輸出 :
- * 返回 :
- * 注意 :
- *******************************************************************************/
- void Wait_CREG(void)
- {
- u8 i;
- u8 k;
- i = 0;
- CLR_Buf2();
- while(i == 0)
- {
- CLR_Buf2();
- UART2_SendString("AT+CREG?");
- UART2_SendLR();
- delay_ms(5000);
- for(k=0;k<Buf2_Max;k++)
- {
- if(Uart2_Buf[k] == ':')
- {
- if((Uart2_Buf[k+4] == '1')||(Uart2_Buf[k+4] == '5')) //說(shuō)模塊注冊(cè)成功
- {
- i = 1;
- break;
- }
- }
- }
- UART1_SendString("注冊(cè)中.....");
- }
- }
- /*******************************************************************************
- * 函數(shù)名 : Find
- * 描述 : 判斷緩存中是否含有指定的字符串
- * 輸入 :
- * 輸出 :
- * 返回 : unsigned char:1 找到指定字符,0 未找到指定字符
- * 注意 :
- *******************************************************************************/
- u8 Find(u8 *a)
- {
- if(strstr(Uart2_Buf,a)!=NULL)
- return 1;
- else
- return 0;
- }
- /*******************************************************************************
- * 函數(shù)名 : Second_AT_Command
- * 描述 : 發(fā)送AT指令函數(shù)
- * 輸入 : 發(fā)送數(shù)據(jù)的指針、發(fā)送等待時(shí)間(單位:S)
- * 輸出 :
- * 返回 :
- * 注意 :
- *******************************************************************************/
- void Second_AT_Command(u8 *b,u8 *a,u8 wait_time)
- {
- u8 i;
- u8 *c;
- c = b;
- //保存字符串地址到c
- CLR_Buf2();
- i = 0;
- while(i == 0)
- {
- if(!Find(a))
- {
- if(Timer0_start == 0)
- {
- b = c; //將字符串地址給b
- for (b; *b!='\0';b++)
- {
- UART2_SendData(*b);
- }
- UART2_SendLR();
- Times = 0;
- shijian = wait_time;
- Timer0_start = 1;
- }
- }
- else
- {
- i = 1;
- Timer0_start = 0;
- }
- }
- CLR_Buf2();
- }
- /*******************************************************************************
- * 函數(shù)名 : Set_ATE0
- * 描述 : 取消回顯
- * 輸入 :
- * 輸出 :
- * 返回 :
- * 注意 :
- *******************************************************************************/
- void Set_ATE0(void)
- {
- Second_AT_Command("ATE0","OK",3); //取消回顯
- }
- /*******************************************************************************
- * 函數(shù)名 : Connect_Server
- * 描述 : GPRS連接服務(wù)器函數(shù)
- * 輸入 :
- * 輸出 :
- * 返回 :
- * 注意 :
- *******************************************************************************/
- void Connect_Server(void)
- {
- UART2_SendString("AT+CIPCLOSE=1"); //關(guān)閉連接
- Second_AT_Command("AT+CIPSHUT","SHUT OK",2); //關(guān)閉移動(dòng)場(chǎng)景
- Second_AT_Command("AT+CGCLASS=\"B\"","OK",2);//設(shè)置GPRS移動(dòng)臺(tái)類(lèi)別為B,支持包交換和數(shù)據(jù)交換
- Second_AT_Command("AT+CGDCONT=1,\"IP\",\"CMNET\"","OK",2);//設(shè)置PDP上下文,互聯(lián)網(wǎng)接協(xié)議,接入點(diǎn)等信息
- Second_AT_Command("AT+CGATT=1","OK",2);//附著GPRS業(yè)務(wù)
- Second_AT_Command("AT+CIPCSGP=1,\"CMNET\"","OK",2);//設(shè)置為GPRS連接模式
- Second_AT_Command("AT+CIPHEAD=1","OK",2);//設(shè)置接收數(shù)據(jù)顯示IP頭(方便判斷數(shù)據(jù)來(lái)源,僅在單路連接有效)
- Second_AT_Command(string,"OK",5);
- delay_ms(100);
- CLR_Buf2();
- }
- /*******************************************************************************
- * 函數(shù)名 : Rec_Server_Data
- * 描述 : 接收服務(wù)器數(shù)據(jù)函數(shù)
- * 輸入 :
- * 輸出 :
- * 返回 :
- * 注意 :
- *******************************************************************************/
- void Rec_Server_Data(void)
- {
- if(strstr(Uart2_Buf,"+IPD")!=NULL) //若緩存字符串中含有+IPD
- {
- Heartbeat=0; //清除心跳幀計(jì)數(shù)器
- Heart_beat=0;
- delay_ms(100);
- if(strstr(Uart2_Buf,"oneled1")!=NULL)
- {
- P17 = ~P17;
- Send_shuju("zlany");
- }
- else if(strstr(Uart2_Buf,"oneled2")!=NULL)
- {
- P16=~P16;
- Send_shuju("zlvy");
- }
- else if(strstr(Uart2_Buf,"oneled3")!=NULL)
- {
- P15=~P15;
- Send_shuju("zhongy");
- }
-
- else if(strstr(Uart2_Buf,"oneled4")!=NULL)
- {
- P15=P16=P17=1;
- Send_shuju("zkaiy");
- }
- else if(strstr(Uart2_Buf,"offled")!=NULL)
- {
- P15=P16=P17=0;
- Send_shuju("zguany");
- }
- UART1_SendString("收到新信息:\r\n");
- UART1_SendLR();
- UART1_SendString(Uart2_Buf);
- CLR_Buf2();
-
- }
- }
- /*******************************************************************************
- * 函數(shù)名 : Send_OK
- * 描述 : 發(fā)送數(shù)據(jù)應(yīng)答服務(wù)器的指令,該函數(shù)在有兩功能
- 1:接收到服務(wù)器的數(shù)據(jù)后,應(yīng)答服務(wù)器
- 2:服務(wù)器無(wú)下發(fā)數(shù)據(jù)時(shí),每隔10秒發(fā)送一幀心跳,保持與服務(wù)器連接
- * 輸入 :
- * 輸出 :
- * 返回 :
- * 注意 :
- *******************************************************************************/
- void Send_OK(void)
- {
- Second_AT_Command("AT+CIPSEND",">",2);
- UART2_SendString("{");
- UART2_SendString("\"LINK\":\"t2c\",\"ISTR\":\"log\",\"TID\":\"aCQZkMidVPXioM1Q\",\"PWD\":\"991004ssd\"}\r\n");
- UART2_SendString("\32\0"); //發(fā)送短信內(nèi)容
- }
- //向遠(yuǎn)程服務(wù)器數(shù)據(jù)函數(shù)
- void Send_shuju(u8 *b)
- {
- Second_AT_Command("AT+CIPSEND",">",2);
- UART2_SendString("{");
- UART2_SendString("\"LINK\":\"t2t\",\"ISTR\":\"tt\",\"MSG\":\""); //將數(shù)據(jù)發(fā)送到遠(yuǎn)程端設(shè)備
- for (b; *b!='\0';b++)
- {
- UART2_SendData(*b);
- }
- UART2_SendString("\"}\r\n"); //將數(shù)據(jù)發(fā)送到遠(yuǎn)程端設(shè)備
- UART2_SendString("\32\0"); //發(fā)送短信內(nèi)容
- }
復(fù)制代碼
所有資料51hei提供下載:
SIM800C通信.7z
(2.34 MB, 下載次數(shù): 22)
2019-2-27 00:13 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|