<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          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.ex-cimer.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)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();