风筝
发表于: 2018-8-25 07:23:04 | 显示全部楼层

在本篇文章中,我们将使用PIC单片机PIC16F628A从GPS模块获取时间和日期来制作一款GPS时钟。GPS模块的波特率是9600,所以我必须先配置uart端口以匹配它。为了读出时间,我将使用GPRMC语句。类似于:

  1. $GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598,,*10
复制代码

GPRMC句子和其他句子每秒发送一次。该软件将搜索正确的语句并使用该信息。

jc_pic16f628a-gpsmodule.jpg


使用的材料

●    MPLAB X开发环境,XC8编译器

●    PICKIT 3.5或类似的PIC编程器

●    GPS模块,发送NMEA语句

●    面包板、跳线、LCD和5K电位器


硬件连接图

以下原理图构建在面包板上。LCD显示屏的D6和D7连接到PIC引脚12和13。这恰好是PGC和PGD,即编程引脚。我不打算从LCD上读取数据,因此我将RW引脚接地。我也把D0-D3接地了。最好将未使用的引脚接地,但是在PCB上的PIC上未使用的引脚,将其连接到焊盘以便于访问,这样就可以为项目添加更多功能。

jc_pic16f628a-gpsclock.png


软件代码

首先是包含库文件、配置位、变量声明和函数原型。然后我有驱动LCD显示器的函数。要使LCD显示器正常工作,您必须遵循一些时序。之后,uart函数和两个函数在收到的时间和日期无效时显示消息。


主程序以一些指令开始:关闭比较器、设置端口的正确方向,并将所有端口设置为低。然后初始化LCD端口和uart端口。在主while循环中,RX上接收的每个字节都放在一个变量中。比较变量以查看它是否是美元符号$。如果它是一个美元符号,我现在知道我正处于NMEA判决的开头,但我不知道哪一个。然后它读取接下来的六个字节并将它们放入一个数组中。然后将该数组与预定义的数组进行比较。如果它是相同的,就可以知道:得到一条语句并且正确。现在遵循许多for循环,读取并将正确的值放在正确的位置。在此示例中,它读取时间、日期、纬度和经度,但LCD上仅显示时间和日期。


当程序接近主while循环结束时,它会在LCD上显示时间和日期。显示的时间通常称为GPS ZULU时间。

   jc_pic16f628a-gpsclock_img2.jpg


总结

在本文中,我向您展示了使用PIC单片机从GPS模块获取时间和日期的一种方法。通过对代码进行少量更改,您可以在不同的PIC上使用它。该程序读取时间、日期、纬度和经度,但它只显示时间和日期。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 10 | 回复: 13



手机版|

GMT+8, 2024-12-22 02:36 , Processed in 0.075111 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表