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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機的GSM模塊C語言發送短信程序

  [復制鏈接]
跳轉到指定樓層
樓主
ID:161074 發表于 2017-1-10 10:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg52.h>
#include<absacc.h>
#include<stdio.h>
#define uint unsigned int
#define uchar unsigned char
#define RST      0X01
#define CMGF     0X02
#define CMGD     0X03
#define CREG     0X04
#define CMGR     0X05
#define CMGS     0X06
#define CSCA     0X07
#define ATDAT    0X08
#define TC35RET 0X00
sbit IGT=P1^0;

uchar TC35_CON;
uchar i_TC35_RECE;
uchar TC35_RE[30],
   TC35_MAX,
   i_TC35;
extern uchar TC35_CON;
extern uchar i_TC35_RECE;
extern uchar i_receive,
      TC35_RE[30],
   TC35_MAX,
   i_TC35;
void delay(uint);
void init_serialcom( void );
void send_uart( unsigned char);
void ATNAME(void);
void AT_CMGS(void);
void AT_CSCA(void);
void AT_RST(void);
void AT_CREG(void);
void AT_CMGF(void);
void AT_CMGR(void);
void AT_CMGD(void);

uchar code TC_MDSJ[]={"AT+CMGS=13969138509"};
//目的手機地址,
uchar code TC_ZXH[]={"AT+CSCA=+8613800531500"};
//本地中心號。
////////其他地方不要亂動//
uchar code TC_FSNR[]={"zhangkaiqiang"};            
//發送短信內容。
uchar code TC_WLZT[]={"AT+CREG?"};            
//網絡狀態查詢
uchar code TC_MSXZ[]={"AT+CMGF=1"};            
//發送模式選擇。
uchar code TC_DQML[]={"AT+CMGR=1"};            
//短信讀取命令。
uchar code TC_SCML[]={"AT+CMGD=1"};            
//短信刪除命令。
uchar code TC_ATF[]={"AT&F"};               
//格式化命令。
void delay(uint i)
{
    unsigned int i_delay,j_delay;
    for(i_delay=0;i_delay<i;i_delay++)
    {
        for(j_delay=0;j_delay<100;j_delay++)
        {;}
    }
}
void init_serialcom( void )
{
    SCON = 0x50 ;
    //SCON: serail mode 1, 8-bit UART, enable ucvr  
    //UART為模式1,8位數據,允許接收
    TMOD |= 0x20 ;
    //TMOD: timer 1, mode 2, 8-bit reload            
    //定時器1為模式2,8位自動重裝
    PCON |= 0x80 ; //SMOD=1;
    TH1 = 0xFD ;   //Baud:19200 fosc="11".0592MHz
    IE |= 0x90 ;     //Enable Serial Interrupt
    TR1 = 1 ;       // timer 1 run
    TI=1;        
}         
//向串口發送一個字符
void send_uart( unsigned char ch)
{
    while (TI==0);
    TI= 0 ;
    SBUF=ch;
}
//串口接收中斷函數
void serial () interrupt 4 using 3
{
    if (RI)
    {
        RI = 0 ;
        i_receive=SBUF;
        TC35_RE[i_TC35_RECE++]=i_receive;
        // i_TC35_RECE++;
        if(i_TC35_RECE>TC35_MAX)
        {
            TC35_MAX=i_TC35_RECE;
        }
    }
}
void ATNAME()
{

    uchar i;
    for(i=0;i<sizeof(TC_FSNR)-1;i++)
    {
        send_uart(TC_FSNR[i]);
    }
    delay(1000);
    send_uart(0X1A);
    TC35_CON=ATDAT;
}
//寫目的手機的
void AT_CMGS()
{
    uchar i;
    for(i=0;i<sizeof(TC_MDSJ)-1;i++)
    {
        send_uart(TC_MDSJ[i]);
    }
    send_uart(0X0D);
    send_uart(0X0D);
    send_uart(0X0A);
    TC35_CON=CMGS;
}
//寫信息中心號
void AT_CSCA()
{
    uchar i;
    for(i=0;i<sizeof(TC_ZXH)-1;i++)
    {
        send_uart(TC_ZXH[i]);
    }
    send_uart(0X0D);
    send_uart(0X0D);
    send_uart(0X0A);
    TC35_CON=CSCA;
}
//AT復位指令
void AT_RST()
{
    uchar i;
    for(i=0;i<sizeof(TC_ATF)-1;i++)//TC_ATF:格式化命令。
    {
        send_uart(TC_ATF[i]);
    }
    send_uart(0X0D);
    send_uart(0X0D);
    send_uart(0X0A);
    TC35_CON=RST;  
}
//AT網絡狀態查詢指令
void AT_CREG()
{
    uchar i;
    for(i=0;i<sizeof(TC_WLZT)-1;i++)
    {
        send_uart(TC_WLZT[i]);
    }
    send_uart(0X0D);
    send_uart(0X0D);
    send_uart(0X0A);
    TC35_CON=CREG;
}
//AT接收格式指令
void AT_CMGF()
{
    uchar i;
    for(i=0;i<sizeof(TC_MSXZ)-1;i++)//TC_MSXZ:發送模式選擇。
    {
        send_uart(TC_MSXZ[i]);
    }
    send_uart(0X0D);
    send_uart(0X0D);
    send_uart(0X0A);
    TC35_CON=CMGF;
}
//AT短消息讀取指令
void AT_CMGR()
{
    uchar i;
    for(i=0;i<sizeof(TC_DQML)-1;i++)
    {
        send_uart(TC_DQML[i]);
    }
    send_uart(0X0D);
    send_uart(0X0D);
    send_uart(0X0A);
    TC35_CON=CMGR;
}
//AT短消息刪除指令
void AT_CMGD()
{
    uchar i;
    for(i=0;i<sizeof(TC_SCML)-1;i++)
    {
        send_uart(TC_SCML[i]);
    }
    send_uart(0X0D);
    send_uart(0X0D);
    send_uart(0X0A);
    TC35_CON=CMGD;
}

void delay1(void)   //誤差 0us
{
    unsigned char a,b,c;
    for(c=19;c>0;c--)
        for(b=20;b>0;b--)
            for(a=150;a>0;a--);
}
void GSM(void)
{  
uchar shou=100;
IGT=0;
delay1();
IGT=1;
    init_serialcom(); //初始化串口
    delay(100);
    TC35_MAX=0;
    AT_RST();
    while(shou--)
    {
        delay(100);
        if(TC35_MAX>0)
        {
            if(TC35_CON==RST)//TC35_CON==0x01
            {
                if((TC35_RE[7]=='O')&&(TC35_RE[8]=='K'))
                {
                    TC35_CON=TC35RET;
                    AT_CMGF();
                }
                else
                {}  
            }
            //AT+CMGF 優先信息格式。執行格式有TEXT 方式和PDU 方式。
            else if(TC35_CON==CMGF) //TC35_CON==0x02
            {
                if((TC35_RE[12]=='O')&&(TC35_RE[13]=='K'))
                {
                    TC35_CON=TC35RET; // delay(100);
                    AT_CREG();
                }
                else
                {}
            }
            //AT+CREG 網絡注冊。獲得手機的注冊狀態。
            else if(TC35_CON==CREG)//TC35_CON==0x04
            {
                if(((TC35_RE[18]=='0')&&(TC35_RE[20]=='1'))||((TC35_RE[18]=='0')&&(TC35_RE[20]=='5')))
                {
                    TC35_CON=TC35RET;
                    AT_CMGD();
                }
                else
                {
                    AT_CREG();
                }
            }
//AT+CMGR 讀短信。信息從+CPMS 命令設定的存儲器讀取。
            else if(TC35_CON==CMGR)//TC35_CON==0x05
            {
                if(TC35_MAX<=30)
                {
                    AT_CMGR();
                }
                else //if((TC35_MAX==77)||(TC35_MAX==79))
                {

                    if(TC35_RE[69]=='0')
                    {
                        TC35_CON=TC35RET;
                        delay(100);
                        AT_CMGD();
                    }
                    else if(TC35_RE[69]=='1')
                    {
                        TC35_CON=TC35RET;
                        delay(100);
                        AT_CMGD();
                    }
                    else if(TC35_RE[69]=='2')
                    {

                        TC35_CON=TC35RET;
                        delay(100);
                        AT_CMGD();
                    }
                    else if(TC35_RE[69]=='3')
                    {
                        TC35_CON=TC35RET;
                        delay(100);
                        AT_CMGD();
                    }
                    else if(TC35_RE[69]=='4')
                    {
                        TC35_CON=TC35RET;
                        delay(100);
                        AT_CMGD();
                    }
                    else if(TC35_RE[69]=='5')
                    {

                        TC35_CON=TC35RET;
                        delay(100);
                        AT_CMGD();
                    }
                    else if(TC35_RE[69]=='6')
                    {

                        TC35_CON=TC35RET;
                        delay(100);
                        AT_CMGD();
                    }
                    else if(TC35_RE[69]=='7')
                    {

                        TC35_CON=TC35RET;
                        delay(100);
                        AT_CMGD();
                    }
                    else
                    {
                        TC35_CON=TC35RET;
                        AT_CMGR();
                    }
                }
            }
//AT+CMGD 刪除短信息。刪除一個或多個短信息。
            else if(TC35_CON==CMGD)//TC35_CON==0x03
            {
                delay(100);
                if((TC35_RE[12]=='O')&&(TC35_RE[13]=='K'))
                {
                    AT_CSCA();
                }
                else
                {
                }
            }
            //AT+CSCA 短信服務中心地址。
            else if(TC35_CON==CSCA)//TC35_CON==0x07
            {
                delay(100);
                if((TC35_RE[25]=='O')&&(TC35_RE[26]=='K'))
                {

                    AT_CMGS();
                }
                else
                {
                }
            }
            //填寫發送內容
            else if(TC35_CON==CMGS)//TC35_CON==0x06
            {
                delay(100);
                if((TC35_RE[22]==0X3E)&&(TC35_RE[23]==0X20))
                {

                    ATNAME();
                }
                else{}
            }
            //發送完畢返回繼續掃描接收
            else if(TC35_CON==ATDAT)//0x08
            {
                delay(100);
                if((TC35_RE[0]=='+')||(TC35_RE[0]==0x1A))
                {
                    AT_CMGR();
                }
                else
                {}
            }
            //復位接收組
            for(i_TC35=0;i_TC35<=TC35_MAX;i_TC35++)
            {
                TC35_RE[i_TC35]=0;
            }
            i_TC35_RECE=0;
            TC35_MAX=0;
        }
    }
}
void main()
{
    GSM();

}

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

使用道具 舉報

沙發
ID:161074 發表于 2017-1-10 10:21 | 只看該作者
不懂的同學直接問我
回復

使用道具 舉報

板凳
ID:186936 發表于 2017-7-26 08:06 | 只看該作者
958809860 發表于 2017-1-10 10:21
**** 作者被禁止或刪除 內容自動屏蔽 ****

你好,我現在在學51我想學習GSM模塊可以教教我嗎
回復

使用道具 舉報

地板
ID:247049 發表于 2017-12-3 19:09 來自手機 | 只看該作者
958809860 發表于 2017-1-10 10:21
**** 作者被禁止或刪除 內容自動屏蔽 ****

您好,我想問下我要發的內容直接在定義那里改就可以了嗎?
回復

使用道具 舉報

5#
ID:244767 發表于 2017-12-4 22:06 | 只看該作者
有沒有仿真圖
回復

使用道具 舉報

6#
ID:286264 發表于 2018-2-28 13:51 | 只看該作者
您好,請問樓這個程序驅動的是什么型號的GSM模塊?
回復

使用道具 舉報

7#
ID:455320 發表于 2018-12-26 12:53 | 只看該作者
958809860 發表于 2017-1-10 10:21
**** 作者被禁止或刪除 內容自動屏蔽 ****

用單片機做個發短信的需要什么模塊呀
回復

使用道具 舉報

8#
ID:380141 發表于 2019-10-23 22:15 | 只看該作者
TC35模塊是2G的,而且只能插移動的卡,電信和聯通的都不能用。
回復

使用道具 舉報

9#
ID:574058 發表于 2020-4-25 10:30 | 只看該作者
958809860 發表于 2017-1-10 10:21
**** 作者被禁止或刪除 內容自動屏蔽 ****

你這程序的頭文件在哪里。
只有主程序啊
回復

使用道具 舉報

10#
ID:727538 發表于 2020-5-30 16:24 | 只看該作者
958809860 發表于 2017-1-10 10:21
**** 作者被禁止或刪除 內容自動屏蔽 ****

1,如果只需要發送的功能,那可以直接刪掉接收部分的代碼嗎?
2,能先設定中間變量,然后通過printf語句,將目標“手機號”和“信息”信息賦值給中間變量,最后放到發送函數中嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: www.yw193.com| 成人综合在线视频 | 国产一区欧美 | 久久一区精品 | 日韩精品成人在线 | 欧美色成人 | 中文字幕综合 | 日本久久一区二区三区 | 日操夜操 | 黑人巨大精品欧美一区二区一视频 | 做a视频 | 亚洲一区二区三区在线 | 欧美a在线 | 成人久久18免费网站图片 | 男女啪啪高潮无遮挡免费动态 | 国产成人综合在线 | 欧美日韩综合 | 97av视频| 久久精品视频在线播放 | 美女天天操| 欧美在线观看一区二区 | 久久婷婷国产 | 91视频在线观看 | 精品久久一区 | 99视频免费在线观看 | 黄网站涩免费蜜桃网站 | 91成人免费观看 | 免费在线观看一区二区 | 久热免费在线 | 九九热精 | 久久精品网 | 欧美日产国产成人免费图片 | 精品国产三级 | 欧美日韩一区不卡 | 精品亚洲一区二区三区 | 国产精品日本一区二区在线播放 | 久久国内精品 | 超碰人人做 | 久久久久国产一区二区三区 | 中文字幕在线免费观看 | 福利视频一区二区 |