新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于51單片機(jī)的GSM模塊C語(yǔ)言發(fā)送短信程序

        基于51單片機(jī)的GSM模塊C語(yǔ)言發(fā)送短信程序

        作者: 時(shí)間:2016-11-22 來(lái)源:網(wǎng)絡(luò) 收藏
        #include

        #include
        #include
        #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;

        本文引用地址:http://www.104case.com/article/201611/319959.htm


        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"};
        //目的手機(jī)地址,
        uchar code TC_ZXH[]={"AT+CSCA=+8613800531500"};
        //本地中心號(hào)。
        ////////其他地方不要亂動(dòng)//
        uchar code TC_FSNR[]={"zhangkaiqiang"};
        //發(fā)送短信內(nèi)容。
        uchar code TC_WLZT[]={"AT+CREG?"};
        //網(wǎng)絡(luò)狀態(tài)查詢
        uchar code TC_MSXZ[]={"AT+CMGF=1"};
        //發(fā)送模式選擇。
        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 {
        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位數(shù)據(jù),允許接收
        TMOD |= 0x20 ;
        //TMOD: timer 1, mode 2, 8-bit reload
        //定時(shí)器1為模式2,8位自動(dòng)重裝
        PCON |= 0x80 ; //SMOD=1;
        TH1 = 0xFD ; //Baud:19200 fosc="11".0592MHz
        IE |= 0x90 ; //Enable Serial Interrupt
        TR1 = 1 ; // timer 1 run
        TI=1;
        }
        //向串口發(fā)送一個(gè)字符
        void send_uart( unsigned char ch)
        {
        while (TI==0);
        TI= 0 ;
        SBUF=ch;
        }
        //串口接收中斷函數(shù)
        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 {
        send_uart(TC_FSNR[i]);
        }
        delay(1000);
        send_uart(0X1A);
        TC35_CON=ATDAT;
        }
        //寫目的手機(jī)的
        void AT_CMGS()
        {
        uchar i;
        for(i=0;i {
        send_uart(TC_MDSJ[i]);
        }
        send_uart(0X0D);
        send_uart(0X0D);
        send_uart(0X0A);
        TC35_CON=CMGS;
        }
        //寫信息中心號(hào)
        void AT_CSCA()
        {
        uchar i;
        for(i=0;i {
        send_uart(TC_ZXH[i]);
        }
        send_uart(0X0D);
        send_uart(0X0D);
        send_uart(0X0A);
        TC35_CON=CSCA;
        }
        //AT復(fù)位指令
        void AT_RST()
        {
        uchar i;
        for(i=0;i {
        send_uart(TC_ATF[i]);
        }
        send_uart(0X0D);
        send_uart(0X0D);
        send_uart(0X0A);
        TC35_CON=RST;
        }
        //AT網(wǎng)絡(luò)狀態(tài)查詢指令
        void AT_CREG()
        {
        uchar i;
        for(i=0;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 {
        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 {
        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 {
        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 優(yōu)先信息格式。執(zhí)行格式有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 網(wǎng)絡(luò)注冊(cè)。獲得手機(jī)的注冊(cè)狀態(tài)。
        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 命令設(shè)定的存儲(chǔ)器讀取。
        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 刪除短信息。刪除一個(gè)或多個(gè)短信息。
        else if(TC35_CON==CMGD)//TC35_CON==0x03
        {
        delay(100);
        if((TC35_RE[12]==O)&&(TC35_RE[13]==K))
        {
        AT_CSCA();
        }
        else
        {
        }
        }
        //AT+CSCA 短信服務(wù)中心地址。
        else if(TC35_CON==CSCA)//TC35_CON==0x07
        {
        delay(100);
        if((TC35_RE[25]==O)&&(TC35_RE[26]==K))
        {

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

        ATNAME();
        }
        else{}
        }
        //發(fā)送完畢返回繼續(xù)掃描接收
        else if(TC35_CON==ATDAT)//0x08
        {
        delay(100);
        if((TC35_RE[0]==+)||(TC35_RE[0]==0x1A))
        {
        AT_CMGR();
        }
        else
        {}
        }
        //復(fù)位接收組
        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();

        }




        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 富川| 庆城县| 云龙县| 永吉县| 滕州市| 大港区| 施甸县| 抚远县| 上蔡县| 安庆市| 察雅县| 南木林县| 兴宁市| 凤庆县| 措勤县| 巩留县| 房产| 尚义县| 霸州市| 保德县| 绍兴市| 郯城县| 从化市| 鄂州市| 乌兰察布市| 隆昌县| 宜宾县| 长泰县| 布尔津县| 东莞市| 桓台县| 玉田县| 南平市| 久治县| 法库县| 扶绥县| 迭部县| 忻州市| 陆河县| 攀枝花市| 阿图什市|