51单片机GPS+sim800c GSM定位短信LCD1602液晶显示 原理图+PCB+源码

目录

1、实物图

2、原理图 

​3、PCB​编辑

4、程序

资料下载地址:51单片机GPS+sim800c GSM定位短信LCD1602液晶显示 原理图+PCB+源码

1、实物图

2、原理图 

 3、PCB

4、程序

#include "common.h"
#include "uart.h"
#include "gps.h"
#include "gsm.h"


#include "lcd.h"

#define GPS_STR_LEN 48

uchar ess_inc;

//char xdata GPS_SEND_STR[GPS_STR_LEN];

sbit key = P1^3;
sbit key1 = P1^4;
sbit GPS_EN=P3^4;
sbit led1 = P3^3;
#define   RMC_YES    led1 = 0
#define   RMC_NO     led1 = 1

GPS_INFO   GPS;  //GPS信息结构体

bit GPS_rx_flag = 0;
bit GPS_Have_flag = 0;

#define SEND_NUMBER "AT+CMGS=\"13420106297\"\r\n"

char xdata send_data[37]="N:     ',E:     ',2000-00-00,00:00\r\n";
unsigned char send_len= 0;

bit dis_flag = 1;
bit sendflag=0;


/****************************************
显示时间
/****************************************/
void GPS_DispTime(void)
{
    uchar i = 0;
    uchar ch;
    char time[5];

          Int_To_Str(GPS.D.year,time);//年

    LCD1602_Set_AC(0, 1);
    i = 0;
          send_len = 18;
    while(time[i] != '\0')
    {
        ch = time[i++];

        LCD1602_write_data(ch);

                    send_data[send_len++] = ch;
    }
    LCD1602_write_data('-');
                
                Int_To_Str(GPS.D.month,time);//月
    LCD1602_Set_AC(5, 1);
    i = 0;
          send_len = 23;
    while(time[i] != '\0')
    {
        ch = time[i++];

        LCD1602_write_data(ch);

                    send_data[send_len++] = ch;
    }
    LCD1602_write_data('-');
                
                Int_To_Str(GPS.D.day,time);//日
    LCD1602_Set_AC(8, 1);
    i = 0;
          send_len = 26;
    while(time[i] != '\0')
    {
        ch = time[i++];

        LCD1602_write_data(ch);

                    send_data[send_len++] = ch;
    }
    LCD1602_write_data(',');
        
    Int_To_Str(GPS.D.hour,time);//时
    LCD1602_Set_AC(11, 1);
    i = 0;
          send_len = 29;
    while(time[i] != '\0')
    {
        ch = time[i++];

        LCD1602_write_data(ch);

                    send_data[send_len++] = ch;
    }
    LCD1602_write_data(':');

    Int_To_Str(GPS.D.minute,time);//分
    LCD1602_Set_AC(14, 1);
    i = 0;
          send_len = 32;
    while(time[i] != '\0')
    {
        ch = time[i++];

        LCD1602_write_data(ch);

                    send_data[send_len++] = ch;
    }
}


void GPS_DisplayOne(void)
{
    uchar len,ch, i;
    char info[10];

    ess_inc = 0;
//    memset(GPS_SEND_STR, 0, GPS_STR_LEN);

    if (GPS.NS == 'N')              //判断是北纬还是南纬
    {
                          if(dis_flag)
        LCD1602_DisplayChar(0, 0, 'N');
                                else
                                LCD1602_DisplayChar(0, 0, ' ');
//        GPS_SEND_STR[ess_inc ++] = 'N';
        len = 0;
        Int_To_Str(GPS.latitude_Degree,info);  //纬度

        LCD1602_Set_AC(1, 0);
        i = 0;
                    send_len = 2;
        while(info[i] != '\0')
        {
            ch = info[i++];
                                          if(dis_flag)
            LCD1602_write_data(ch);
                                                else
                                    LCD1602_write_data(' ');
                              send_data[send_len++] = ch;
//            GPS_SEND_STR[ess_inc ++] = ch;
            len ++;
        }
                    send_data[send_len++] = 'd';
                                if(dis_flag)
        LCD1602_write_data(0xDF);
                                else
                                 LCD1602_write_data(' ');
//        GPS_SEND_STR[ess_inc ++] = 'd';

        len ++;
        Int_To_Str(GPS.latitude_Cent,info);  //纬分
        i = 0;
        while(info[i] != '\0')
        {
            ch = info[i++];
                                          if(dis_flag)
            LCD1602_write_data(ch);
                                                else
                                    LCD1602_write_data(' ');
                              send_data[send_len++] = ch;
//            GPS_SEND_STR[ess_inc ++] = ch;
            len ++;
        }
                                if(dis_flag)
        LCD1602_write_data(0x27);
                                else
                                    LCD1602_write_data(' ');
//        GPS_SEND_STR[ess_inc ++] = 'm';

        Int_To_Str(GPS.latitude_Second,info);  //纬秒
        i = 0;
        while(info[i] != '\0')
        {
            ch = info[i++];
//            GPS_SEND_STR[ess_inc ++] = ch;
        }
//        GPS_SEND_STR[ess_inc ++] = 's';

        len ++;
        while(7 - len)
        {
            len ++;
            LCD1602_write_data(' ');
        }

    }

//    GPS_SEND_STR[ess_inc] = ',';
    ess_inc += 1;

    if (GPS.EW == 'E')                                //判断是东经还是西经
    {
                          if(dis_flag)
        LCD1602_DisplayChar(8, 0, 'E');
                                else
                                    LCD1602_write_data(' ');
//        GPS_SEND_STR[ess_inc ++] = 'E';

        len = 0;
        Int_To_Str(GPS.longitude_Degree,info);  //经度
        LCD1602_Set_AC(9, 0);
        i = 0;
                    send_len = 11;
        while(info[i] != '\0')
        {
            ch = info[i++];
                                          if(dis_flag)
            LCD1602_write_data(ch);
                                                else
                                    LCD1602_write_data(' ');
                              send_data[send_len++] = ch;
//            GPS_SEND_STR[ess_inc ++] = ch;
            len ++;
        }
                    send_data[send_len++] = 'd';
                                if(dis_flag)
        LCD1602_write_data(0xDF);
                                else
                                    LCD1602_write_data(' ');
//        GPS_SEND_STR[ess_inc ++] = 'd';

        len ++;

        Int_To_Str(GPS.longitude_Cent,info);  //经分
        i = 0;
        while(info[i] != '\0')
        {
            ch = info[i++];
                                          if(dis_flag)
            LCD1602_write_data(ch);
                                                else
                                    LCD1602_write_data(' ');
                              send_data[send_len++] = ch;
//            GPS_SEND_STR[ess_inc ++] = ch;
            len ++;
        }
                                if(dis_flag)
        LCD1602_write_data(0x27);
                                else
                                 LCD1602_write_data(' ');
//        GPS_SEND_STR[ess_inc ++] = 'm';

        Int_To_Str(GPS.longitude_Second,info);        //经秒
        i = 0;
        while(info[i] != '\0')
        {
            ch = info[i++];

//            GPS_SEND_STR[ess_inc ++] = ch;
        }
//        GPS_SEND_STR[ess_inc ++] = 's';

        len ++;
        while(7 - len)
        {
            len ++;
            LCD1602_write_data(' ');
        }
    }

    GPS_DispTime();

//    GPS_SEND_STR[ess_inc] = ' ';
    ess_inc += 1;

                if(sendflag==1)
                {                        
                          sendflag = 0;
                                gsm_send_englishmsg(SEND_NUMBER,send_data);//发送位置短信                                
                                delay_ms(1000);
                                delay_ms(1000);
                                LCD1602_DisplayString(0,0,"    SEND OK     "); 
                                delay_ms(1000);
                                LCD1602_DisplayString(0,0,"                "); 
                }
                
//    GPS_DispSpeed(GPS.speed, 10, 1);

//    if (GPS.D.second == 0)
//    {
//        if (GPS_Have_flag)
//        {
//            gsm_send_englishmsg(phonenum,GPS_SEND_STR);//发送位置短信
//        }
//        else
//        {
//            //gsm_send_englishmsg(phonenum,"GPS No Signal");//发送短信
//        }
//    }
}

void main(void)
{
    uchar error_num = 0;
                uint count = 0;

    GPS_EN = 0;
    GPS_rx_flag = 0;
    LCD1602_Initialize();//LCD1602显示屏初始化
    uart_init(UART_B9600);
    GPS_EN = 1;
    GPS_rx_flag = 1;
                BG = 0;
    LCD1602_DisplayString_Center(0,"GPS SCAN...");
    LCD1602_ClearLine(1);

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/623797.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux(多线程)

//blockQueue.hpp #pragma once #include <iostream> #include <queue> #include <pthread.h> const int gcap 5; template <class T> class BlockQueue { public:BlockQueue(const int cap gcap):_cap(cap)//初始化阻塞队列的容量{pthread_mutex_in…

java发送请求-二次开发-get请求json

这里有2个判断 如果param为空则对url发送请求 再继续判断有值时&#xff0c;接口参数时json还是namevalue格式 因为json是带{,所以可以先写为param包含{}, 反之就是请求格式是url&#xff1f;param 请求json要带参数&#xff0c;所以需要使用setEntity方法&#xff0c; 最…

数字人解决方案——AniTalker声音驱动肖像生成生动多样的头部说话视频算法解析

1.概述 AniTalker是一款先进的AI驱动的动画生成工具&#xff0c;它超越了简单的嘴唇同步技术&#xff0c;能够精准捕捉并再现人物的面部表情、头部动作以及其他非言语的微妙动态。这不仅意味着AniTalker能够生成嘴型精准同步的视频&#xff0c;更重要的是&#xff0c;它还能够…

Mongo关联查询两张表中分别满足某些条件的记录

如果是在mysql里面&#xff0c;这个查起来就很方便&#xff0c;但是&#xff0c;在mongo里面的话&#xff0c;查询起来就没这么方便了。 如果使用付费版的Studio 3T工具的话&#xff0c;也可以像使用mysql一样查询mongo数据&#xff0c;但是免费版不支持sql的用法&#xff0c;只…

轻松上手:几款易用性强的加密软件推荐

在现代社会&#xff0c;随着信息技术的不断发展和普及&#xff0c;数据安全成为了每个人都需要面对的重要问题。为了保护个人隐私和重要信息&#xff0c;加密软件成为了我们不可或缺的工具。本文将为您推荐几款易用性强的加密软件&#xff0c;帮助您轻松上手&#xff0c;确保数…

优思学院:精益六西格玛如何影响企业文化?

精益六西格玛&#xff08;Lean Six Sigma&#xff09;是一种在优化生产过程、提高效率、减少浪费的管理方法论。其影响远不止于生产线或质量控制部门&#xff0c;实际上&#xff0c;精益六西格玛的实施可以深刻影响企业文化的各个层面&#xff0c;從而令企業獲得真正最大的成功…

解决离线服务器无法加载HuggingFaceEmbeddings向量化模型的问题

由于服务器是离线的&#xff0c;因此我先在本地到huggingface官网下载模型text2vec&#xff0c;然后上传到服务器上运行&#xff0c;报错&#xff1a; (MaxRetryError(HTTPSConnectionPool(host\huggingface.co\, port443): Max retries exceeded with url: /api/models/senten…

记录:robot_localization传感器数据融合学习

一、参考资料 官方&#xff1a; http://wiki.ros.org/robot_localizationhttp://docs.ros.org/en/noetic/api/robot_localization/html/index.html2015 ROSCon 演讲官方网址&#xff08;youyube上也有这个视频&#xff09;ppt 实践教程 https://kapernikov.com/the-ros-rob…

LockSupport

一、是什么 ● LockSupport是用来实现线程的阻塞和唤醒。 ● 主要内部方法是 park() 和 unpark() &#xff0c;分别是阻塞线程和解除阻塞线程。 二、作用 为了替换掉jdk自带的wait-notify等待唤醒机制(wait-notify 只能结合synchronized使用&#xff0c;并且只能唤醒一个或全…

【循环程序设计-谭浩强适配】(适合专升本、考研)

无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 完整资料如下&#xff1a;纯干货、纯干货、纯干货&#xff01;&#xff01;…

【NOIP2008普及组复赛】 题4:立体图

题4&#xff1a;立体图 【题目描述】 小渊是个聪明的孩子&#xff0c;他经常会给周围的小朋友讲些自己认为有趣的内容。最近&#xff0c;他准备给小朋友讲解立体图&#xff0c;请你帮他画出立体图。 小渊有一块面积为mn的矩形区域&#xff0c;上面有mn个边长为1的格子&#…

ArcGIS土地利用数据制备、分析及基于FLUS模型土地利用预测实践技术应用

土地资源对人类至关重要&#xff0c;土地是人类赖以生存和发展的物质基础&#xff0c;是一切生产和一起存在的源泉。利用现代化的技术手段及时、准确地获取土地利用现状&#xff0c;以及充分认识土地利用和土地覆盖变化规律&#xff0c;能极大地提高制定土地利用规划的科学性和…

【Vue探索之旅】初识Vue

文章目录 前言 渐进式框架​ 入门案例 完结撒花 前言 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#x…

社区新零售:家门口的便利与温暖

社区新零售&#xff1a;家门口的便利与温暖 随着都市生活节奏的加快&#xff0c;人们对于便捷、高效的生活方式有了更高的追求。社区新零售&#xff0c;作为零售业的一股新兴力量&#xff0c;正以其独特的魅力&#xff0c;悄然改变着我们的日常生活。 家门口的便利 社区新零…

通过EXCEL控制PLC启停电机的一种方法

概述 本例将介绍用微软EXCEL电子表格控制西门子S7-1200 PLC实现电机启停的一种方法。 第1步&#xff1a; 添加PLC设备&#xff0c;选择西门子S7-1214C CPU&#xff0c;设置IP地址&#xff1a;192.168.18.18&#xff0c;子网掩码&#xff1a;255.255.255.0。 第2步&#xff1a…

低频量化日报(明日涨停预测,指数分位值,指数风险溢价比,配债数据集,可转债策略,可转债上市价格预测)...

低频量化日报&#xff08;2024-05-13&#xff09; 明日涨停预测指数分位值指数风险溢价比小规模配债<5亿可转债策略 双低策略四因子策略网格策略可转债上市价格预测 宏柏转债-111019最后 明日涨停预测 有能力和时间的同志可以参考这个指标。 关于封板强度的文章可以参考&…

angular13 自定义组件全项目都可用 自存

1.定义自定义组件 使用命令创建一个组件 但删除它在你的module里的声明&#xff0c;因为会报错只能引用一次 在本组件中创建一个module文件&#xff0c;引入刚才的组件component.ts import { NgModule } from angular/core; import { CommonModule } from angular/common; im…

秋招算法刷题10(栈和队列)

0509 232.用栈实现队列 class MyQueue {Deque<Integer> inStack;Deque<Integer> outStack;public MyQueue() {inStack new ArrayDeque<Integer>();outStack new ArrayDeque<Integer>();}public void push(int x) {inStack.push(x);}public int pop…

Java数据类型:基本类型

Java是一种强类型语言&#xff0c;定义变量时&#xff0c;必须指定数据类型。 // 变量必须指定数据类型 private String username;初学者不免有个疑问&#xff1a;在实际编写代码的过程中&#xff0c;该如何选择数据类型呢&#xff1f; 回答这个问题之前&#xff0c;先来解决…

CSS 块状元素

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…