GPS(日期+時間)+溫度(3溫度)+LCD2004(IIC 顯示模塊)+STC12C5A60S2+22.1184MHz+串口1+串口2
綜合性那么高的資料網上應該時找不到了吧!反正是花了我好久好久的時間才弄出來的。反正我是被折磨的快瘋掉了!!
初學者可以看看,高手可以幫忙指正!
單片機源程序如下:
- #include "GPS.h"
- unsigned char RX_Buffer[68]; //此數組用于直接儲存來自GPS的原始數據
- unsigned char RX_Count = 0;
- bit Flag_GPS_OK = 0;
- void Uart_Init()
- {
- SCON = 0X50; //UART方式1;8位UART
- REN = 1; //允許串行口接收數據
- PCON = 0x00; //SMOD=0;波特率不加倍
- TMOD = 0x20; //T1方式2,用于產生波特率
- TH1 = 0xFD; //裝初值
- TL1 = 0xFD;
- TR1 = 1; //啟動定時器1
- EA = 1; //打開全局中斷控制
- ES = 1; //打開串行口中斷
- }
- void RECEIVE_DATA(void) interrupt 4 using 3 //串口中斷函數,收到GPS的數據時進入此中斷
- {
- unsigned char temp = 0;
- ES=0; //先關閉串行口中斷
- temp = SBUF; //接收SBUF中的數據
- RI = 0; //接收完成的標志位清零
- // LED1 = ~LED1;
-
- if(temp == '*******************************************************************************
- 此程序使用 22.1184MHz 晶振
- *******************************************************************************/
- #include "STC12C5A60S2.h"
- #include "1602IIC.h"
- #include "GPS.h"
- #include "18b20.h"
- uchar code table1[]={0x00,0x00,0x10,0x07,0x08,0x08,0x07,0x00};//字符℃
- //****************************************************
- // 主函數 ***
- //****************************************************
- void main()
- {
- unsigned char num;
- Init_Lcd(); //LCD初始化
- Uart2_Init(); //串口初始化
- LCD_write_command(0xc0);
- LCD_write_word("Welcome to use GPS..");
- Delay1ms();
- LCD_write_command(0x01);
-
- LCD_write_command(0x80);
- LCD_write_word("n:");
- LCD_write_command(0xc0);
- LCD_write_word("w:");
- LCD_write_command(0x94);
- LCD_write_word("s:");
- LCD_write_command(0x8a);
- LCD_write_word("D:");
- LCD_write_command(0xca);
- LCD_write_word("T:");
-
-
- Write_LCD(5,0,".");
- Write_LCD(5,1,".");
- LCD_write_command(0x99);
- LCD_write_word(".");
-
- LCD_write_command(0x9E);
- LCD_write_word("*:");
-
- LCD_write_command(0x40); //自建字符的第一個指令地址
- for(num=0;num<8;num++)
- {
- LCD_write_data(table1[num]);
- }
- LCD_write_command(0x87); //自建字符顯示位置
- LCD_write_data(0X00); //自建字符的第一個數據地址(1602 總共可以自建8個字符)
- LCD_write_command(0xc7); //自建字符顯示位置
- LCD_write_data(0X00); //自建字符的第一個數據地址(1602 總共可以自建8個字符)
- LCD_write_command(0x9b); //自建字符顯示位置
- LCD_write_data(0X00); //自建字符的第一個數據地址(1602 總共可以自建8個字符)
- while(1)
- {
-
- unsigned int t;
- qian_OK=0; // 標志變量歸零
- k=0; // 累計量歸零
- P2=0x00;
- //for(t=0;t<60000;t++) // 此數值小于5000則GPS數據更新太慢,甚至不正常;大于7000則會讓溫度更新時間超過三秒。
- {
- GPS_JieXi();
- P2=0xff;
- delay1(10);
- }
-
-
- //datapros(Ds18b20ReadTemp()); //溫度數據處理函數
- //dataprosN(Ds18b20ReadTempN()); //溫度數據處理函數
- //dataprosS(Ds18b20ReadTempS()); //溫度數據處理函數
-
-
- }
- }
- ) //若是統一的數據頭,則作為數組第一個元素
- {
- RX_Count = 0;
- Flag_GPS_OK = 0;
- }
- RX_Buffer[RX_Count++] = temp; //收到的數據放到數組中
- if(RX_Count >= 66) //序號大于66的數據無用,統一放到第66位覆蓋掉
- {
- RX_Count = 66;
- }
- if(temp == '*') //收到*,則完成一幀數據的接收,不管是否完整有效
- {
- Flag_GPS_OK = 1; //標志變量置為1
- }
- ES=1; //重新打開串行口中斷
- }
復制代碼- /*******************************************************************************
- 此程序使用 22.1184MHz 晶振
- *******************************************************************************/
- #include "STC12C5A60S2.h"
- #include "1602IIC.h"
- #include "GPS.h"
- #include "18b20.h"
- uchar code table1[]={0x00,0x00,0x10,0x07,0x08,0x08,0x07,0x00};//字符℃
- //****************************************************
- // 主函數 ***
- //****************************************************
- void main()
- {
- unsigned char num;
- Init_Lcd(); //LCD初始化
- Uart2_Init(); //串口初始化
- LCD_write_command(0xc0);
- LCD_write_word("Welcome to use GPS..");
- Delay1ms();
- LCD_write_command(0x01);
-
- LCD_write_command(0x80);
- LCD_write_word("n:");
- LCD_write_command(0xc0);
- LCD_write_word("w:");
- LCD_write_command(0x94);
- LCD_write_word("s:");
- LCD_write_command(0x8a);
- LCD_write_word("D:");
- LCD_write_command(0xca);
- LCD_write_word("T:");
-
-
- Write_LCD(5,0,".");
- Write_LCD(5,1,".");
- LCD_write_command(0x99);
- LCD_write_word(".");
-
- LCD_write_command(0x9E);
- LCD_write_word("*:");
-
- LCD_write_command(0x40); //自建字符的第一個指令地址
- for(num=0;num<8;num++)
- {
- LCD_write_data(table1[num]);
- }
- LCD_write_command(0x87); //自建字符顯示位置
- LCD_write_data(0X00); //自建字符的第一個數據地址(1602 總共可以自建8個字符)
- LCD_write_command(0xc7); //自建字符顯示位置
- LCD_write_data(0X00); //自建字符的第一個數據地址(1602 總共可以自建8個字符)
- LCD_write_command(0x9b); //自建字符顯示位置
- LCD_write_data(0X00); //自建字符的第一個數據地址(1602 總共可以自建8個字符)
- while(1)
- {
-
- unsigned int t;
- qian_OK=0; // 標志變量歸零
- k=0; // 累計量歸零
- P2=0x00;
- //for(t=0;t<60000;t++) // 此數值小于5000則GPS數據更新太慢,甚至不正常;大于7000則會讓溫度更新時間超過三秒。
- {
- GPS_JieXi();
- P2=0xff;
- delay1(10);
- }
-
-
- //datapros(Ds18b20ReadTemp()); //溫度數據處理函數
- //dataprosN(Ds18b20ReadTempN()); //溫度數據處理函數
- //dataprosS(Ds18b20ReadTempS()); //溫度數據處理函數
-
-
- }
- }
復制代碼
所有資料51hei提供下載:
22.1184MHz版本-最終版本IIC-GPS+1602+C52-日期、時間、速度、3溫度 - (GPS接串口2).7z
(40.08 KB, 下載次數: 175)
2020-1-30 15:32 上傳
點擊文件名下載附件
|