历史上的今天
返回首页

历史上的今天

今天是:2024年10月18日(星期五)

正在发生

2019年10月18日 | A6_A7 GPS模块的51单片机例程

2019-10-18 来源:eefocus

1.准备一个STC89C52最小系统板
    
2.烧录代码(先烧录代码后接线,防止接线后下载不了代码)
3.给模块供电,给模块开机
4.接线:
    STC89C52        A6&A7
    GND        ->        GND
    TXD/P3.1->        U_RXD
    RXD/P3.0->        U_TXD

单片机源程序如下:

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

                 作者:神秘藏宝室


        本例程仅适用于在本店购买模块的用户使用,鄙视其它店铺的盗用行为

        版权所有,盗版必究!!!

        A6模块链接:


        A7模块                STC15W最小系统

        GND                 -->                GND

        U_TXD        -->                P0.0/RXD3

        U_RXD        <--                 P0.1/TXD3


        GPS_TXD        -->                P1.0/RXD2

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

#include "main.h"

#include "delay.h"

#include "uart.h"


#include

#include

#include



/*************        功能说明        **************




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


/*************        本地常量声明        **************/

#define Success 1U

#define Failure 0U


/*************        本地变量声明        **************/

unsigned long  Time_Cont = 0;       //定时器计数器

bit ledState = LED_OFF;


unsigned int gprsBufferCount = 0;




/*************        本地函数声明        **************/




/*************  外部函数和变量声明 *****************/




/******************** IO配置函数 **************************/

void        GPIO_config(void)

{

        P5M0 = 0;                 //设置准双向口

        P5M1 = 0;

}


/******************** 主函数 **************************/

void main(void)

{

        GPIO_config();

        UartInit();


        SendString("ILoveMCU.taobao.com");

        delay_ms(200);

        clrStruct();


        initGprs();

        while(1)

        {

                parseGpsBuffer();

                printGpsBuffer();        

        }

}


void initGprs()

{

        if (sendCommand("ATrn", "OK", 3000, 10) == Success);

        else errorLog(1);



//      如果输入 AT+CREG? 则返回+CREG: , [ ,, ]

// 注: 的值共有三个选项,分别是 0 or 1 or 2,  其中0 代表关闭网络注册结果

//            码, 1 代表当网络注册状态改变时激活网络注册结果码, 2 代表激活网

// 络注册结果码同时显示区域和小区信息.

//    的返回值共有三个,分别是 0, 1, 2,3,4,5 ,  其中 0 代表没有注册网络同时

//   模块没有找到运营商, 1代注册到了本地网络, 2 代表找到运营商但没

// 有注册网络, 3 代表注册被拒绝, 4 代表未知的数据, 5代表注册在漫游

// 状态.

//    表示所属网络区域代码,十六进制格式显示,如: “ 279C”

//    表示所属网络的小区 ID,十六进制格式显示,如: “ 0EB2”  Tech-Link T&E

        if (sendCommand("AT+CPIN?rn", "READY", 1000, 10) == Success);

        else errorLog(2);

        delay_ms(10);


        if (sendCommand("AT+CREG?rn", "CREG: 1", 1000, 10) == Success);

        else errorLog(3);

        delay_ms(10);


        if (sendCommand("AT+GPS=1rn", "OKrn", 1000, 10) == Success);

        else errorLog(4);

        delay_ms(10);

}


unsigned int sendCommand(char *Command, char *Response, unsigned long Timeout, unsigned char Retry)

{

        unsigned char n;

        Uart3CLR_Buf();

        for (n = 0; n < Retry; n++)

        {

                SendString("rn---------send AT Command:---------rn");

                SendString(Command);


                Uart3SendString(Command);                 //发送GPRS指令


                Time_Cont = 0;

                while (Time_Cont < Timeout)

                {

                        delay_ms(100);

                        Time_Cont += 100;

                        if (strstr(Uart3_Rec_Buf, Response) != NULL)

                        {

                                SendString("rn==========receive AT Command:==========rn");

                                SendString(Uart3_Rec_Buf); //输出接收到的信息

                                Uart3CLR_Buf();

                                return Success;

                        }

                        

                }

                Time_Cont = 0;

        }

        SendString("rn==========receive AT Command:==========rn");

        SendString(Uart3_Rec_Buf);//输出接收到的信息

        Uart3CLR_Buf();

        return Failure;

}



void soft_reset(void)         //制造重启命令

{

   ((void (code *) (void)) 0x0000) ();

}


void errorLog(int num)

{

        SendString("ERROR");

        SendData(num+0x30);

        SendString("rn");

        while (1)

        {

                  if (sendCommand("ATrn", "OK", 100, 10) == Success)

                {

                        SendString("rnRESET!!!!!!rn");

                        soft_reset();

                }

                delay_ms(200);

        }

}



void parseGpsBuffer()

{

        char *subString;

        char *subStringNext;

        char i = 0;

        if (Save_Data.isGetData)

        {

                Save_Data.isGetData = false;

                SendString("**************rn");

                SendString(Save_Data.GPS_Buffer);


                

                for (i = 0 ; i <= 6 ; i++)

                {

                        if (i == 0)

                        {

                                if ((subString = strstr(Save_Data.GPS_Buffer, ",")) == NULL)

                                        errorLog(1);        //解析错误

                        }

                        else

                        {

                                subString++;

                                if ((subStringNext = strstr(subString, ",")) != NULL)

                                {

                                        char usefullBuffer[2]; 

                                        switch(i)

                                        {

推荐阅读

史海拾趣

Chiplus Semiconductor Corp公司的发展小趣事

Chiplus自成立以来,始终致力于技术创新和产品研发。公司团队不断深入研究SRAM和LED驱动IC的设计与开发,成功推出了多款高速度、低功率的产品。这些产品以其卓越的性能和稳定性,赢得了全球客户的广泛认可。同时,Chiplus还积极投入研发资源,探索新的应用领域,不断拓展产品线,为客户提供更多元化的解决方案。

FerriShield公司的发展小趣事

在快速发展的同时,FerriShield始终不忘履行社会责任。公司积极参与环保事业,推动绿色生产和可持续发展。此外,FerriShield还设立了奖学金和助学金,支持贫困地区的青少年接受教育。这些举措体现了FerriShield作为行业领导者的责任与担当。

以上五个故事均基于FerriShield公司的发展历程和事实描述,展现了其在电子行业中的成长和进步。

ADDtek公司的发展小趣事

随着技术的成熟和市场的认可,FerriShield开始拓展产品线。公司研发团队不断改进和优化原始的铁磁屏蔽材料,并推出了针对不同应用场景的系列产品。例如,针对智能手机和平板电脑的轻薄型电磁屏蔽膜,以及针对大型数据中心的高效电磁屏蔽板。这些新产品的推出,使得FerriShield的市场份额逐步扩大。

Electro-Term/Hollingsworth公司的发展小趣事

面对全球电子市场的不断变化,Electro-Term公司及时调整了市场布局和战略方向。公司深入分析了不同地区的市场需求和消费者偏好,制定了有针对性的市场推广策略。同时,公司还加强了与国际知名企业的合作,共同开发新技术和产品。这些努力使Electro-Term在全球市场上取得了显著的成绩。

Freqtech Ohg公司的发展小趣事

随着全球对环保和可持续发展的重视,Freqtech Ohg公司积极响应,将绿色生产理念融入企业运营的每一个环节。公司引入先进的环保设备和生产工艺,减少生产过程中的能源消耗和废弃物排放。同时,Freqtech还加大了对可再生能源的投资力度,如建设太阳能发电站等,以降低企业运营对环境的影响。这些举措不仅提升了公司的社会形象,还为公司的长期发展奠定了坚实的环保基础。

Denyo Europa Gmbh公司的发展小趣事

随着技术的成熟,Denyo Europa Gmbh公司开始将目光投向国际市场。公司利用自身的技术优势,结合对目标市场的深入调研,制定了一系列市场拓展策略。通过与当地合作伙伴的紧密合作,公司成功将产品打入多个国家和地区,实现了业务的全球化布局。这一过程中,公司不仅积累了宝贵的国际市场经验,也为公司的持续发展奠定了坚实基础。

问答坊 | AI 解惑

看图说话STM32-俺相信您肯定会收藏:)

看图说话STM32-俺相信您肯定会收藏:)【图片】STM32F10X.jpg…

查看全部问答>

电容降压的问题

在电路中电容降压要注意哪些问题?…

查看全部问答>

这个下了怎么打开

机械设计毕业设计-微耕机cad装配图 资源大小: 99.59KB 资源类型: application/octet-stream 发布人: fengyuwuzuzk 发布日期: 2009-05-10 18:10 资源分: 1 下载人数: 35 …

查看全部问答>

外设与电脑的连接问题

新手请教: 假如我手上有一个按扭,我用USB线的一端接在我的那个按扭上,另一端连在电脑的USB接口上。那么怎样实现当我按下按扭时,电脑上会作出与之相应的行为反应呢???我的那个按扭上需要怎样处理,才会实现这样简单的一个过程呢??? 如果 ...…

查看全部问答>

怎样使用PB目录下的例子程序

C:\\WINCE500\\PUBLIC\\SERVERS\\SDK\\SAMPLES 比如说 我该如何建工程来使用它呢? 谢谢!…

查看全部问答>

请问如何搭建430测功耗的平台。

IAR在仿真器VCCO上串入电流表使用DEBUG测量的电流准确吗? 另外消耗的电流有部分是瞬间,有什么好方法能用示波器测量电流的波形呢?…

查看全部问答>

想到了一个问题,STM32不用外部晶振

想到了一个问题,STM32不用外部晶振,程序也不对系统时钟初始化,启动后是什么样的?外挂晶振,但是还是不对系统时钟初始化,启动后又是什么样的呢?有没有人试过?…

查看全部问答>

Chipon最新移动电源三合一方案下载

KF8V218 打造业内性价比最高移动电源三合一方案 …

查看全部问答>