• 方案介紹
    • 一、前言
    • 二、SIM800C硬件介紹
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

51單片機(jī)+SIM800C(GSM模塊)實(shí)現(xiàn)短信發(fā)送功能

5小時(shí)前
164
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

更多詳細(xì)資料請(qǐng)聯(lián)系.docx

共1個(gè)文件

一、前言

本項(xiàng)目利用51單片機(jī)和SIM800C GSM模塊實(shí)現(xiàn)短信發(fā)送功能。短信作為一種廣泛應(yīng)用的通信方式,在許多領(lǐng)域具有重要的作用,如物聯(lián)網(wǎng)、安防系統(tǒng)、遠(yuǎn)程監(jiān)控等。通過(guò)將51單片機(jī)與SIM800C GSM模塊相結(jié)合,可以實(shí)現(xiàn)在各種應(yīng)用場(chǎng)景下的短信通信功能。

本項(xiàng)目的核心組件是51單片機(jī),是一種低成本、低功耗的單片機(jī),廣泛應(yīng)用于嵌入式系統(tǒng)開(kāi)發(fā)。利用51單片機(jī)的串口功能來(lái)控制SIM800C GSM模塊的通信。SIM800C是一款功能強(qiáng)大的GSM模塊,支持GSM/GPRS通信,具有發(fā)送和接收短信的能力。

在本項(xiàng)目中,搭建51單片機(jī)和SIM800C GSM模塊的硬件連接。使用C語(yǔ)言編寫(xiě)程序,在51單片機(jī)上實(shí)現(xiàn)與SIM800C的通信控制。通過(guò)串口通信向SIM800C發(fā)送AT指令,實(shí)現(xiàn)短信的發(fā)送功能。

為了實(shí)現(xiàn)短信發(fā)送功能,需要熟悉SIM800C的AT指令集,了解如何設(shè)置短信參數(shù)、編寫(xiě)短信內(nèi)容并發(fā)送。還需要處理SIM800C返回的響應(yīng),以確保短信發(fā)送的成功與否。

image-20230810164852517

image-20230810164922749

二、SIM800C硬件介紹

SIM800C是一款功能強(qiáng)大、靈活可靠的GSM/GPRS模塊,廣泛應(yīng)用于各種通信和控制場(chǎng)景,尤其在物聯(lián)網(wǎng)應(yīng)用中能發(fā)揮重要作用。通過(guò)合理使用SIM800C的AT指令,可以輕松實(shí)現(xiàn)短信發(fā)送和收取等功能。

2.1 SIM800C的特點(diǎn)

【1】支持多種通信方式:SIM800C支持GSM、GPRS、SMS、MMS、TCP/IP等通信方式,可以實(shí)現(xiàn)語(yǔ)音通話、短信收發(fā)、數(shù)據(jù)傳輸等功能。

【2】大量接口:SIM800C提供了UART、SPII2C等接口,方便與其他設(shè)備進(jìn)行通信和控制。

【3】低功耗設(shè)計(jì):SIM800C具有低功耗模式,在待機(jī)時(shí)能夠極大地減少電力消耗。

【4】小巧的尺寸:SIM800C模塊體積小巧,便于嵌入各種設(shè)備中。

【5】豐富的工作溫度范圍:SIM800C適用于廣泛的工作溫度范圍,可在惡劣的環(huán)境條件下正常工作。

2.2 使用場(chǎng)景

SIM800C的使用場(chǎng)景廣泛,主要包括以下幾個(gè)方面:

【1】物聯(lián)網(wǎng)應(yīng)用:SIM800C可以通過(guò)GPRS進(jìn)行數(shù)據(jù)傳輸,用于物聯(lián)網(wǎng)設(shè)備的遠(yuǎn)程監(jiān)控、遠(yuǎn)程控制、數(shù)據(jù)采集和傳輸?shù)取?/p>

【2】安防系統(tǒng):SIM800C可以用于報(bào)警系統(tǒng),通過(guò)短信或語(yǔ)音通知用戶有關(guān)安全事件的信息。

【3】遠(yuǎn)程控制應(yīng)用:通過(guò)SIM800C模塊,可以實(shí)現(xiàn)遠(yuǎn)程控制設(shè)備,比如遠(yuǎn)程開(kāi)關(guān)、門(mén)禁系統(tǒng)等。

【4】移動(dòng)支付終端:SIM800C可以與移動(dòng)支付系統(tǒng)集成,實(shí)現(xiàn)移動(dòng)支付終端的功能。

2.3 AT指令介紹

SIM800C使用AT指令進(jìn)行通信和控制。

下面是一些常用的與短信相關(guān)的AT指令:

【1】AT+CMGF:設(shè)置短信模式,用于選擇短信的格式。例如,AT+CMGF=1表示以文本模式發(fā)送和接收短信。

【2】AT+CMGS:發(fā)送短信。需要指定接收方的電話號(hào)碼,并在輸入結(jié)束后按Ctrl+Z(ASCII碼為0x1A)表示短信內(nèi)容輸入完成。例如,AT+CMGS="+123456789"表示發(fā)送短信給號(hào)碼+123456789。

【3】AT+CMGR:讀取短信??梢宰x取已存儲(chǔ)在模塊中的已接收短信,返回包括發(fā)送方號(hào)碼和短信內(nèi)容在內(nèi)的信息。

【4】AT+CMGD:刪除短信。用于刪除指定索引處的短信。例如,AT+CMGD=1表示刪除索引為1的短信。

【5】AT+CNMI:設(shè)置新短消息指示??梢耘渲媚K在接收到新短信時(shí)給出通知,以便及時(shí)處理。

三、代碼實(shí)現(xiàn)

3.1 STC89C52硬件配置

【1】串口:STC89C52共有兩個(gè)串口,分別是UART0和UART1。可以用于與其他設(shè)備進(jìn)行異步串行通信。

【2】定時(shí)器:STC89C52共有三個(gè)定時(shí)器,分別是Timer0、Timer1和Timer2??梢杂糜诋a(chǎn)生定時(shí)中斷、計(jì)時(shí)等功能。

【3】GPIO:STC89C52具有32個(gè)I/O口,每個(gè)I/O口可以配置為輸入或輸出。其中,P0口(Port 0)和P2口(Port 2)上的引腳可以作為UART0的GPIO引腳使用,而P3口(Port 3)上的引腳可以作為UART1的GPIO引腳使用。

串口對(duì)應(yīng)的GPIO口編號(hào)如下:

【A】UART0:

  • TXD:對(duì)應(yīng)P0.0口
  • RXD:對(duì)應(yīng)P0.1口

【B】UART1:

  • TXD:對(duì)應(yīng)P3.1口
  • RXD:對(duì)應(yīng)P3.0口

在STC89C52中,UART0的TXD引腳對(duì)應(yīng)P0.0口,RXD引腳對(duì)應(yīng)P0.1口;UART1的TXD引腳對(duì)應(yīng)P3.1口,RXD引腳對(duì)應(yīng)P3.0口。

3.2 短信發(fā)送代碼實(shí)現(xiàn)

#include <reg52.h>

// 定義SIM800C的串口引腳
sbit SIM_RX = P3^0;  // SIM800C的串口接收引腳
sbit SIM_TX = P3^1;  // SIM800C的串口發(fā)送引腳

// 定義波特率常量
#define BAUDRATE 9600

// 定義發(fā)送函數(shù)
void sendATCommand(char* command) {
    // 發(fā)送AT指令
    for (int i = 0; command[i] != '?'; i++) {
        SBUF = command[i];
        while (TI == 0);  // 等待發(fā)送完成
        TI = 0;  // 清除發(fā)送完成標(biāo)志
    }
}

// 主函數(shù)
void main() {
    // 初始化串口
    TMOD = 0x20;  // 設(shè)置定時(shí)器1為模式2
    TH1 = 256 - BAUDRATE / 9600;  // 設(shè)置波特率
    TL1 = TH1;
    TR1 = 1;  // 啟動(dòng)定時(shí)器1
    SCON = 0x50;  // 設(shè)置串口為模式1,允許接收

    // 發(fā)送AT指令初始化SIM800C模塊
    sendATCommand("ATrn");  // 發(fā)送AT指令,檢測(cè)模塊是否正常
    sendATCommand("AT+CMGF=1rn");  // 設(shè)置短信模式為文本模式
    sendATCommand("AT+CNMI=1,2,0,0,0rn");  // 設(shè)置接收新短信時(shí)的提示方式

    // 發(fā)送短信
    sendATCommand("AT+CMGS="+1234567890"rn");  // 設(shè)置短信接收號(hào)碼
    sendATCommand("Hello, this is a test message.x1A");  // 發(fā)送短信內(nèi)容,以Ctrl+Z作為結(jié)束符

    while (1);
}

3.3 短信發(fā)送、電話撥打功能-封裝子函數(shù)

#include <reg51.h>

// 定義串口1的引腳連接
sbit UART1_TX = P3^1;
sbit UART1_RX = P3^0;

// 初始化串口1
void UART1_Init() {
    TMOD |= 0x20;  // 設(shè)置定時(shí)器1為模式2(8位自動(dòng)重載)
    SCON = 0x50;  // 設(shè)置串口1為工作方式1,并允許接收
    TH1 = 0xFD;   // 設(shè)置波特率9600,對(duì)應(yīng)12MHz晶振
    TL1 = 0xFD;
    TR1 = 1;      // 啟動(dòng)定時(shí)器1
}

// 發(fā)送一個(gè)字符到串口1
void UART1_SendChar(unsigned char c) {
    SBUF = c;
    while(!TI);  // 等待發(fā)送完成
    TI = 0;      // 清除發(fā)送標(biāo)志
}

// 發(fā)送字符串到串口1
void UART1_SendString(const unsigned char *str) {
    while (*str) {
        UART1_SendChar(*str++);
    }
}

// 發(fā)送AT指令到SIM800C模塊
void SIM800C_SendATCommand(const unsigned char *atCmd) {
    UART1_SendString(atCmd);
    UART1_SendChar('r');
    UART1_SendChar('n');
}

// 發(fā)送短信
void SIM800C_SendSMS(const unsigned char *phoneNumber, const unsigned char *message) {
    SIM800C_SendATCommand("AT+CMGF=1"); // 設(shè)置為文本模式
    // 等待回復(fù)
    // ...
    SIM800C_SendATCommand("AT+CMGS="");
    UART1_SendString(phoneNumber); // 接收方手機(jī)號(hào)
    UART1_SendChar('"');
    UART1_SendChar('r');
    UART1_SendString(message); // 短信內(nèi)容
    UART1_SendChar(0x1A); // 發(fā)送Ctrl+Z結(jié)束短信
}

// 撥打電話
void SIM800C_MakeCall(const unsigned char *phoneNumber) {
    SIM800C_SendATCommand("ATD"); // 撥號(hào)命令
    UART1_SendString(phoneNumber); // 目標(biāo)手機(jī)號(hào)
    UART1_SendChar(';'); // 發(fā)送分號(hào)以撥號(hào)
}

void main() {
    UART1_Init(); // 初始化串口1

    // 等待SIM800C模塊初始化完成
    // ...

    // 發(fā)送短信
    SIM800C_SendSMS("手機(jī)號(hào)", "短信內(nèi)容");

    // 撥打電話
    // SIM800C_MakeCall("目標(biāo)手機(jī)號(hào)");

    while(1);
}

代碼中需要將"手機(jī)號(hào)"和"目標(biāo)手機(jī)號(hào)"填充為實(shí)際的電話號(hào)碼。

  • 更多詳細(xì)資料請(qǐng)聯(lián)系.docx
    下載

相關(guān)推薦

方案定制

去合作
方案開(kāi)發(fā)定制化,2000+方案商即時(shí)響應(yīng)!