終于將STC單片機使用第二串口功能(STC12C5A60S2+GPS+串口2+1602LCD)給整出來了。作為新人真的真的是欣喜若狂,無語言表啊!!!
再此將來之不易的心得寫出來,讓和我一樣的單片機小朋友一起共勉......
1、注意串口的引腳,如果你沒有設置著的話(P1.2 Rx腳,P1.3 Tx腳)。我就犯了這個習慣性的錯誤,太無語了!!!
2、一定要將單片機設置為1T的。
P00109-213507.jpg (4.2 MB, 下載次數: 29)
下載附件
2020-1-9 21:35 上傳
LNUMX6H[NF}(1LSZCLEC%RL.png (20.33 KB, 下載次數: 34)
下載附件
2020-1-9 21:31 上傳
IIC海拔、速度、衛星 、溫度效果圖(2004顯示).jpg (222.59 KB, 下載次數: 38)
下載附件
2020-1-9 23:55 上傳
IIC海拔、速度、衛星 效果圖.jpg (206.16 KB, 下載次數: 38)
下載附件
2020-1-9 23:55 上傳
單片機源程序如下:
- #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 == '
- ) //若是統一的數據頭,則作為數組第一個元素
- {
- 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; //重新打開串行口中斷
- }
復制代碼
所有資料51hei提供下載:
009版本IIC-GPS+1602+C52-海拔、速度、衛星 +溫度 - (GPS接串口2).7z
(31.69 KB, 下載次數: 166)
2020-1-9 23:57 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|