找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4638|回复: 12
收起左侧

GPS(日期+时间)+温度(3温度)+LCD2004(IIC 显示模块)+STC12C5A60S2+22.1184MH...

  [复制链接]
ID:408809 发表于 2020-1-30 09:58 | 显示全部楼层 |阅读模式
GPS(日期+时间)+温度(3温度)+LCD2004(IIC 显示模块)+STC12C5A60S2+22.1184MHz+串口1+串口2
综合性那么高的资料网上应该时找不到了吧!反正是花了我好久好久的时间才弄出来的。反正我是被折磨的快疯掉了!!!

初学者可以看看,高手可以帮忙指正!


最终效果图.jpg

单片机源程序如下:
  1. #include "GPS.h"

  2. unsigned char RX_Buffer[68];                //此数组用于直接储存来自GPS的原始数据
  3. unsigned char RX_Count = 0;

  4. bit Flag_GPS_OK = 0;


  5. void Uart_Init()                                                                     
  6. {
  7.         SCON = 0X50;  //UART方式1;8位UART
  8.         REN  = 1;     //允许串行口接收数据
  9.         PCON = 0x00;  //SMOD=0;波特率不加倍
  10.         TMOD = 0x20;  //T1方式2,用于产生波特率
  11.         TH1  = 0xFD;  //装初值
  12.         TL1  = 0xFD;
  13.         TR1  = 1;     //启动定时器1
  14.         EA   = 1;     //打开全局中断控制
  15.         ES   = 1;     //打开串行口中断        
  16. }



  17. void RECEIVE_DATA(void) interrupt 4 using 3                  //串口中断函数,收到GPS的数据时进入此中断        
  18. {
  19.         unsigned char temp = 0;
  20.         ES=0;                                                                                //先关闭串行口中断
  21.         temp = SBUF;                                                                //接收SBUF中的数据
  22.         RI = 0;                                                                                //接收完成的标志位清零
  23. //        LED1 = ~LED1;
  24.         
  25.         if(temp == '*******************************************************************************

  26. 此程序使用  22.1184MHz  晶振

  27. *******************************************************************************/
  28. #include "STC12C5A60S2.h"
  29. #include "1602IIC.h"
  30. #include "GPS.h"
  31. #include "18b20.h"

  32. uchar code table1[]={0x00,0x00,0x10,0x07,0x08,0x08,0x07,0x00};//字符℃



  33. //****************************************************
  34. //                        主函数                   ***
  35. //****************************************************
  36. void main()
  37. {
  38.                 unsigned char num;
  39.                 Init_Lcd();                                                                                        //LCD初始化
  40.                 Uart2_Init();                                                                        //串口初始化
  41.                 LCD_write_command(0xc0);                                       
  42.                 LCD_write_word("Welcome to use GPS..");
  43.                 Delay1ms();
  44.                 LCD_write_command(0x01);
  45.         

  46.                 LCD_write_command(0x80);                                       
  47.                 LCD_write_word("n:");
  48.                 LCD_write_command(0xc0);                                       
  49.                 LCD_write_word("w:");
  50.                 LCD_write_command(0x94);                                       
  51.                 LCD_write_word("s:");
  52.                 LCD_write_command(0x8a);                                       
  53.                 LCD_write_word("D:");
  54.                 LCD_write_command(0xca);                                       
  55.                 LCD_write_word("T:");
  56.         
  57.         
  58.                 Write_LCD(5,0,".");
  59.                 Write_LCD(5,1,".");        
  60.                 LCD_write_command(0x99);
  61.                 LCD_write_word(".");
  62.         
  63.                 LCD_write_command(0x9E);                                       
  64.                 LCD_write_word("*:");        
  65.                
  66.                 LCD_write_command(0x40); //自建字符的第一个指令地址
  67.                 for(num=0;num<8;num++)
  68.                         {
  69.         LCD_write_data(table1[num]);
  70.                         }
  71.                 LCD_write_command(0x87);   //自建字符显示位置
  72.                 LCD_write_data(0X00);     //自建字符的第一个数据地址(1602 总共可以自建8个字符)
  73.                 LCD_write_command(0xc7);   //自建字符显示位置
  74.                 LCD_write_data(0X00);     //自建字符的第一个数据地址(1602 总共可以自建8个字符)
  75.                 LCD_write_command(0x9b);   //自建字符显示位置
  76.                 LCD_write_data(0X00);     //自建字符的第一个数据地址(1602 总共可以自建8个字符)               

  77.         while(1)
  78.         {
  79.                
  80.                 unsigned int t;        
  81.                 qian_OK=0;                                                                        // 标志变量归零
  82.                 k=0;                                                                                    // 累计量归零
  83.                 P2=0x00;
  84.                 //for(t=0;t<60000;t++)                                // 此数值小于5000则GPS数据更新太慢,甚至不正常;大于7000则会让温度更新时间超过三秒。
  85.                         {               
  86.                                 GPS_JieXi();
  87. P2=0xff;
  88. delay1(10);                                
  89.                         }
  90.                         
  91.         
  92.                         //datapros(Ds18b20ReadTemp());           //温度数据处理函数        
  93.                         //dataprosN(Ds18b20ReadTempN());         //温度数据处理函数        
  94.                         //dataprosS(Ds18b20ReadTempS());         //温度数据处理函数
  95.                
  96.         
  97.         }
  98. }



  99. )                                                                //若是统一的数据头,则作为数组第一个元素
  100.         {
  101.                 RX_Count = 0;
  102.                 Flag_GPS_OK = 0;               
  103.         }

  104.         RX_Buffer[RX_Count++] = temp;                                //收到的数据放到数组中

  105.         if(RX_Count >= 66)                                                        //序号大于66的数据无用,统一放到第66位覆盖掉
  106.         {
  107.                 RX_Count = 66;
  108.         }

  109.         if(temp == '*')                                                                //收到*,则完成一帧数据的接收,不管是否完整有效
  110.         {
  111.                 Flag_GPS_OK = 1;                                                //标志变量置为1
  112.         }

  113.         ES=1;                                                                                 //重新打开串行口中断
  114. }
复制代码
  1. /*******************************************************************************

  2. 此程序使用  22.1184MHz  晶振

  3. *******************************************************************************/
  4. #include "STC12C5A60S2.h"
  5. #include "1602IIC.h"
  6. #include "GPS.h"
  7. #include "18b20.h"

  8. uchar code table1[]={0x00,0x00,0x10,0x07,0x08,0x08,0x07,0x00};//字符℃



  9. //****************************************************
  10. //                        主函数                   ***
  11. //****************************************************
  12. void main()
  13. {
  14.                 unsigned char num;
  15.                 Init_Lcd();                                                                                        //LCD初始化
  16.                 Uart2_Init();                                                                        //串口初始化
  17.                 LCD_write_command(0xc0);                                       
  18.                 LCD_write_word("Welcome to use GPS..");
  19.                 Delay1ms();
  20.                 LCD_write_command(0x01);
  21.         

  22.                 LCD_write_command(0x80);                                       
  23.                 LCD_write_word("n:");
  24.                 LCD_write_command(0xc0);                                       
  25.                 LCD_write_word("w:");
  26.                 LCD_write_command(0x94);                                       
  27.                 LCD_write_word("s:");
  28.                 LCD_write_command(0x8a);                                       
  29.                 LCD_write_word("D:");
  30.                 LCD_write_command(0xca);                                       
  31.                 LCD_write_word("T:");
  32.         
  33.         
  34.                 Write_LCD(5,0,".");
  35.                 Write_LCD(5,1,".");        
  36.                 LCD_write_command(0x99);
  37.                 LCD_write_word(".");
  38.         
  39.                 LCD_write_command(0x9E);                                       
  40.                 LCD_write_word("*:");        
  41.                
  42.                 LCD_write_command(0x40); //自建字符的第一个指令地址
  43.                 for(num=0;num&lt;8;num++)
  44.                         {
  45.         LCD_write_data(table1[num]);
  46.                         }
  47.                 LCD_write_command(0x87);   //自建字符显示位置
  48.                 LCD_write_data(0X00);     //自建字符的第一个数据地址(1602 总共可以自建8个字符)
  49.                 LCD_write_command(0xc7);   //自建字符显示位置
  50.                 LCD_write_data(0X00);     //自建字符的第一个数据地址(1602 总共可以自建8个字符)
  51.                 LCD_write_command(0x9b);   //自建字符显示位置
  52.                 LCD_write_data(0X00);     //自建字符的第一个数据地址(1602 总共可以自建8个字符)               

  53.         while(1)
  54.         {
  55.                
  56.                 unsigned int t;        
  57.                 qian_OK=0;                                                                        // 标志变量归零
  58.                 k=0;                                                                                    // 累计量归零
  59.                 P2=0x00;
  60.                 //for(t=0;t&lt;60000;t++)                                // 此数值小于5000则GPS数据更新太慢,甚至不正常;大于7000则会让温度更新时间超过三秒。
  61.                         {               
  62.                                 GPS_JieXi();
  63. P2=0xff;
  64. delay1(10);                                
  65.                         }
  66.                         
  67.         
  68.                         //datapros(Ds18b20ReadTemp());           //温度数据处理函数        
  69.                         //dataprosN(Ds18b20ReadTempN());         //温度数据处理函数        
  70.                         //dataprosS(Ds18b20ReadTempS());         //温度数据处理函数
  71.                
  72.         
  73.         }
  74. }


复制代码


所有资料51hei提供下载:
22.1184MHz版本-最终版本IIC-GPS+1602+C52-日期、时间、速度、3温度 - (GPS接串口2).7z (40.08 KB, 下载次数: 169)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:408809 发表于 2020-1-30 09:59 | 显示全部楼层
“A”  是代表有效数据,“V”是代表无效数据
回复

使用道具 举报

ID:64053 发表于 2020-2-1 00:24 | 显示全部楼层
楼主,这个有卫星数显示吗
回复

使用道具 举报

ID:408809 发表于 2020-2-1 23:32 | 显示全部楼层
93mxt 发表于 2020-2-1 00:24
楼主,这个有卫星数显示吗

之前的版本有,这个版本被我删了。
回复

使用道具 举报

ID:64053 发表于 2020-2-14 21:29 | 显示全部楼层
楼主你好,能做一个在12864屏上显示卫星的数据就好了,粗体字更可爱
回复

使用道具 举报

ID:535242 发表于 2020-2-23 12:55 | 显示全部楼层
不错哈 虽然目前不用这方面 还是感谢分享
回复

使用道具 举报

ID:64053 发表于 2020-12-27 21:46 | 显示全部楼层
gps波特率是多少
回复

使用道具 举报

ID:800086 发表于 2020-12-28 23:18 来自手机 | 显示全部楼层
别的东西都有,就差一个显示屏。先保存下来
回复

使用道具 举报

ID:120677 发表于 2020-12-30 17:02 | 显示全部楼层
先保存下来 以后再学
回复

使用道具 举报

ID:827881 发表于 2021-12-13 11:14 来自手机 | 显示全部楼层
13503412974 发表于 2020-12-28 23:18
别的东西都有,就差一个显示屏。先保存下来

是哪个型号的gps模块,请问下
回复

使用道具 举报

ID:336378 发表于 2021-12-13 18:15 | 显示全部楼层
    先下载了, 到时要用再来学习。
回复

使用道具 举报

ID:85508 发表于 2022-12-11 18:30 | 显示全部楼层
收藏、下载了
回复

使用道具 举报

ID:1115137 发表于 2024-4-2 14:12 | 显示全部楼层
感谢分享,请问这个LCD2004模块的iic通信是怎么样连接的,采用的四位MCU和pcf8574连接吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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