找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机BMP180无线胎压监测tpms系统设计源码

  [复制链接]
跳转到指定楼层
楼主
我现在在做一个基于51单片机的TPMS,传感器用BMP180,射频用NRF24K01,显示屏用1602,现在我已经可以显示压强了,现在分享给大家不过温度不知道怎么弄了,不懂怎么改程序了.


单片机源程序如下:

  1. #include"reg52.h"   //头文件
  2. #include"Allhead.h"

  3. #include <intrins.h>
  4. #include "eeprom52.h"

  5. sbit K1 = P3^2; //菜单
  6. sbit K2 = P3^3;  //加
  7. sbit K3 = P3^4;  //减
  8. sbit Buzzer= P1^7;  //控制端

  9. unchar yemian=0;
  10. unchar num=0;
  11. unchar flag=0,a,b,c; //报警伐值
  12. unchar SJqiya1,SJqiya2;//实际中所测的气压
  13. unchar gaoya,diya;  //gaoya代表气压上限,diya代表气压下限。
  14. unchar lcdgaoya[5],lcddiya[5];

  15. /******************把数据保存到单片机内部eeprom中******************/
  16. void write_eeprom()
  17. {
  18.         SectorErase(0x2000);

  19.         byte_write(0x2001, gaoya);
  20.         byte_write(0x2002, diya);
  21.   byte_write(0x2060, a_a);        
  22. }

  23. /******************把数据从单片机内部eeprom中读出来*****************/
  24. void read_eeprom()
  25. {

  26.         gaoya = byte_read(0x2001);
  27.         diya  = byte_read(0x2002);
  28.   a_a   = byte_read(0x2060);
  29. }

  30. /**************开机自检eeprom初始化*****************/
  31. void init_eeprom()
  32. {
  33.         read_eeprom();                //先读
  34.         if(a_a != 2)                //新的单片机初始单片机内问eeprom
  35.         {
  36.         
  37.           gaoya = 98;
  38.                 diya=   90;
  39.                 a_a = 2;
  40.                 write_eeprom();
  41.         }        
  42. }






  43. void gaoyachuli()   //气压显示         上限
  44. {
  45.     lcdgaoya[0]=gaoya/100+'0';
  46.     lcdgaoya[1]=gaoya%100/10+'0';
  47.           lcdgaoya[2]=gaoya%100%10+'0';        
  48. }


  49.   void diyachuli()   //气压显示        下限
  50. {
  51.     lcddiya[0]=diya/100+'0';
  52.     lcddiya[1]=diya%100/10+'0';
  53.           lcddiya[2]=diya%100%10+'0';        
  54. }


  55. void baojin() //报警装置
  56. {

  57.             a=RevTempDate0[3]-48;
  58.             b=RevTempDate0[4]-48;
  59.                   c=RevTempDate0[5]-48;
  60.       SJqiya1=a*100+b*10+c;   //所测的实际气压1
  61.         
  62.             a=RevTempDate1[3]-48;
  63.             b=RevTempDate1[4]-48;
  64.                   c=RevTempDate1[5]-48;
  65.       SJqiya2=a*100+b*10+c;   //所测的实际气压2
  66.         
  67.         
  68.      if(  SJqiya1>=gaoya   ||  SJqiya1<diya  ||  SJqiya2>=gaoya  ||  SJqiya2<diya  )  
  69.                         {
  70.               Buzzer=0; // 报警
  71.                         }

  72.      if( SJqiya1>=diya &&  SJqiya1<gaoya &&   SJqiya2>=diya &&  SJqiya2<gaoya)
  73.                         {
  74.               Buzzer=1; //停止报警
  75.                         }

  76. }


  77. void key() //按键程序 选择菜单模式
  78. {
  79.      
  80.           if(!K1)
  81.                    {  
  82.                            LCDDelay(20);
  83.                             if(!K1)
  84.                          {   
  85.                                                          while(!K1)
  86.                                            ;
  87.                                                           yemian++;
  88.                                                                 if(yemian>=3) { yemian=0; }
  89.              }
  90.                    }

  91. }


  92. shezhi()  //对里面的数值进行修改
  93. {
  94.     if(!K2)
  95.                    {  
  96.                            NRFDelay(120);
  97.                             if(!K2)
  98.                          {   
  99.                                                         // while(!K2)
  100.                                            ;

  101.                                                          
  102.                                                          if(yemian==1)
  103.                                                          {
  104.                                                            gaoya+=1;
  105.                                                                 if(gaoya>250) { gaoya=250; }
  106.                                                                 write_eeprom();       //保存数据               
  107.                                                                 gaoyachuli(); //
  108.                                                                 LcdShow(1,4,lcdgaoya);
  109.                 }

  110.                                                          if(yemian==2)
  111.                                                          {
  112.                                                            diya+=1;
  113.                                                                  if(diya>250) { diya=250; }
  114.                                                                  write_eeprom();   //保存数据               
  115.                                                                  diyachuli(); //显示
  116.                                                                  LcdShow(1,4,lcddiya);
  117.                }
  118.              }
  119.                    }
  120.                         
  121.                           if(!K3)
  122.                    {  
  123.                             NRFDelay(120);
  124.                              if(!K3)
  125.                          {   
  126.                                                         // while(!K3)
  127.                                            ;

  128.                                                         if(yemian==1)
  129.                                                            {
  130.                                                             gaoya-=1;
  131.                                                                   if(gaoya<=1) { gaoya=1; }
  132.                                                                   write_eeprom();       //保存数据               
  133.                                                                   gaoyachuli(); //
  134.                                                                   LcdShow(1,4,lcdgaoya);
  135.                  }
  136.                                                          
  137.                                                                  if(yemian==2)
  138.                                                           {
  139.                                                            diya-=1;
  140.                                                                  if(diya<=1) { diya=1; }
  141.                                                                  write_eeprom();       //保存数据               
  142.                                                                  diyachuli(); //显示
  143.                                                                  LcdShow(1,4,lcddiya);
  144.                 }
  145.              }
  146.                    }

  147. }




  148. /************************主函数********************/
  149. void main()
  150. {  
  151.          LCDInt();
  152.           LcdShow(0,2,"    Welcome      ");
  153.    NRFDelay(1000);//短暂延时
  154.          LcdShow(1,2,"   (Kpa)    ");
  155.    NRFDelay(2000);//短暂延时
  156.    LCDInt();   //初始化
  157.          init_eeprom();                              //读eeprom数据
  158.    NRF24L01Int();   //初始化
  159. while(1)
  160.     {
  161.                 key(); //按键扫描

  162.         //==================//进入工作状态=====================               
  163.                 if(yemian==0)  
  164.                         {
  165.                           if(flag==0)
  166.                                  {
  167.             flag=1;
  168.             LCDInt();
  169.                                     LcdShow(0,0," Left    Right  ");
  170.          }
  171.         NRFSetRXMode();//设置为接收模式
  172.                                 num++;
  173.                                 if(num>=20) { num=0;   GetDate(); } //开始接受数
  174.         baojin();
  175.      }

  176. //==================//进入气压上限设置状态=====================                        
  177.                 if(yemian==1)  //进入设置模式
  178.                  {
  179.                           
  180.                            if(flag==1)
  181.                                  {
  182.              flag=2;
  183.                                            Buzzer=1;
  184.                                            LCDInt();
  185.              LcdShow(0,3,"   Pressure_H  ");
  186. ……………………

  187. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
基于51单片机的TPMS.zip (400.91 KB, 下载次数: 138)



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

使用道具 举报

沙发
ID:222834 发表于 2017-7-30 11:01 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

板凳
ID:228271 发表于 2017-8-22 13:32 | 只看该作者
谢谢楼主分享 我来看看
回复

使用道具 举报

地板
ID:109943 发表于 2017-10-1 12:33 来自手机 | 只看该作者
轮胎胎压多少?传感器量程多少?那个是大气压传感器,传感器不防水不防尘也不抗震,做胎压监测,原理可行实际应用真心不行
回复

使用道具 举报

5#
ID:381252 发表于 2018-8-11 21:50 来自手机 | 只看该作者
能否显示实时检测到的气压大小呢?
回复

使用道具 举报

6#
ID:225895 发表于 2019-4-19 13:58 | 只看该作者
仿真图怎么没有
回复

使用道具 举报

7#
ID:225895 发表于 2019-4-19 14:02 | 只看该作者
仿真或者原理图没有
回复

使用道具 举报

8#
ID:975054 发表于 2021-11-21 22:32 | 只看该作者
关键是省电、可靠性。谢谢分享!!!刚搞清楚,我用的是STC8 硬件I2C+BMP280方案,暂时只需要气压读数。不知道你具体用的什么MCU? 软硬件I2C又不同,具体细节太多。。。。

testBMP280ID:
bmp280 id is right...
0101 1000
temp                    press
0000 0000 0000 0001 1000 1011 1000 1111
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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