[51]GSM短信控制灯的亮灭
来源:互联网 发布:淘宝客服有什么权限 编辑:程序博客网 时间:2024/04/29 02:29
#include<reg52.h>
#include<string.h>
#include<stdio.h>
//发kai时,led亮
//发guan时 led熄灭
//
//正常启动现象:焊接板子上的led亮灭各1秒钟时间,如果一直常亮,说明为初始化成功
//gsm模块上面的led,如果3S闪烁1次,说明正常连接上网络,如果快速亮灭说明还没有连接网络
//
// 11.0592 9600
//
//注意:所有的操作都需要在 gsm模块上面的led,3S闪烁 才能正常通信
sbit led_test=P1^5;
sbit led1=P1^0;
sbit led2=P1^2;
#define Buf_Max 60 //缓存长度200
#define Delay_Time 250 //延时长度
unsigned char i = 0; //定义缓存指针
unsigned char Rec_Buf[Buf_Max]; //定义缓存数组
void Serial_Init(void); //声明串口初始化函数
void Send_ASCII(unsigned char *b); //声明发送字符(ASCII码)函数
void Delay_ms(unsigned int time); //声明延时函数
void CLR_Buf(void); //声明清除缓存内容
void Send_Hex(unsigned char b); //声明发送字符(十六进制)函数
bit Hand(unsigned char *a); //声明判断缓存中是否含有指定的字符串函数
void main()
{
unsigned int t=0;
unsigned char time_temp=0;
led1=0;
Serial_Init(); //初始化串口
CLR_Buf(); //清除缓存内容
Send_ASCII("AT"); //发送联机指令
while(!Hand("OK")) //判断是否握手成功,如果不成功延时一会,再发送AT握手指令
{
Delay_ms(100); //延时
time_temp++;
if(time_temp>10)
{
time_temp =0;
Send_ASCII("AT"); //发送联机指令
}
}
time_temp =0;
CLR_Buf(); //清除缓存内容
Send_ASCII("ATE0"); //发送联机指令
while(!Hand("OK")); //判断是否握手成功,如果不成功延时一会,再发送AT握手指令
time_temp =0;
CLR_Buf(); //清除缓存内容
Send_ASCII("AT+CMGF=1"); //发送联机指令
while(!Hand("OK")) //判断是否握手成功,如果不成功延时一会,再发送AT握手指令
{
Delay_ms(100); //延时
time_temp++;
if(time_temp>10)
{
time_temp =0;
Send_ASCII("AT+CMGF=1"); //发送联机指令
}
}
time_temp =0;
CLR_Buf(); //清除缓存内容
Send_ASCII("AT+CMGD=1,4"); //发送联机指令
while(!Hand("OK")) //判断是否握手成功,如果不成功延时一会,再发送AT握手指令
{
Delay_ms(100); //延时
time_temp++;
if(time_temp>10)
{
time_temp =0;
Send_ASCII("AT+CMGD=1,4"); //发送联机指令
}
}
time_temp =0;
CLR_Buf(); //清除缓存内容
t=0;
led2=0;
while(1)
{
if(strstr(Rec_Buf,"+CMTI")!=NULL) //若缓存字符串中含有"+CMTI"就表示有新的短信
{
CLR_Buf(); //清除缓存内容
Send_ASCII("AT+CMGR=1"); //发送读取信息指令
while(!Hand("OK")) //判断是否握手成功,如果不成功延时一会,再发送AT握手指令
{
Delay_ms(100); //延时
time_temp++;
if(time_temp>10)
{
time_temp =0;
Send_ASCII("AT+CMGR=1"); //发送联机指令
}
}
if(strstr(Rec_Buf,"kai")!=NULL) //如果信息内容是"kai"
{led_test = 0;}
if(strstr(Rec_Buf,"guan")!=NULL) //如果信息内容是"guan"
{led_test = 1;}
CLR_Buf();
//清除缓存内容
Send_ASCII("AT+CMGD=1,4"); //删除读取后的信息
while(!Hand("OK")) //判断是否握手成功,如果不成功延时一会,再发送AT握手指令
{
Delay_ms(100); //延时
time_temp++;
if(time_temp>10)
{
time_temp =0;
Send_ASCII("AT+CMGD=1,4"); //发送联机指令
}
}
CLR_Buf(); //清除缓存内容
t=0;
}
t++;
if(t/2500){//正常工作 启动期间 //一次大约为 1S
t=0;
led1=~led1; //闪烁表示系统运行中,等待指令输入
}
}
}
/***************************串口初始化函数*****************************/
/*函数原型:void Serial_Init(void)
/*函数功能:串口初始化
/*输入参数:无
/*输出参数:无
/**********************************************************************/
void Serial_Init(void)//串口初始化函数
{
SCON = 0x50;//串口:方式1,允许发送和接收
TMOD = 0x20;//定时器1:模式2,8位自动重装模式,用于产生波特率
TH1 = 0xFD; //11.0592MHZ晶振,波特率为9600
TL1 = 0xFD;
TR1 = 1; //开启定时器1
ES = 1; //开启串口中断
EA = 1; //开启全局中断
}
/****************************串口中断处理函数**************************/
/*函数原型:void Serial_Int(void)
/*函数功能:串口中断处理
/*输入参数:无
/*输出参数:无
/**********************************************************************/
void Serial_Int() interrupt 4
{
ES = 0; //关串口中断,防止中断嵌套
if(TI) //如果是发送中断,则不做任何处理
{
TI = 0; //清除发送中断标志位
}
if(RI) //如果是接送中断,则进行处理
{
RI = 0; //清除接收中断标志位
Rec_Buf[i] = SBUF; //将接收到的字符串存到缓存中
i++; //缓存指针向后移动
if(i>(Buf_Max-1)) //如果缓存满,将缓存指针指向缓存的首地址
{
i = 0;
}
}
ES = 1; //开启串口中断
}
/****************************发送字符(ASCII)函数***********************/
/*函数原型:void Send_ASCII(unsigned char *b)
/*函数功能:发送字符(ASCII码)
/*输入参数:unsigned char *b
/*输出参数:无
/**********************************************************************/
void Send_ASCII(unsigned char *b)
{
ES = 0; //关串口中断
for (b; *b!='\0';b++)
{
SBUF = *b;
while(TI!=1); //等待发送完成
TI = 0; //清除发送中断标志位
}
ES = 1; //开串口中断
Send_Hex(0x0d); //发送回车符
Send_Hex(0x0a); //发送换行符
}
/****************************time ms延时函数***************************/
/*函数原型:Delay_ms(unsigned int time)
/*函数功能:延时Time ms
/*输入参数:time
/*输出参数:无
/**********************************************************************/
void Delay_ms(unsigned int time)
{
unsigned char j;
for(;time>0;time--)
{
j = 1500;
while(j--);
}
}
/**************************清除缓存数据函数****************************/
/*函数原型:void CLR_Buf(void)
/*函数功能:清除缓存数据
/*输入参数:无
/*输出参数:无
/*调用模块:无
/**********************************************************************/
void CLR_Buf(void)
{
unsigned char k;
for(k=0;k<Buf_Max;k++) //将缓存内容清零
{
Rec_Buf[k] = 0;
}
i = 0; //接收字符串的起始存储位置
}
/*************************发送字符(十六进制)函数********************/
/*函数原型:void Send_Hex(unsigned char c)
/*函数功能:发送字符(十六进制)
/*输入参数:unsigned char c
/*输出参数:无
/*调用模块:无
/******************************************************************/
void Send_Hex(unsigned char c)
{
ES = 0; //关串口中断
SBUF = c;
while(TI!=1); //等待发送完成
TI = 0; //清除发送中断标志位
ES = 1; //开串口中断
}
/*****************判断缓存中是否含有指定的字符串函数******************/
/*函数原型:bit Hand(unsigned char *a)
/*函数功能:判断缓存中是否含有指定的字符串
/*输入参数:unsigned char *a 指定的字符串
/*输出参数:bit 1---含有 0---不含有
/*调用模块:无
/*******************************************************************/
bit Hand(unsigned char *a)
{
if(strstr(Rec_Buf,a)!=NULL)
return 1;
else
return 0;
}
0 0
- [51]GSM短信控制灯的亮灭
- 单片机控制GSM模块实现短信收发的软件设计
- 51实现gsm的发短信收短信的程序
- GSM短信的简单解析
- 9C51单片机(特别是AT89S52)控制GSM模块TC35收发短信的程序
- GSM短信
- 操作GSM MODLE发短信的例子
- 基于GSM调制解调器的短信收发平台
- 基于GSM调制解调器的短信收发平台
- 基于GSM调制解调器的短信收发平台
- 基于GSM调制解调器的短信收发平台
- 基于GSM调制解调器的短信收发平台
- 基于GSM调制解调器的短信收发平台
- 基于GSM调制解调器的短信收发平台
- 基于GSM调制解调器的短信收发平台
- C#下的GSM短信实现
- 短信猫GSM Modem
- 短信服务GSM解释
- 红黑树的插入与删除
- 使用CRF++进行分词的原理和实现过程
- pyhton3 标准库 cgi 通用网关接口
- Spring MVC处理流程的理解
- Java 4种方法实现冒泡排序算法
- [51]GSM短信控制灯的亮灭
- 微信公众号分享
- Linux sed命令
- vi/vim基本使用方法
- BZOJ 1974 [Sdoi2010]auction 代码拍卖会 | 51nod 1261 上升数
- 压缩跟踪代码
- svm支持向量机
- 信与信封问题
- php代码查看邮件是否已被阅读