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