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")</
  • 10
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 31
    评论
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++); }
以下是使用SIM900A模块和32单片机发送的示例代码: ```c #include <REG51.H> #include <stdio.h> #include <string.h> #define FREQ_OSC 12000000UL // 定义振荡器频率为12MHz #define BAUD_RATE 9600 // 串口波特率 sbit SIM900A_ON = P1^0; // SIM900A模块开关引脚 sbit SIM900A_RST = P1^1; // SIM900A模块复位引脚 void delay_ms(unsigned int ms) // 延时函数 { unsigned int i, j; for(i = 0; i < ms; i++) { for(j = 0; j < 120; j++); } } void init_uart() // 初始化串口 { TMOD |= 0x20; // 设置定时器1为模式2 TH1 = 256 - FREQ_OSC / (32 * BAUD_RATE); // 设置波特率 TL1 = TH1; TR1 = 1; // 启动定时器1 SM0 = 0; // 串口工作在模式1,波特率可变 SM1 = 1; REN = 1; // 允许接收数据 TI = 0; // 清除发送完成标志 RI = 0; // 清除接收完成标志 } void send_char(char c) // 发送一个字符 { SBUF = c; while(!TI); // 等待发送完成 TI = 0; } void send_string(char *str) // 发送一个字符串 { while(*str) { send_char(*str++); } } void init_sim900a() // 初始化SIM900A模块 { SIM900A_RST = 0; // 拉低复位引脚 delay_ms(100); SIM900A_RST = 1; // 拉高复位引脚 delay_ms(5000); // 等待SIM900A模块启动完成 send_string("AT\r\n"); // 发送AT指令,检测SIM900A模块是否正常工作 delay_ms(1000); send_string("AT+CMGF=1\r\n"); // 设置格式为文本模式 delay_ms(500); } void send_sms(char *phone_number, char *message) // 发送 { char buffer[40]; send_string("AT+CMGS=\""); send_string(phone_number); send_string("\"\r\n"); // 设置接收号码 delay_ms(1000); sprintf(buffer, "%s%c", message, 26); // 将发送内容和Ctrl+Z组合成一个字符串 send_string(buffer); delay_ms(3000); // 发送需要一定时间,延长等待时间 } void main() { init_uart(); // 初始化串口 init_sim900a(); // 初始化SIM900A模块 send_sms("13812345678", "Hello, world!"); // 发送 while(1); } ``` 这段代码使用了定时器1来控制串口波特率,并实现了发送一个字符和发送一个字符串的函数。在初始化SIM900A模块时,需要先将复位引脚拉低一段时间,然后再拉高。在发送时,需要先设置接收号码和格式,并将发送内容和Ctrl+Z组合成一个字符串发送。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值