找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5864|回復(fù): 12
收起左側(cè)

GPS(日期+時(shí)間)+溫度(3溫度)+LCD2004(IIC 顯示模塊)+STC12C5A60S2+22.1184MH...

  [復(fù)制鏈接]
ID:408809 發(fā)表于 2020-1-30 09:58 | 顯示全部樓層 |閱讀模式
GPS(日期+時(shí)間)+溫度(3溫度)+LCD2004(IIC 顯示模塊)+STC12C5A60S2+22.1184MHz+串口1+串口2
綜合性那么高的資料網(wǎng)上應(yīng)該時(shí)找不到了吧!反正是花了我好久好久的時(shí)間才弄出來(lái)的。反正我是被折磨的快瘋掉了。!

初學(xué)者可以看看,高手可以幫忙指正!


最終效果圖.jpg

單片機(jī)源程序如下:
  1. #include "GPS.h"

  2. unsigned char RX_Buffer[68];                //此數(shù)組用于直接儲(chǔ)存來(lái)自GPS的原始數(shù)據(jù)
  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;     //允許串行口接收數(shù)據(jù)
  9.         PCON = 0x00;  //SMOD=0;波特率不加倍
  10.         TMOD = 0x20;  //T1方式2,用于產(chǎn)生波特率
  11.         TH1  = 0xFD;  //裝初值
  12.         TL1  = 0xFD;
  13.         TR1  = 1;     //啟動(dòng)定時(shí)器1
  14.         EA   = 1;     //打開(kāi)全局中斷控制
  15.         ES   = 1;     //打開(kāi)串行口中斷        
  16. }



  17. void RECEIVE_DATA(void) interrupt 4 using 3                  //串口中斷函數(shù),收到GPS的數(shù)據(jù)時(shí)進(jìn)入此中斷        
  18. {
  19.         unsigned char temp = 0;
  20.         ES=0;                                                                                //先關(guān)閉串行口中斷
  21.         temp = SBUF;                                                                //接收SBUF中的數(shù)據(jù)
  22.         RI = 0;                                                                                //接收完成的標(biāo)志位清零
  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. //                        主函數(shù)                   ***
  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); //自建字符的第一個(gè)指令地址
  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);     //自建字符的第一個(gè)數(shù)據(jù)地址(1602 總共可以自建8個(gè)字符)
  73.                 LCD_write_command(0xc7);   //自建字符顯示位置
  74.                 LCD_write_data(0X00);     //自建字符的第一個(gè)數(shù)據(jù)地址(1602 總共可以自建8個(gè)字符)
  75.                 LCD_write_command(0x9b);   //自建字符顯示位置
  76.                 LCD_write_data(0X00);     //自建字符的第一個(gè)數(shù)據(jù)地址(1602 總共可以自建8個(gè)字符)               

  77.         while(1)
  78.         {
  79.                
  80.                 unsigned int t;        
  81.                 qian_OK=0;                                                                        // 標(biāo)志變量歸零
  82.                 k=0;                                                                                    // 累計(jì)量歸零
  83.                 P2=0x00;
  84.                 //for(t=0;t<60000;t++)                                // 此數(shù)值小于5000則GPS數(shù)據(jù)更新太慢,甚至不正常;大于7000則會(huì)讓溫度更新時(shí)間超過(guò)三秒。
  85.                         {               
  86.                                 GPS_JieXi();
  87. P2=0xff;
  88. delay1(10);                                
  89.                         }
  90.                         
  91.         
  92.                         //datapros(Ds18b20ReadTemp());           //溫度數(shù)據(jù)處理函數(shù)        
  93.                         //dataprosN(Ds18b20ReadTempN());         //溫度數(shù)據(jù)處理函數(shù)        
  94.                         //dataprosS(Ds18b20ReadTempS());         //溫度數(shù)據(jù)處理函數(shù)
  95.                
  96.         
  97.         }
  98. }



  99. )                                                                //若是統(tǒng)一的數(shù)據(jù)頭,則作為數(shù)組第一個(gè)元素
  100.         {
  101.                 RX_Count = 0;
  102.                 Flag_GPS_OK = 0;               
  103.         }

  104.         RX_Buffer[RX_Count++] = temp;                                //收到的數(shù)據(jù)放到數(shù)組中

  105.         if(RX_Count >= 66)                                                        //序號(hào)大于66的數(shù)據(jù)無(wú)用,統(tǒng)一放到第66位覆蓋掉
  106.         {
  107.                 RX_Count = 66;
  108.         }

  109.         if(temp == '*')                                                                //收到*,則完成一幀數(shù)據(jù)的接收,不管是否完整有效
  110.         {
  111.                 Flag_GPS_OK = 1;                                                //標(biāo)志變量置為1
  112.         }

  113.         ES=1;                                                                                 //重新打開(kāi)串行口中斷
  114. }
復(fù)制代碼
  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. //                        主函數(shù)                   ***
  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); //自建字符的第一個(gè)指令地址
  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);     //自建字符的第一個(gè)數(shù)據(jù)地址(1602 總共可以自建8個(gè)字符)
  49.                 LCD_write_command(0xc7);   //自建字符顯示位置
  50.                 LCD_write_data(0X00);     //自建字符的第一個(gè)數(shù)據(jù)地址(1602 總共可以自建8個(gè)字符)
  51.                 LCD_write_command(0x9b);   //自建字符顯示位置
  52.                 LCD_write_data(0X00);     //自建字符的第一個(gè)數(shù)據(jù)地址(1602 總共可以自建8個(gè)字符)               

  53.         while(1)
  54.         {
  55.                
  56.                 unsigned int t;        
  57.                 qian_OK=0;                                                                        // 標(biāo)志變量歸零
  58.                 k=0;                                                                                    // 累計(jì)量歸零
  59.                 P2=0x00;
  60.                 //for(t=0;t&lt;60000;t++)                                // 此數(shù)值小于5000則GPS數(shù)據(jù)更新太慢,甚至不正常;大于7000則會(huì)讓溫度更新時(shí)間超過(guò)三秒。
  61.                         {               
  62.                                 GPS_JieXi();
  63. P2=0xff;
  64. delay1(10);                                
  65.                         }
  66.                         
  67.         
  68.                         //datapros(Ds18b20ReadTemp());           //溫度數(shù)據(jù)處理函數(shù)        
  69.                         //dataprosN(Ds18b20ReadTempN());         //溫度數(shù)據(jù)處理函數(shù)        
  70.                         //dataprosS(Ds18b20ReadTempS());         //溫度數(shù)據(jù)處理函數(shù)
  71.                
  72.         
  73.         }
  74. }


復(fù)制代碼


所有資料51hei提供下載:
22.1184MHz版本-最終版本IIC-GPS+1602+C52-日期、時(shí)間、速度、3溫度 - (GPS接串口2).7z (40.08 KB, 下載次數(shù): 175)





評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:408809 發(fā)表于 2020-1-30 09:59 | 顯示全部樓層
“A”  是代表有效數(shù)據(jù),“V”是代表無(wú)效數(shù)據(jù)
回復(fù)

使用道具 舉報(bào)

ID:64053 發(fā)表于 2020-2-1 00:24 | 顯示全部樓層
樓主,這個(gè)有衛(wèi)星數(shù)顯示嗎
回復(fù)

使用道具 舉報(bào)

ID:408809 發(fā)表于 2020-2-1 23:32 | 顯示全部樓層
93mxt 發(fā)表于 2020-2-1 00:24
樓主,這個(gè)有衛(wèi)星數(shù)顯示嗎

之前的版本有,這個(gè)版本被我刪了。
回復(fù)

使用道具 舉報(bào)

ID:64053 發(fā)表于 2020-2-14 21:29 | 顯示全部樓層
樓主你好,能做一個(gè)在12864屏上顯示衛(wèi)星的數(shù)據(jù)就好了,粗體字更可愛(ài)
回復(fù)

使用道具 舉報(bào)

ID:535242 發(fā)表于 2020-2-23 12:55 | 顯示全部樓層
不錯(cuò)哈 雖然目前不用這方面 還是感謝分享
回復(fù)

使用道具 舉報(bào)

ID:64053 發(fā)表于 2020-12-27 21:46 | 顯示全部樓層
gps波特率是多少
回復(fù)

使用道具 舉報(bào)

ID:800086 發(fā)表于 2020-12-28 23:18 來(lái)自手機(jī) | 顯示全部樓層
別的東西都有,就差一個(gè)顯示屏。先保存下來(lái)
回復(fù)

使用道具 舉報(bào)

ID:120677 發(fā)表于 2020-12-30 17:02 | 顯示全部樓層
先保存下來(lái) 以后再學(xué)
回復(fù)

使用道具 舉報(bào)

ID:827881 發(fā)表于 2021-12-13 11:14 來(lái)自手機(jī) | 顯示全部樓層
13503412974 發(fā)表于 2020-12-28 23:18
別的東西都有,就差一個(gè)顯示屏。先保存下來(lái)

是哪個(gè)型號(hào)的gps模塊,請(qǐng)問(wèn)下
回復(fù)

使用道具 舉報(bào)

ID:336378 發(fā)表于 2021-12-13 18:15 | 顯示全部樓層
    先下載了, 到時(shí)要用再來(lái)學(xué)習(xí)。
回復(fù)

使用道具 舉報(bào)

ID:85508 發(fā)表于 2022-12-11 18:30 | 顯示全部樓層
收藏、下載了
回復(fù)

使用道具 舉報(bào)

ID:1115137 發(fā)表于 2024-4-2 14:12 | 顯示全部樓層
感謝分享,請(qǐng)問(wèn)這個(gè)LCD2004模塊的iic通信是怎么樣連接的,采用的四位MCU和pcf8574連接嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表