A6_A7 GPS模块的51单片机例程

2019-10-18来源: eefocus关键字:A6_A7  GPS模块  51单片机

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

{

[1] [2]
关键字:A6_A7  GPS模块  51单片机 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic477558.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:51单片机自动凉衣服源程序电路图与实物图
下一篇:关于51单片机的定时器T0、T1总结

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

Galaxy A01廉价机:搭载了安卓10 国内ODM代工
如果你认为三星A10是A系列中的低端机,那就错了。近期美国FCC通过了三星Galaxy A01手机的认证,实际上是SM-A015F和SM-A015F/DS两种型号(分为单SIM和双SIM版本)。  根据美国FCC的数据和Geekbench的结果,三星A01手机搭载了2GB内存,八核处理器。有趣的是,它使用Android 10进行了基准测试。电池容量额定为3000mAh。  如你在原理图和背面照片中所见,三星A01手机后置双摄像头。关于第二个模块的功能尚无定论,可能用于“深度传感器”。你还可以在手机顶部看到一个3.5m的耳机插孔。  根据先前的一些爆料,Galaxy A01将配备5.7英寸的屏幕,并配备16GB的存储空间。  请注意,
发表于 2019-11-15
Galaxy A01廉价机:搭载了安卓10 国内ODM代工
音频系统中的A/D和D/A转换器测试
    不少用户曾经问过用于音频系统的A/D和D/A转换器的测试方法,现整理如下,供需要者参考。   1.音频系统中的A/D转换器测试     音频系统中的A/D转换器的输入端是模拟信号,输出端是数字信号。数字信号使用总线进行通信,最常用的是I2S。I2S有3条线:DATA,CLOCK/BIT CLOCK和FS。    测试音频系统中的A/D转换器可用音频分析仪完成,比如U8903A。利用U8903A音频分析仪的模拟信号输出功能和I2S信号输入功能可以完成A/D转换器的测试。
发表于 2019-11-14
音频系统中的A/D和D/A转换器测试
PIC16F873A单片机的照度测量项目原理图与源代码
基于PIC16F873A的照度测量C语言代码。可以使用Labview以RS232接口和PC通信,并获取实时数据 单片机源程序如下:#include <pic.h>           //调用PIC16F87XA单片机的头文件__CONFIG(HS&WDTDIS&LVPDIS);#define U5A  RC0           //4位数码管单元的U5(74HC138)的A脚接在RB0口上#define U5B  RC1        
发表于 2019-11-12
PIC16F873A单片机的照度测量项目原理图与源代码
STC12C5A60S2利用PCA时钟溢出做的PWM信号
1.程序里面想详细的算法 思路, 2.在晶振和CPU满足计算的情况下,理论是你要多少你就通过编码器调节多少3.本程序任意频率调试是通过编码器来切换的,4.关于精度问题 在100hz内非常准,在最大255HZ的时候相差20hz左右,  问题可能出现在 定时器计数这个位置, 我全部取整数了 所以误差比较大如果计数的出来本来机是整数的,那频率相对准确的, 在100hz的时候就是标准的100hz 单片机源程序如下:/*------------------------------------------------------------------*//* --- 功能  pwm输
发表于 2019-11-12
STC12C5A60S2利用PCA时钟溢出做的PWM信号
透明 A 柱那么「有用」,为什么迟迟不见量产?
前几天,微博上有个关于汽车的热搜,说的是一个美国 14 岁少女研发的一项关于透明 A 柱的专利,也就是「在不消除盲点的情况下实现消除盲点的效果」,获得了某个创新设计奖和 2.5 万美金的奖励。按照外媒的报道,这个少女的解决方案在技术不难,只是基于普通的 A 柱进行改造,通过投影仪把车外摄像头的影像投射在 A 柱上就能实现盲区影像的显示。在一开始,A 柱的投影内容出现了重影、模糊等问题,但在更换了反光织物材料之后,这个问题得到了比较好的解决。看完这个新闻,很容易给人造成一种错觉,一个 14 岁少女就能轻松解决这个问题,消除盲区给司机和行人带来的安全隐患。但在过百年的汽车工业中,为什么目前为止都还没有主机厂站出来要解决这个问题呢?聊这个
发表于 2019-11-11
透明 A 柱那么「有用」,为什么迟迟不见量产?
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved