欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6534|回復: 7
收起左側(cè)

單片機BMP180無線胎壓監(jiān)測tpms系統(tǒng)設(shè)計源碼

  [復制鏈接]
ID:223055 發(fā)表于 2017-7-30 02:12 | 顯示全部樓層 |閱讀模式
我現(xiàn)在在做一個基于51單片機的TPMS,傳感器用BMP180,射頻用NRF24K01,顯示屏用1602,現(xiàn)在我已經(jīng)可以顯示壓強了,現(xiàn)在分享給大家不過溫度不知道怎么弄了,不懂怎么改程序了.
0.png

單片機源程序如下:

  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. /******************把數(shù)據(jù)保存到單片機內(nèi)部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. /******************把數(shù)據(jù)從單片機內(nèi)部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)                //新的單片機初始單片機內(nèi)問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()  //對里面的數(shù)值進行修改
  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();       //保存數(shù)據(jù)               
  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();   //保存數(shù)據(jù)               
  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();       //保存數(shù)據(jù)               
  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();       //保存數(shù)據(jù)               
  142.                                                                  diyachuli(); //顯示
  143.                                                                  LcdShow(1,4,lcddiya);
  144.                 }
  145.              }
  146.                    }

  147. }




  148. /************************主函數(shù)********************/
  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數(shù)據(jù)
  158.    NRF24L01Int();   //初始化
  159. while(1)
  160.     {
  161.                 key(); //按鍵掃描

  162.         //==================//進入工作狀態(tài)=====================               
  163.                 if(yemian==0)  
  164.                         {
  165.                           if(flag==0)
  166.                                  {
  167.             flag=1;
  168.             LCDInt();
  169.                                     LcdShow(0,0," Left    Right  ");
  170.          }
  171.         NRFSetRXMode();//設(shè)置為接收模式
  172.                                 num++;
  173.                                 if(num>=20) { num=0;   GetDate(); } //開始接受數(shù)
  174.         baojin();
  175.      }

  176. //==================//進入氣壓上限設(shè)置狀態(tài)=====================                        
  177.                 if(yemian==1)  //進入設(shè)置模式
  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, 下載次數(shù): 140)



回復

使用道具 舉報

ID:222834 發(fā)表于 2017-7-30 11:01 | 顯示全部樓層
謝謝樓主分享
回復

使用道具 舉報

ID:228271 發(fā)表于 2017-8-22 13:32 | 顯示全部樓層
謝謝樓主分享 我來看看
回復

使用道具 舉報

ID:109943 發(fā)表于 2017-10-1 12:33 來自觸屏版 | 顯示全部樓層
輪胎胎壓多少?傳感器量程多少?那個是大氣壓傳感器,傳感器不防水不防塵也不抗震,做胎壓監(jiān)測,原理可行實際應用真心不行
回復

使用道具 舉報

ID:381252 發(fā)表于 2018-8-11 21:50 來自觸屏版 | 顯示全部樓層
能否顯示實時檢測到的氣壓大小呢?
回復

使用道具 舉報

ID:225895 發(fā)表于 2019-4-19 13:58 | 顯示全部樓層
仿真圖怎么沒有
回復

使用道具 舉報

ID:225895 發(fā)表于 2019-4-19 14:02 | 顯示全部樓層
仿真或者原理圖沒有
回復

使用道具 舉報

8#
無效樓層,該帖已經(jīng)被刪除
ID:975054 發(fā)表于 2021-11-21 22:32 | 顯示全部樓層
關(guān)鍵是省電、可靠性。謝謝分享!!!剛搞清楚,我用的是STC8 硬件I2C+BMP280方案,暫時只需要氣壓讀數(shù)。不知道你具體用的什么MCU? 軟硬件I2C又不同,具體細節(jié)太多。。。。

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表