閑來無聊,給小車車增加個 車載 三溫度(水溫+室內+室外)+GPS(日期+時間+海拔+定位) ,硬件(STC12+22.114MHz+2oled+ IIC)寫的不好,有待優化!
效果圖003.jpg (2.9 MB, 下載次數: 100)
下載附件
2021-3-5 10:56 上傳
效果圖.jpg (2.3 MB, 下載次數: 104)
下載附件
2021-3-5 10:50 上傳
51hei.png (547.83 KB, 下載次數: 112)
下載附件
2021-3-5 20:14 上傳
單片機源程序如下:
- /*******************************************************************************
- MCU: STC12C5A60S2
- 晶振: 22.1184MHz
- A_OLED: 0.96寸 128*64
- LCD SCL : P0^6;
- LCD SDA : P0^7;
- GPS : P1^2
- 溫度:P1^5.6.7
-
- 說明:此版本出了偶爾跳1秒時間外,暫時沒有發現其他問題
-
- 日期、時間、3溫度 、有海拔-星期-分屏顯示(GPS接串口2)
- *******************************************************************************/
- #include "STC12C5A60S2.h"
- #include "reDefine.h"
- #include "A_oled.h"
- #include "B_oled.h"
- #include "GPS.h"
- #include "18b20.h"
- #include "bmp.h"
- bit gUpdateTempFlag = FALSE; // 將溫度標志設置為“假”
- void Timer1_Init(void); //定時1毫秒@22.1184MHz
- //****************************************************
- // 主函數 ***
- //****************************************************
- void main()
- {
- //unsigned long t;
-
- Uart2_Init(); //串口2初始化
- A_OLED_Init(); //初始化A_OLED
- A_OLED_Clear(); //清屏
- B_OLED_Init(); //初始化B_OLED
- B_OLED_Clear(); //清屏
-
-
-
- A_OLED_DrawBMP(0,0,132,8,BMP2); // 顯示 福特的 logo
- B_OLED_DrawBMP(0,0,132,8,BMP5); // 顯示 福特的 進無止境
- delay_ms(3000);
- B_delay_ms(3000);
- A_OLED_Clear(); //清屏
- B_OLED_Clear(); //清屏
-
-
- Timer1_Init(); // 定時器設置初始化
-
- A_OLED_DrawBMP(0,0,128,8,BMP1); // 顯示 溫度LOGO
- A_OLED_ShowString(0,0,"....The Temp....",8); // 顯示溫度屏的屏頭
- B_OLED_DrawBMP(4,0,132,8,BMP3); // 顯示 GPS-LOGO
- B_OLED_ShowString(0,0,"....The GPS....",8); // 顯示GPS屏的屏頭
- while(1) // 主循環開始
- {
-
- //for(t=0;t<600000;t++) /***** 溫度 部分******/
- //{
- if (gUpdateTempFlag) // 如果溫度標志為 “真”,開始執行溫度讀取操作
- {
- gUpdateTempFlag = FALSE; // 將溫度標志設置為“假” ( 0 )復位
-
- datapros(Ds18b20ReadTemp()); //溫度數據處理函數
- dataprosN(Ds18b20ReadTempN()); //溫度數據處理函數
- dataprosS(Ds18b20ReadTempS()); //溫度數據處理函數
-
- A_OLED_ShowString(3,2,"N:",16); //(2:從第幾列開始 ,6:從6頁開始, 16:占用2頁空間顯示(32:占用1頁空間顯示) )
- A_OLED_ShowString(3,4,"W:",16);
- A_OLED_ShowString(3,6,"S:",16);
-
- }
- //}
-
- //for(t=0;t<1000000;t++) /***** GPS 部分*****/
- //{
- if ((gIsRecvGNRMC) || (gIsRecvGNZDA)) // 只要其中一條語句接受完成就執行
-
- {
- GPS_JieXi();
- }
-
- //}
- }
- }
- //=======================================================================================================
- void Timer1_Init(void) // 定時器設置,1毫秒@22.1184MHz 波特率9600
- {
- AUXR |= 0x40; //定時器時鐘1T模式
- TMOD &= 0x0F; //設置定時器模式
- TL1 = 0x9A; //設置定時初值
- TH1 = 0xA9; //設置定時初值
- TF1 = 0; //清除TF1標志
- TR1 = 1; //定時器1開始計時
- ET1 = 1;
- }
- //-------------------------------------------------------------------------------------
- void Timer() interrupt 3 // GPS數據接收中斷
- {
- static unsigned int _1msCnt = 0; // static 是數據儲存類型,unsigned int 是數據類型
- if(++_1msCnt >= 1000) // 每隔1000ms,執行1 次
- {
- _1msCnt = 0; // 將毫秒計數復位
-
- gUpdateTempFlag = TRUE; // 將溫度標志設置為 “真” ( 1 )
- }
- if (gRecGPSDataTimeCnt > 0) //GPS數據接收超時檢測
- {
- gRecGPSDataTimeCnt --;
-
- if (gRecGPSDataTimeCnt == 0)
- {
- gGPSIndex = 0;
- }
- }
- }
復制代碼 程序:
2021.2.2---雙屏幕顯示-SH1106 OLED GPS 溫度 - 優化版.7z
(55.94 KB, 下載次數: 121)
2021-3-5 20:19 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|