制作出来的实物图如下:
单片机源程序如下:
#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]);
上一篇:单片机循迹小车制作程序
下一篇:单片机与st188制作的心率测试仪全套设计
推荐阅读最新更新时间:2024-11-10 11:21
设计资源 培训 开发板 精华推荐
- MAX1720 具有高电流能力的线路和负载调节负输出电压的典型应用
- ESP32WROVER测试烧录座(兼容ESP32WROOM)
- 【训练营】物联网时钟+胡云飞
- 使用 Richtek Technology Corporation 的 RT9164 的参考设计
- EVAL-AD7933,AD7933 评估板,12 位,4 通道 ADC,带并行接口
- 使用基于 LTC4162EUFD-L42 USB PD(C 电缆)的电池充电器和电源路径的典型应用
- STEVAL-MKI198V1K,基于 STTS751 2.25V 低压本地数字温度传感器的温度探头套件
- 具有最少外部组件的 LTC3815EUFE 1.2V/6A 1MHz 降压稳压器的典型应用电路
- 使用 ROHM Semiconductor 的 BD49L46G-TL 的参考设计
- 加密开关