51单片机GSM 收发短信打电话源码 sim800c 900c

在代码编程之前 大家必须先手续AT指令并且测试是否能正常接收发短信
AT指令可以找卖家要 按照流程发送即可
注意事项:卡的斜口朝外
稳定1A的电流
使用移动卡

程序功能:按下K2发送短信
发短信
接下来放源码 亲测有效:

//按下K2发送短信

#include "reg52.h"
#include "intrins.h"
#include "stdio.h"
#include "math.h"
#include "stdlib.h"
#include "string.h"
#include "absacc.h"
typedef unsigned char uchar;
typedef unsigned int uint;

sbit LED0=P2^0;
sbit LED1=P2^1;
sbit LED2=P2^2;
sbit LED3=P2^3;
sbit LED4=P2^4;

sbit k1=P3^3; //按键

sbit beep=P1^5;   //蜂鸣器

uchar code SMS_send[]="AT+CMGS=";
uchar code SMS_send_AT[]="AT";
uchar code GMS[]="AT+CMGF=1";
uchar code SMS_PDU[]="AT+CSQ";
uchar Byte_num[]="\"+86173*****83\"";
uchar code Sms2_Pdu[]="warning";
//uchar SMS_End[]="\x1a";
	uchar date;


void delay(uint n)          //延时
{
unsigned int  i,j;
for(i=0;i<n;i++);
for(j=0;j<123;j++);
}

void Print_Char(uchar dat)         //发送一个字符
{
ES = 0;
TI=0;
SBUF = dat;
while(!TI);
        TI = 0;
ES = 1;
}

void Print_Str(uchar *str)  //一个字节
{
  while(*str!='\0')
  {
   Print_Char(*str++);
   
  }
}


void Ini_UART()              //初始化 设置波特率2400
{
PCON&=0x00;
SCON=0x50;
TMOD=0x20;
TL1=0xf3;  
TH1=0xf3;


TF1=1;
ET0=1;
TR1=1;
ES=1; 
EA=1; 
}

void GSM_PDU()
{
	
	Print_Str(SMS_send_AT);
	Print_Str("\r\n");
	delay(5000);delay(5000);delay(5000);delay(5000);delay(5000);
	Print_Str(SMS_PDU);
	Print_Str("\r\n");
	delay(1000);delay(5000);delay(5000);delay(5000);delay(5000);delay(5000);delay(5000);
	Print_Str(GMS);
	Print_Str("\r\n");delay(5000);delay(5000);delay(5000);delay(5000);delay(5000);
	ES=1;
	delay(6000);
}

void GSM_PDU_SMS()
{
	Print_Str(SMS_send);
	Print_Str(Byte_num);
	Print_Str("\r\n");
	delay(900);
	delay(5000);delay(5000);delay(5000);delay(5000);delay(5000);
	Print_Str(Sms2_Pdu);
	delay(500);delay(5000);delay(5000);delay(5000);delay(5000);
	Print_Char(0x1a);
	delay(5000);
	delay(5000);
	Print_Str("\r\n");
}

void main()
{
	Ini_UART();
	while(1)
	{
		if(k1==0)
			delay(10);
		if(!k1)
		{
			GSM_PDU();
			GSM_PDU_SMS();
			LED0=0;
		}
	}
}
void inter() interrupt 4
{

	date = SBUF;
	if(RI)
	RI = 0;

}

接收短信点亮小灯

#include "reg52.h"
#include "intrins.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
   
    #define uchar unsigned char
    #define uint unsigned int
    #define Rx_data_length 110
		
		sbit LED0 = P2^0;
		sbit LED1 = P2^1;
    	uchar i,j;

    bit Response_receive_SMS_flag=0;//是否接受到短信
                                  
    uchar Rx_bit;//短信缓冲数组移动指针
    uchar xdata Rx_data[Rx_data_length];
    uchar w[]="Waiting";
    void Response_receive_SMS(void);
    void Uart_SendChar(uchar ch);
    void Uart_SendString(uchar *String);
    void uart_init(void);
    void Clear_Rxdata(uchar length);

    void delay(uint xms)
    {
        uint i,j;
        for(i=xms;i>0;i--)
            for(j=100;j>0;j--);
    }

    void main(void)
    {
        uint aa=0;
		    EA=1;                                                                                                    
        uart_init();                                                                                    
        Rx_bit=0;
			
        Uart_SendString("AT+CLIP=1\r\n");
        delay(1000);
        Uart_SendString("AT+CMGF=1\r\n");                       //ÉèÖÃsim900Ä£¿éΪӢÎÄ·½Ê½·¢ËͶÌÐÅ
        delay(1000);      
        Uart_SendString("AT+CMGD=1\r\n");        //Çå³ýËùÓжÌÐÅ
        delay(5000);


        Uart_SendString("AT+CSCS=\"GSM\"\r\n");  //ÉèÖÃsim900Ä£¿éGSM×Ö·û¼¯
        delay(1000);
        Uart_SendString("AT+CMGF=1\r\n");           //ÉèÖÃsim900Ä£¿éΪӢÎÄ·½Ê½·¢ËͶÌÐÅ
        delay(1000);
        Clear_Rxdata(Rx_data_length);
        delay(1000);
//			Uart_SendString("AT+CMGR=1\r\n"); 
//				delay(1000);
        memset(Rx_data,' ',sizeof(Rx_data));                //Rx_dataÊý×éÖÐÔªËض¼Îª¿Õ¸ñ
                                      
        while(1)
        {            
            EA=1;
            EX0=1;                                            //¿ªÍⲿÖжÏ0
            IT0=0;                                            //Âö³å´¥·¢·½Ê½
            Response_receive_SMS();                             //Ñ­»·¼ì²âÊÇ·ñÊÕµ½¶ÌÐÅ£¬ÈôÊÕµ½¶ÌÐÅÔò Response_receive_SMS_flag==1
            delay(100);   
            Rx_bit=0;                             
            if(Response_receive_SMS_flag==1)
            {
                Uart_SendString("AT+CMGR=1\r\n");             //¶ÌÐŶÁÈ¡
                delay(2000);
                if( (Rx_data[69]=='w') && (Rx_data[70]=='a') && (Rx_data[71]=='t') && (Rx_data[72]=='e') && (Rx_data[73]=='r') )    //ÅжϵĶÌÐÅÄÚÈÝ£¬¿ÉÒÔ²»Ö¹5λ
                {
                    aa=1;
                }                                    
                Response_receive_SMS_flag=0;
                Clear_Rxdata(Rx_data_length);
                delay(1000);   
                Uart_SendString("AT+CMGD=1\r\n");         //Çå³ýËùÓжÌÐÅ
                delay(100);                                                                              
            }
                
            delay(1000);

            if(aa==1)
            {
                LED0 = ~LED0;
                delay(1000);
                aa=0;            }                        
        }                                       
    }
    void uart() interrupt 4
    {
        ES=0;
        if(RI==1)                                             //µ±Ó²¼þ½Ó    ÊÕµ½Ò»¸öÊý¾Ýʱ£¬RI»áÖÃλ
        {   
            if(SBUF!=0x0d&&SBUF!=0x0a&&SBUF!=' ')            //È¥³ýËùÓеĿոñ
            {
                Rx_data[Rx_bit]=SBUF;            
                Rx_bit++;
            }
            if(Rx_bit==Rx_data_length)
            {
                Rx_bit=0;
            }
            RI=0;                    
        }   
        ES=1;        
    }
    void Response_receive_SMS(void)
    {
        uchar i=0;
        for(i=0;i<=Rx_data_length;i++)
        {
            if(Rx_data[i] =='+'
            &&Rx_data[i+1]=='C'
            &&Rx_data[i+2]=='M'
            &&Rx_data[i+3]=='T'
            &&Rx_data[i+4]=='I'
            &&Rx_data[i+5]==':')
            {
                Response_receive_SMS_flag=1;
							LED1 = 0;	
                return;
            }
						
        }
        Response_receive_SMS_flag=0;  //
			
    }
    /********************************************************************
    * Ãû³Æ : Uart_SendChar(uchar ch)
    * ¹¦ÄÜ : Ïò´®¿Ú·¢ËÍÒ»¸ö×Ö·û
    * ÊäÈë : ÎÞ
    * Êä³ö : ÎÞ
    ***********************************************************************/
    void Uart_SendChar(uchar ch)
    {
        SBUF=ch;
        while(TI==0);
        TI=0;
    }

    /********************************************************************
    * Ãû³Æ : Uart_SendChar(uchar ch)
    * ¹¦ÄÜ : Ïò´®¿Ú·¢ËÍÒ»¸ö×Ö·û´®
    * ÊäÈë : ÎÞ
    * Êä³ö : ÎÞ
    ***********************************************************************/
    void Uart_SendString(uchar *String)
    {
        while (*String !='\0')           //×Ö·û´®½áÊø±êÖ¾ \0
        {
            Uart_SendChar(*String);
            String++;
        }
    }
    /********************************************************************
    * Ãû³Æ : uart_init(void)
    * ¹¦ÄÜ : ´®¿Ú³õʼ»¯³ÌÐò
    * ÊäÈë : ÎÞ
    * Êä³ö : ÎÞ
    ***********************************************************************/
    void uart_init(void) //³õʼ»¯uart
    {
       PCON&=0x00;
SCON=0x50;
TMOD=0x20;
TL1=0xf3;  //12MHz£¬²¨ÌØÂÊ9600
TH1=0xf3;


TF1=1;
ET0=1;
TR1=1;
ES=1; //´ò¿ª½ÓÊÕÖжÏ
EA=1; //´ò¿ª×ÜÖжÏ
    }
    /********************************************************************
    * Ãû³Æ : Clear_Rxdata(uchar length)
    * ¹¦ÄÜ : Çå¿Õ½ÓÊÕ»º´æÊý×é
    * ÊäÈë : ÎÞ
    * Êä³ö : ÎÞ
    ***********************************************************************/
    void Clear_Rxdata(uchar length)         //Çå¿Õ½ÓÊÕ»º´æÊý×é
    {
        uchar Bit;
        for(Bit=0;Bit<length;Bit++)
        {
            Rx_data[Bit]=0x30;      // asciiÂë±íÖÐÊ®½øÖÆ48¶ÔÓ¦µÄ×Ö·ûΪ0
            delay(50);
        }
        Rx_bit=0;        
    }

有什么错误不对的地方欢迎大家指正
跟据这个程序 我写了一个火警消防警报系统想要源码的可以留下邮箱

  • 7
    点赞
  • 31
    收藏
  • 打赏
    打赏
  • 19
    评论
SIM800C模块应用Arduino 51单片机 STM32软件例程源码资料合集: 1、Arduino例程 2、51单片机测试源码 3、STM32测试源码 4、Linux 5、PC端 6、Windows 01.STM32 拨打电话 02.STM32 发送短信 03.STM32 短信远程控制开关 04.STM32 TCP通信 GSM GPRS模块和STM32的连接方式.txt 01.STC89C52+SIM800C打电话 02.STC89C52+SIM800C发送短信 03.STC89C52+SIM800C接收短信控制开关 04.STC89C52+SIM800C TCP通信 GSM GPRS模块和51单片机接线方式.txt void main() { Uart_Init(); if (sendCommand("AT\r\n", "OK\r\n", 3000, 10) == Success); else errorLog(); delay_ms(10); if (sendCommand("AT+CPIN?\r\n", "READY", 1000, 10) == Success); else errorLog(); delay_ms(10); phone(phoneNumber); //´òµç»° while(1) { } } void phone(char *number) { char send_buf[20] = {0}; memset(send_buf, 0, 20); //Çå¿Õ strcpy(send_buf, "ATD"); strcat(send_buf, number); strcat(send_buf, ";\r\n"); if (sendCommand(send_buf, "OK\r\n", 10000, 10) == Success); else errorLog(); } void errorLog() { while (1) { if (sendCommand("AT\r\n", "OK\r\n", 100, 10) == Success) { soft_reset(); } delay_ms(200); } } void soft_reset(void) //ÖÆÔìÖØÆôÃüÁî { ((void (code *) (void)) 0x0000) (); } unsigned int sendCommand(char *Command, char *Response, unsigned long Timeout, unsigned char Retry) { unsigned char n; CLR_Buf(); for (n = 0; n < Retry; n++) { SendString(Command); //·¢ËÍGPRSÖ¸Áî Time_Cont = 0; while (Time_Cont < Timeout) { delay_ms(100); Time_Cont += 100; if (strstr(Rec_Buf, Response) != NULL) { CLR_Buf(); return Success; } } Time_Cont = 0; } CLR_Buf(); return Failure; } //**************************************************** //MSÑÓʱº¯Êý(12M¾§ÕñϲâÊÔ) //**************************************************** void delay_ms(unsigned int n) { unsigned int i,j; for(i=0;i<n;i++) for(j=0;j<123;j++); }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论 19

打赏作者

talentzzz-

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值