历史上的今天
今天是:2024年09月22日(星期日)
2020年09月22日 | SIM900A简易报警器程序(51单片机远程控制LED)
2020-09-22 来源:51hei
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,'




