找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4012|回复: 7
打印 上一主题 下一主题
收起左侧

车载 三温度+GPS程序 (STC12单片机+22.114MHz+2oled+ IIC)

  [复制链接]
跳转到指定楼层
楼主
闲来无聊,给小车车增加个 车载 三温度(水温+室内+室外)+GPS(日期+时间+海拔+定位) ,硬件(STC12+22.114MHz+2oled+ IIC)写的不好,有待优化!


单片机源程序如下:
  1. /*******************************************************************************

  2.    MCU: STC12C5A60S2  
  3.    晶振: 22.1184MHz
  4.          A_OLED: 0.96寸 128*64
  5.          LCD SCL : P0^6;
  6.          LCD SDA : P0^7;
  7.          GPS : P1^2
  8.          温度:P1^5.6.7
  9.          
  10.          说明:此版本出了偶尔跳1秒时间外,暂时没有发现其他问题
  11.          
  12.          日期、时间、3温度 、有海拔-星期-分屏显示(GPS接串口2)

  13. *******************************************************************************/
  14. #include "STC12C5A60S2.h"
  15. #include "reDefine.h"
  16. #include "A_oled.h"
  17. #include "B_oled.h"
  18. #include "GPS.h"
  19. #include "18b20.h"
  20. #include "bmp.h"


  21. bit gUpdateTempFlag = FALSE; //  将温度标志设置为“假”


  22. void Timer1_Init(void);                   //定时1毫秒@22.1184MHz

  23. //****************************************************
  24. //                        主函数                   ***
  25. //****************************************************
  26. void main()
  27. {
  28.                 //unsigned long t;
  29.         
  30.           Uart2_Init();                          //串口2初始化

  31.                 A_OLED_Init();                        //初始化A_OLED
  32.                 A_OLED_Clear();     //清屏
  33.           B_OLED_Init();                        //初始化B_OLED  
  34.                 B_OLED_Clear();     //清屏
  35.         
  36.                
  37.                
  38.                 A_OLED_DrawBMP(0,0,132,8,BMP2);   //  显示 福特的 logo
  39.           B_OLED_DrawBMP(0,0,132,8,BMP5);   //  显示 福特的 进无止境
  40.                 delay_ms(3000);        
  41.           B_delay_ms(3000);
  42.           A_OLED_Clear();    //清屏
  43.           B_OLED_Clear();    //清屏

  44.          
  45.          

  46.           Timer1_Init();          // 定时器设置初始化
  47.                
  48.                 A_OLED_DrawBMP(0,0,128,8,BMP1);                                                                                    //  显示 温度LOGO
  49.                 A_OLED_ShowString(0,0,"....The Temp....",8);                                          //  显示温度屏的屏头
  50.                 B_OLED_DrawBMP(4,0,132,8,BMP3);                        //  显示 GPS-LOGO               
  51.           B_OLED_ShowString(0,0,"....The  GPS....",8);                                          //  显示GPS屏的屏头

  52.         while(1)       // 主循环开始
  53.                         {
  54.                                 
  55.                                 //for(t=0;t<600000;t++)                 /***** 温度 部分******/        
  56.                                         //{                                
  57.                                                         if (gUpdateTempFlag)  // 如果温度标志为 “真”,开始执行温度读取操作                                       
  58.                                                                 {
  59.                                                                                         gUpdateTempFlag = FALSE;  //  将温度标志设置为“假”  ( 0 )复位
  60.                                                                                                                         
  61.                                                                                         datapros(Ds18b20ReadTemp());           //温度数据处理函数        
  62.                                                                                         dataprosN(Ds18b20ReadTempN());         //温度数据处理函数        
  63.                                                                                         dataprosS(Ds18b20ReadTempS());         //温度数据处理函数
  64.                                                                         
  65.                                                                                         A_OLED_ShowString(3,2,"N:",16);  //(2:从第几列开始 ,6:从6页开始,  16:占用2页空间显示(32:占用1页空间显示)    )
  66.                                                                                         A_OLED_ShowString(3,4,"W:",16);     
  67.                                                                                         A_OLED_ShowString(3,6,"S:",16);      
  68.                                                                                        
  69.                                                                  }
  70.                                         //}
  71.                                                                

  72.                                 //for(t=0;t<1000000;t++)    /***** GPS 部分*****/        
  73.                                          //{        
  74.                                                         if ((gIsRecvGNRMC) || (gIsRecvGNZDA))  // 只要其中一条语句接受完成就执行
  75.                                                                
  76.                                                                 {
  77.                                                                         GPS_JieXi();        
  78.                                                                 }
  79.                                                                
  80.                                          //}                                 
  81.                         }
  82. }


  83. //=======================================================================================================

  84. void Timer1_Init(void)                // 定时器设置,1毫秒@22.1184MHz   波特率9600
  85. {
  86.         AUXR |= 0x40;                //定时器时钟1T模式
  87.         TMOD &= 0x0F;                //设置定时器模式
  88.         TL1 = 0x9A;                        //设置定时初值
  89.         TH1 = 0xA9;                        //设置定时初值
  90.         TF1 = 0;                                //清除TF1标志
  91.         TR1 = 1;                                //定时器1开始计时
  92.         ET1 = 1;
  93. }

  94. //-------------------------------------------------------------------------------------

  95. void Timer() interrupt 3   // GPS数据接收中断
  96. {        
  97.     static unsigned int _1msCnt = 0;    // static 是数据储存类型,unsigned int 是数据类型

  98.     if(++_1msCnt >= 1000)   // 每隔1000ms,执行1 次
  99.                         {
  100.         _1msCnt = 0;          // 将毫秒计数复位
  101.                         
  102.         gUpdateTempFlag = TRUE;    // 将温度标志设置为 “真”  ( 1 )
  103.                         }

  104.                 if (gRecGPSDataTimeCnt > 0)                        //GPS数据接收超时检测
  105.                         {
  106.                                 gRecGPSDataTimeCnt --;
  107.                
  108.                                 if (gRecGPSDataTimeCnt == 0)
  109.                                         {
  110.                                                 gGPSIndex = 0;
  111.                                         }
  112.                         }
  113. }
复制代码
程序: 2021.2.2---双屏幕显示-SH1106 OLED GPS 温度 - 优化版.7z (55.94 KB, 下载次数: 116)

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏13 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:408809 发表于 2021-3-5 22:36 | 只看该作者
感觉还是可以的

000001.jpg (1.2 MB, 下载次数: 128)

000001.jpg
回复

使用道具 举报

板凳
ID:137349 发表于 2021-3-14 16:11 | 只看该作者
楼主厉害 !第一代显示不好,角度小,费电。第二代就牛了!!!
回复

使用道具 举报

地板
ID:430492 发表于 2021-3-22 15:28 | 只看该作者
颜色居然跟车内弄得一样一样的,不错!!
回复

使用道具 举报

5#
ID:47032 发表于 2021-7-13 19:28 | 只看该作者
没有分享原理图,还是给你点赞
回复

使用道具 举报

6#
ID:951974 发表于 2021-8-19 21:24 | 只看该作者
居然是两个屏  厉害了
回复

使用道具 举报

7#
ID:466595 发表于 2022-2-12 10:02 | 只看该作者
大佬,水温数据你是接哪里读取的?
回复

使用道具 举报

8#
ID:386467 发表于 2022-5-20 13:28 | 只看该作者
gps.h不在文件里面
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表