标题:
单片机BMP180无线胎压监测tpms系统设计源码
[打印本页]
作者:
heitian
时间:
2017-7-30 02:12
标题:
单片机BMP180无线胎压监测tpms系统设计源码
我现在在做一个基于51单片机的TPMS,传感器用BMP180,射频用NRF24K01,显示屏用1602,现在我已经可以显示压强了,现在分享给大家不过温度不知道怎么弄了,不懂怎么改程序了.
0.png
(42.58 KB, 下载次数: 80)
下载附件
2017-7-30 02:11 上传
单片机源程序如下:
#include"reg52.h" //头文件
#include"Allhead.h"
#include <intrins.h>
#include "eeprom52.h"
sbit K1 = P3^2; //菜单
sbit K2 = P3^3; //加
sbit K3 = P3^4; //减
sbit Buzzer= P1^7; //控制端
unchar yemian=0;
unchar num=0;
unchar flag=0,a,b,c; //报警伐值
unchar SJqiya1,SJqiya2;//实际中所测的气压
unchar gaoya,diya; //gaoya代表气压上限,diya代表气压下限。
unchar lcdgaoya[5],lcddiya[5];
/******************把数据保存到单片机内部eeprom中******************/
void write_eeprom()
{
SectorErase(0x2000);
byte_write(0x2001, gaoya);
byte_write(0x2002, diya);
byte_write(0x2060, a_a);
}
/******************把数据从单片机内部eeprom中读出来*****************/
void read_eeprom()
{
gaoya = byte_read(0x2001);
diya = byte_read(0x2002);
a_a = byte_read(0x2060);
}
/**************开机自检eeprom初始化*****************/
void init_eeprom()
{
read_eeprom(); //先读
if(a_a != 2) //新的单片机初始单片机内问eeprom
{
gaoya = 98;
diya= 90;
a_a = 2;
write_eeprom();
}
}
void gaoyachuli() //气压显示 上限
{
lcdgaoya[0]=gaoya/100+'0';
lcdgaoya[1]=gaoya%100/10+'0';
lcdgaoya[2]=gaoya%100%10+'0';
}
void diyachuli() //气压显示 下限
{
lcddiya[0]=diya/100+'0';
lcddiya[1]=diya%100/10+'0';
lcddiya[2]=diya%100%10+'0';
}
void baojin() //报警装置
{
a=RevTempDate0[3]-48;
b=RevTempDate0[4]-48;
c=RevTempDate0[5]-48;
SJqiya1=a*100+b*10+c; //所测的实际气压1
a=RevTempDate1[3]-48;
b=RevTempDate1[4]-48;
c=RevTempDate1[5]-48;
SJqiya2=a*100+b*10+c; //所测的实际气压2
if( SJqiya1>=gaoya || SJqiya1<diya || SJqiya2>=gaoya || SJqiya2<diya )
{
Buzzer=0; // 报警
}
if( SJqiya1>=diya && SJqiya1<gaoya && SJqiya2>=diya && SJqiya2<gaoya)
{
Buzzer=1; //停止报警
}
}
void key() //按键程序 选择菜单模式
{
if(!K1)
{
LCDDelay(20);
if(!K1)
{
while(!K1)
;
yemian++;
if(yemian>=3) { yemian=0; }
}
}
}
shezhi() //对里面的数值进行修改
{
if(!K2)
{
NRFDelay(120);
if(!K2)
{
// while(!K2)
;
if(yemian==1)
{
gaoya+=1;
if(gaoya>250) { gaoya=250; }
write_eeprom(); //保存数据
gaoyachuli(); //
LcdShow(1,4,lcdgaoya);
}
if(yemian==2)
{
diya+=1;
if(diya>250) { diya=250; }
write_eeprom(); //保存数据
diyachuli(); //显示
LcdShow(1,4,lcddiya);
}
}
}
if(!K3)
{
NRFDelay(120);
if(!K3)
{
// while(!K3)
;
if(yemian==1)
{
gaoya-=1;
if(gaoya<=1) { gaoya=1; }
write_eeprom(); //保存数据
gaoyachuli(); //
LcdShow(1,4,lcdgaoya);
}
if(yemian==2)
{
diya-=1;
if(diya<=1) { diya=1; }
write_eeprom(); //保存数据
diyachuli(); //显示
LcdShow(1,4,lcddiya);
}
}
}
}
/************************主函数********************/
void main()
{
LCDInt();
LcdShow(0,2," Welcome ");
NRFDelay(1000);//短暂延时
LcdShow(1,2," (Kpa) ");
NRFDelay(2000);//短暂延时
LCDInt(); //初始化
init_eeprom(); //读eeprom数据
NRF24L01Int(); //初始化
while(1)
{
key(); //按键扫描
//==================//进入工作状态=====================
if(yemian==0)
{
if(flag==0)
{
flag=1;
LCDInt();
LcdShow(0,0," Left Right ");
}
NRFSetRXMode();//设置为接收模式
num++;
if(num>=20) { num=0; GetDate(); } //开始接受数
baojin();
}
//==================//进入气压上限设置状态=====================
if(yemian==1) //进入设置模式
{
if(flag==1)
{
flag=2;
Buzzer=1;
LCDInt();
LcdShow(0,3," Pressure_H ");
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
基于51单片机的TPMS.zip
(400.91 KB, 下载次数: 140)
2017-7-30 02:10 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
danpianji80c51
时间:
2017-7-30 11:01
谢谢楼主分享
作者:
ttrroo
时间:
2017-8-22 13:32
谢谢楼主分享 我来看看
作者:
村风
时间:
2017-10-1 12:33
轮胎胎压多少?传感器量程多少?那个是大气压传感器,传感器不防水不防尘也不抗震,做胎压监测,原理可行实际应用真心不行
作者:
112014
时间:
2018-8-11 21:50
能否显示实时检测到的气压大小呢?
作者:
wangjian123
时间:
2019-4-19 13:58
仿真图怎么没有
作者:
wangjian123
时间:
2019-4-19 14:02
仿真或者原理图没有
作者:
ax6808
时间:
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
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1