我现在在做一个基于51单片机的TPMS,传感器用BMP180,射频用NRF24K01,显示屏用1602,现在我已经可以显示压强了,现在分享给大家不过温度不知道怎么弄了,不懂怎么改程序了.
单片机源程序如下:
- #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, 下载次数: 138)
|