历史上的今天
返回首页

历史上的今天

今天是: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,'',4);

        memset(AT_CMGR,'',15);

        buffer_ptr = strstr(Uart1_Buf,""SM",");

        

        len = strlen(""SM",");


        i = len;

        if(buffer_ptr != NULL)

        {

                while(*(buffer_ptr + i) != 0x0D && i < (len+3))

                {

                        num_message[i-len] = *(buffer_ptr + i);

                        i++;

                }

        }

        else

        {

                return NO_SMS_LEN_ERROR;

        }

        

        memset(AT_CMGR,'',15);

        strcpy(AT_CMGR,"AT+CMGR=");

        strcat(AT_CMGR,num_message);

        

        ret = UART1_Send_AT_Command(AT_CMGR,"OK",3,50);


        return ret;

}

/**********************************************/

/*设计思路:

(0)进行串口、定时器初始化工作。

(1)开机等待22秒,等待模块准备好。

(2)发送相应的指令。

************************************************/

void main(void)

{

        u8 i;

        int ret;

        

        Uart1Init(); //串口初始化

        Timer0Init();//TIM0初始化

        EA = 1;      //开启总中断

        

        for(i = 0;i < STABLE_TIMES;i++)//等待网络稳定

        {

                delay_ms(50);

        }

        

        ret = check_status();

        if(ret == 1)

        {

                ret = config_format();//配置

                if(ret == 1)

                {

                        LED0 = 0;

                }

                else

                {

                        LED0 = 1;

                }

        }

        

        CLR_Buf();

        receive_mode = 1;

        while (1)                    

        {

                delay_ms(50);

                LED1 = ~LED1;

                if(find_string_flag == 1)

                {

                        delay_ms(5);//延时一点,让串口把数据接收完成

推荐阅读

史海拾趣

Ceramics公司的发展小趣事

“全球陶瓷”公司凭借其卓越的产品质量和国际化战略,成功拓展了海外市场。该公司积极参与国际展览和交流活动,与多国电子企业建立了合作关系。同时,全球陶瓷还针对不同国家和地区的市场需求,推出了定制化的陶瓷电子材料解决方案。这一国际化战略不仅提升了公司的品牌影响力,也为其在全球范围内的业务拓展提供了有力支持。

峰岹(Fortior Tech )公司的发展小趣事

“全球陶瓷”公司凭借其卓越的产品质量和国际化战略,成功拓展了海外市场。该公司积极参与国际展览和交流活动,与多国电子企业建立了合作关系。同时,全球陶瓷还针对不同国家和地区的市场需求,推出了定制化的陶瓷电子材料解决方案。这一国际化战略不仅提升了公司的品牌影响力,也为其在全球范围内的业务拓展提供了有力支持。

Heidenhain Corp公司的发展小趣事

随着智能制造的兴起,海德汉公司积极转型为智能制造解决方案提供商。该公司与多家电子企业合作,共同探索智能制造的新模式和新路径。通过集成海德汉的数控系统、自动化设备和智能管理软件,这些企业成功构建了高效、灵活、智能的生产体系。海德汉的智能制造解决方案不仅提高了生产效率和产品质量,还降低了生产成本和能耗,为电子行业的可持续发展做出了积极贡献。

Elite Enterprises (H K) Co Ltd公司的发展小趣事

Elite Enterprises (H K) Co Ltd成立于2002年,当时正值LED技术快速发展的时期。公司创始人凭借对LED市场的敏锐洞察,决定专注于LED产品的研发和生产。初期,公司面临资金、技术和市场等多重挑战,但通过不懈努力和持续创新,逐步在LED照明市场崭露头角。

Cristek Interconnects Inc公司的发展小趣事

Cristek Interconnects Inc公司自成立以来,一直致力于电子连接器技术的研发与创新。在早期的发展阶段,公司凭借其出色的研发团队,成功开发出一种新型的高性能连接器,这种连接器具有更高的导电性和更低的信号衰减,极大地提高了电子设备的性能。这一技术突破为公司赢得了市场的广泛认可,也奠定了Cristek在电子行业中的重要地位。

亿宝科技(CNIBAO)公司的发展小趣事

在技术创新的基础上,亿宝科技积极拓展市场。公司通过与国内外知名企业的合作,将产品打入国际市场。同时,亿宝科技还注重品牌建设,通过参加各类展会、举办技术研讨会等方式,提升品牌知名度和影响力。在一次国际电子展上,亿宝科技的产品凭借其卓越的性能和品质,赢得了众多客户的青睐,成功打开了国际市场的大门。

问答坊 | AI 解惑

请教电路中的器件组合是怎么工作的?

各位老师,下图红框内电路中的器件组合是怎么工作的?   …

查看全部问答>

在BL808上画动态的玫瑰花

情人节快要到了,BL808的收尾时间也差不多到了,不如用一个玫瑰花做收尾吧。创意来源于百度文库中的一篇文章:《JS代码实现玫瑰花》,不知道引用站外的链接是否违规,这里就不贴出链接了。总之,是使用了非常简单的几句代码就实现了一个玫瑰花的效 ...…

查看全部问答>

电源设计资料:高性能电流模式PWM 开关电源控制器

电源设计资料:高性能电流模式PWM 开关电源控制器             …

查看全部问答>

【CH246&CH241无线充电套件测评】Part1:无线摄像头

1.介绍 无线充发射芯片CH246 无线充电管理芯片 CH246,单芯片集成无线充电收发模块及小信号解码电路,外加部分客户自定 义软件可轻松实现 WPC Qi 等各类无线充电方案。支持 PD2.0、BC1.2 多种协议快充输入,支持 5W、 7.5W、10W、15W 无线充 ...…

查看全部问答>

【BIGTREETECH CB1】—— CB1的HomeAssistant智能家居系统控制ESP32的智能家居设备

本帖最后由 mars4zhu 于 2023-2-9 08:49 编辑 3. CB1_HomeAssistant_ESPHome_notes 3.1. ESP32-S3运行ESPHome固件,接入HomeAssistant智能家居系统 使用之前的ESP32-S3开发板,运行ESPHome固件,即可接入Home ...…

查看全部问答>

面对近3亿 UWB 设备 智能手机高精度安全室内导航系统将何去何从

据 Techno Systems Research 发布的报告,预计到 2030 年,智能手机将成为 UWB 的最大应用领域,其次是智能家居、消费标签、汽车、消费可穿戴和 RTLS B2B。 报告指出,2020 年,COVID-19 大流行和工业 4.0 趋势推动了对 UWB 的需求。尤其在 ...…

查看全部问答>

【BIGTREETECH CB1】—— HomeAssistant智能家居系统控制的手机客户端操作

4. CB1_HomeAssistant_smartphone-control 在智能手机上安装HomeAssistant客户端,即可更方便地查看智能家居系统的各项信息,并操作智能设备。相比网页端更符合人们的使用体验。 在手机客户端上输入HomeAssistant的IP地 ...…

查看全部问答>

【物联网开发教程】机智云App远程和开发板聊天

一、实现的功能描述 小程序远程和开发板相互发送字符串信息。 电脑端串口调试助手发送字符串 --> 开发板 --> 小程序 小程序发送字符串 --> 开发板 --> 电脑端串口调试助手   二、 UI配置描述 本例程中所包含的U ...…

查看全部问答>

关于上升沿触发的问题

关于上升沿触发的问题:   1、上升沿是如何被检测到的,是前一个时间采一下样为0V,后一个时间采一下样为3V,就判断出现了一个上升沿吗? 2、这个上升沿的最高电平的标准是最低为VCC的百分之几? 3、这个上升沿 需要 考虑  ...…

查看全部问答>

AC供电的电源电路中的这个电阻起什么作用?

如下图,经常见AC供电的电源电路中都有这个电阻 这电阻起什么作用?   …

查看全部问答>