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? // 注: // 码, 1 代表当网络注册状态改变时激活网络注册结果码, 2 代表激活网 // 络注册结果码同时显示区域和小区信息. // // 模块没有找到运营商, 1代注册到了本地网络, 2 代表找到运营商但没 // 有注册网络, 3 代表注册被拒绝, 4 代表未知的数据, 5代表注册在漫游 // 状态. // // 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) {
上一篇:51单片机自动凉衣服源程序电路图与实物图
下一篇:关于51单片机的定时器T0、T1总结
推荐阅读最新更新时间:2024-11-11 11:11
设计资源 培训 开发板 精华推荐
- EVB-USB2517,使用 USB2517 高速 USB 2.0 多 TT 7 端口集线器的评估板 客户
- LTC2190 演示板、16 位 25Msps ADC、串行 LVDS 输出、5-170MHz
- LTC6990MPS6#TRMPBF 全范围温度到频率转换器的典型应用。 16kHz 到 1kHz 从 -20 oC 到 80 orc
- OP162GSZ-REEL7耳机输出运算放大器典型应用电路
- 2019年电赛综合测试题
- L7812C 带温度补偿的可调输出电压的典型应用
- OP297FSZ平方放大器的典型应用
- 双模机械数字键盘(RGB)
- LV8417CSGEVB,LV8417CS 1 通道 H 桥电机驱动器评估板
- 使用 Cypress Semiconductor 的 MB39A132 的参考设计