单片机GPS定位LCD1602液晶显示经纬度海拔及时间日期实物制作

发布者:等放假的Lwj最新更新时间:2019-12-31 来源: 51hei关键字:单片机  GPS定位  LCD1602液晶显示 手机看文章 扫描二维码
随时随地手机看文章

制作出来的实物图如下:

单片机源程序如下:

#include "main.h"

#include "LCD1602.h"

#include "GPS.h"


//定义变量

unsigned char KEY_NUM = 0;

bit Page = 0;

unsigned char xdata Display_GPGGA_Buffer[68];

unsigned char xdata Display_GPRMC_Buffer[68];

bit Flag_OV = 0;

bit Flag_Calc_GPGGA_OK = 0;

bit Flag_Calc_GPRMC_OK = 0;


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

//主函数

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

void main()

{

        unsigned char i = 0;

        Init_LCD1602();

        LCD1602_write_com(0x80);                                                //指针设置

        LCD1602_write_word("Welcome to use!");


        Delay_ms(1000);



        Uart_Init();


        while(1)

        {

                Scan_Key();

                if(Flag_GPS_OK == 1 && RX_Buffer[4] == 'G' && RX_Buffer[6] == ',' && RX_Buffer[13] == '.')                        //确定是否收到"GPGGA"这一帧数据

                {

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

                        {

                                Display_GPGGA_Buffer[i] = RX_Buffer[i];        

                        }

                        Hour = (Display_GPGGA_Buffer[7]-0x30)*10+(Display_GPGGA_Buffer[8]-0x30)+8;                        //UTC时间转换到北京时间                UTC+8

                                                                                                                                                                                                //0x30为ASCII转换为数字

                        if( Hour >= 24)                                //溢出

                        {

                                Hour %= 24;                                //获取当前Hour

                                Flag_OV = 1;                        //日期进位

                        }

                        else

                        {

                                Flag_OV = 0;

                        }


                        Min_High = Display_GPGGA_Buffer[9];

                        Min_Low = Display_GPGGA_Buffer[10];

        

                        Sec_High = Display_GPGGA_Buffer[11];

                        Sec_Low = Display_GPGGA_Buffer[12];


                        Flag_Calc_GPGGA_OK = 1;

                }


                if(Page == 0 && Flag_Calc_GPGGA_OK == 1)

                {

                        LED1 = ~LED1;

                        Flag_Calc_GPGGA_OK = 0;

                        LCD1602_write_com(0x80);                        //设置指针

                        LCD1602_write_data(Hour/10+0x30);

                        LCD1602_write_data(Hour%10+0x30);


                        LCD1602_write_data(':');


                        LCD1602_write_data(Min_High);

                        LCD1602_write_data(Min_Low);


                        LCD1602_write_data(':');

        

                        LCD1602_write_data(Sec_High);

                        LCD1602_write_data(Sec_Low);


                        LCD1602_write_word("  ");

                        

                        LCD1602_write_data(Display_GPGGA_Buffer[54]);        

                        LCD1602_write_data(Display_GPGGA_Buffer[55]);        

                        LCD1602_write_data(Display_GPGGA_Buffer[56]);        

                        LCD1602_write_data(Display_GPGGA_Buffer[57]);

                        LCD1602_write_word("m");

        

                        LCD1602_write_com(0x80+0x40);                        //设置指针

                        

                        LCD1602_write_data(Display_GPGGA_Buffer[28]);                        //N 或者 S


                        LCD1602_write_data(Display_GPGGA_Buffer[17]);                        //纬度

                        LCD1602_write_data(Display_GPGGA_Buffer[18]);                        //纬度

                        LCD1602_write_data(0xdf);                                                                //度

                        LCD1602_write_data(Display_GPGGA_Buffer[19]);                        //纬度

                        LCD1602_write_data(Display_GPGGA_Buffer[20]);                        //纬度

                        LCD1602_write_word("'");                                                                //秒

                        

                        LCD1602_write_data(Display_GPGGA_Buffer[42]);                        //E 或者 W


                        LCD1602_write_data(Display_GPGGA_Buffer[30]);                        //经度

                        LCD1602_write_data(Display_GPGGA_Buffer[31]);        

[1] [2] [3]
关键字:单片机  GPS定位  LCD1602液晶显示 引用地址:单片机GPS定位LCD1602液晶显示经纬度海拔及时间日期实物制作

上一篇:单片机循迹小车制作程序
下一篇:单片机与st188制作的心率测试仪全套设计

推荐阅读最新更新时间:2024-11-10 11:21

如何使用AVR微控制器ATmega16连接霍尔传感器
霍尔传感器的工作原理是基于1869年Edwin Hall提出的霍尔效应。提出的声明说:“霍尔效应是在电导体上产生电压差(霍尔电压),横向于导体中的电流和垂直于电流的外加磁场。“ 那么,什么可以是最简单的声明形式,以更好的方式理解它?在本本中,将通过实际示例逐步说明。霍尔传感器将与Atmega16微控制器连接,一个LED将用于显示磁铁将被带到霍尔传感器附近时的效果。 什么是霍尔效应? 霍尔效应与磁场中的移动电荷有关。要以实用的方式理解,请将电池连接到导体,如下图(a)所示。电流(i)将开始从导体流过电池的正极到负极。 电子流(e-)将与电流的方向相反,即从电池的负极端子通过导体到电池的正极端子。在我们测量导体之间的电
[单片机]
如何使用AVR<font color='red'>微控制器</font>ATmega16连接霍尔传感器
51单片机显示时间日期
#include reg52.h #include max7219.h #include DS1302.h sbit p10=P1^0; bit flag=0; //调整控制标记 bit flagh=1; //时间日期切换标记 uchar temp ; //调整前的时间 uchar curtime1 ,curtime2 ; //调整后的时间显示模式 uchar tab1 ={30,40,11,31,8,2,14}; //DS1302初始化时间 uchar xingqi; //读取的星期 uchar code tab2 ={0xff,0xf9,0xA4,0xb0,0x99,0x92,0x82,0xf8};
[单片机]
#51单片机#按键消抖
按键消抖是为了保证实际应用效果 先看一段代码: #include reg52.h unsigned char code LedChar ={//数码管显示的数字0~9 0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90}; sbit KEY1 = P3^3; sbit DigitalTube = P1^0; bit backup = 1; //定义一个位变量,保存前一次扫描的按键值 unsigned char cnt = 0;//定义一个计数变量,记录按键按下次数 void main() { KEY1 = 1; //按键引脚输出高电平 while(1)
[单片机]
单片机立即寻址方式与举例
在这种寻址方式中, 指令 多是双字节的,一般第一个字节是操作码,第二个字节是操作数。该操作数直接参与操作,所以又称立即数,有“#”号表示。立即数就是存放在程序存储器中的常数,换句话说就是操作数(立即数)是包含在指令字节中的。 例如: MOV A,#3AH 这条指令的指令代码为74H、3AH,是双字节指令,这条指令的功能是把立即数3AH送入累加器A中。 MOV DPTR,#8200H 在前面学单片机的专用寄存器时,我们已学过,DPTR是一个16位的寄存器,它由DPH及DPL两个8位的寄存器组成。这条指令的意思就是把立即数的高8位(即82H)送入DPH寄存器,把立即数的低8位(即00H)送入DPL寄存器。 这里也特别说明一下:在
[单片机]
基于51单片机i2c多字节的读写
使用Keil的编译环境下载,确实能够下载,但是入口的地址是如下黄色的那行显示所示,如果单步执行(F11)或全速运行(F5),程序始终在原位置不动(0x1FFF4252),如果强制的将PC指针的值和SP的值修改为0x8000000与0x2000000,然后在点击运行,则能够跑到main()函数,再全速运行,能够看到客户板子上的LED灯的闪烁。 但是如果不强制修改PC和SP指针的值,则程序不执行。 所以问题就变成为什么程序下载进去后的地址是0x1FFF4252?0x1FFF4252又是什么地址呢?查阅相应的手册,发现0x1FFF4252是处在了Systemmemory区域。 用万用表测量了客户板上的Boot0引脚的电平,发
[单片机]
基于51<font color='red'>单片机</font>i2c多字节的读写
单片机的c语言教程 第五课 常量
上一节我们学习了KEIL C51编译器所支持的数据类型。而这些数据类型又是怎么用在常量和变量的定义中的呢?又有什么要注意的吗?下面就来看看吧。晕!你还区分不清楚什么是常量,什么是变量。常量是在程序运行过程中不能改变值的量,而变量是可以在程序运行过程中不断变化的量。变量的定义可以使用所有C51编译器支持的数据类型,而常量的数据类型只有整型、浮点型、字符型、字符串型和位标量。这一节我们学习常量定义和用法,而下一节则学习变量。 常量的数据类型说明是这样的 1.整型常量可以表示为十进制如123,0,-89等。十六进制则以0x开头如0x34,-0x3B等。长整型就在数字后面加字母L,如104L,034L,0xF340等。 2.浮点型常量可
[单片机]
<font color='red'>单片机</font>的c语言教程 第五课 常量
基于MC9S12DP256单片机实现电动助力转向系统的设计
转向系统是汽车的重要组成部分,其性能直接影响着汽车行驶的稳定性和安全性。早期的汽车转向系统为纯 机械 转向系统,没有助力,转向动力完全由驾驶员提供,驾驶体验差。从上世纪30年代以后,逐渐出现了助力转向系统。目前,汽车助力转向主要有3种形式: 液压 助力转向系统(Hydraulic Power S te ering,HPS),电控式液压助力转向系统(Electric Hydraulic Power Steeing,EHPS)以及电动助力转向系统(Electric Power Steering System,EPS)。相比前两种,EPS由电机提供辅助力矩,没有油系统,很大程度降低了汽车转向系统的复杂度,且在燃油效率、 模块化 、助力效
[汽车电子]
基于MC9S12DP256<font color='red'>单片机</font>实现电动助力转向系统的设计
集Hi-Fi、智能和USB多通道等特征于一体的微控制器——迎接数字音频新时代
随着诸多技术突破和全新流媒体服务的不断融合,在智能家居和智能音箱市场日益繁荣的今天,消费者对于音频的需求已不再仅仅局限于音质本身,更多的是追求高品质的生活体验和便捷的智慧互联。因此, 要想更好的迎接数字音频新时代,当今的数字音频,不仅要能够提供Hi-Fi的音质,而且还能够作为智能设备的人机界面,同时还能够用USB多通道等方式方便连接...... XMOS在其最新的xcore器件中集成了边缘AI、DSP、控制单元和I/O等功能,因而可以在新一代音频、电机控制、工业自动化和边缘计算等许多应用和场景中,利用软件就能开发出功能非常先进的系统。这种在实现高性能硬件的同时,保持灵活性和可编程性的特性,可以为工程师和系统企业带来更快的产品
[模拟电子]
集Hi-Fi、智能和USB多通道等特征于一体的<font color='red'>微控制器</font>——迎接数字音频新时代
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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