1.上电后,进入等待接收短信模式,如果接收到的数据中包含 ledon 字符串就会点亮LED7,熄灭LE6
如果不包含 ledon 字符串,就点亮LED6,熄灭LED7。
2.按键和LED对应的端口,请参考程序。
单片机源程序如下:
/**************************************************************
51 单片机例程
本例程使用11.0592MHZ时钟---->必须为11.0592M
串口设置为:9600,8,n,1.
******************************************/
#include
#include "string.h"
#include "GA6_module_errors.h"
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
/************* 本地常量声明 **************/
#define Buf_Max 70 //串口1缓存长度
#define STABLE_TIMES 10 //等待上电后稳定
/************* 本地变量声明 **************/
//串口1发送回车换行
#define UART1_SendLR() UART1_SendData(0X0D);UART1_SendData(0X0A)
/*LED端口定义*/
sbit LED0 = P1^0;
sbit LED1 = P1^1;
sbit LED2 = P1^2;
sbit LED3 = P1^3;
sbit LED4 = P1^4;
sbit LED5 = P1^5;
sbit LED6 = P1^6;
sbit LED7 = P1^7;
/*KEY端口定义*/
sbit KEY0 = P2^0;
sbit KEY1 = P2^1;
sbit KEY2 = P2^2;
sbit KEY3 = P2^3;
/************* 本地变量声明 **************/
xdata u8 Uart1_Buf[Buf_Max];
u8 First_Int = 0;
u16 count_20ms;
u8 receive_mode = 0;
u8 find_string_flag = 0;
idata char num_message[4];//暂时假设最多只能存999条短信
idata char AT_CMGR[15];
/************* 本地函数声明 **************/
void delay_ms(u16 ms); //延时ms个20ms ms*20ms
void CLR_Buf(void); //清串口接收缓存
u8 Find(u8 *a); //查找字符串
void UART1_SendData(u8 dat); //串口1发送 1字节
void UART1_SendString(char *s);//串口1发送 字符串
void UART1_Send_Command(char *s); //发送命令
u8 UART1_Send_AT_Command(u8 *b,u8 *a,u8 wait_time,u16 interval_time);//发送AT指令集
u8 Wait_CREG(u8 query_times);
void Timer0Init(void) //20毫秒@115200
{
TMOD &= 0xF0;
TMOD |= 0x01; //
TL0 = (65536-20000)%256; //
TH0 = (65536-20000)/256; //
TF0 = 0; //
ET0 = 1; //
TR0 = 1; //开始计时
}
void Uart1Init(void) //9600bps@11.05926MHz
{
PCON &= 0x7F; //
SCON = 0x50; //
TMOD &= 0x0F; //
TMOD |= 0x20; //
TL1 = 0xFD; //
TH1 = 0xFD; //
ET1 = 0; //
TR1 = 1; //
ES = 1; //
}
int check_status(void)//检查状态
{
int ret;
ret = UART1_Send_AT_Command("AT","OK",3,50);//测试通信是否成功
if(ret == 0)
{
return COMMUNITE_ERROR;
}
ret = UART1_Send_AT_Command("AT+CPIN?","READY",2,50);//查询卡是否插上
if(ret == 0)
{
return NO_SIM_CARD_ERROR;
}
ret = Wait_CREG(3);//查询卡是否注册到网络
if(ret == 0)
{
return SIM_CARD_NO_REG_ERROR;
}
return 1;
}
/***************************************************************
注:当然你可以返回其他值,来确定到底是哪一步发送指令出现失败了。
****************************************************************/
int config_format(void)//配置格式
{
u8 ret;
//设置存储位置
ret = UART1_Send_AT_Command("AT+CPMS="SM","ME","SM"","OK",3,100);
if(ret == 0)
{
return AT_CPMS_ERROR;
}
ret = UART1_Send_AT_Command("AT+CMGF=1","OK",3,50);//配置为TEXT模式
if(ret == 0)
{
return AT_CMGF_ERROR;
}
ret = UART1_Send_AT_Command("AT+CSCS="GSM"","OK",3,50);//设置字符格式
if(ret == 0)
{
return AT_CSCS_ERROR;
}
return 1;
}
int read_message(void)//读取消息
{
char *buffer_ptr;
u8 i,len;
u8 ret;
memset(num_message,'
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』