我現(xiàn)在在做一個基于51單片機的TPMS,傳感器用BMP180,射頻用NRF24K01,顯示屏用1602,現(xiàn)在我已經(jīng)可以顯示壓強了,現(xiàn)在分享給大家不過溫度不知道怎么弄了,不懂怎么改程序了.
單片機源程序如下:
- #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];
- /******************把數(shù)據(jù)保存到單片機內(nèi)部eeprom中******************/
- void write_eeprom()
- {
- SectorErase(0x2000);
- byte_write(0x2001, gaoya);
- byte_write(0x2002, diya);
- byte_write(0x2060, a_a);
- }
- /******************把數(shù)據(jù)從單片機內(nèi)部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) //新的單片機初始單片機內(nèi)問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() //對里面的數(shù)值進行修改
- {
- if(!K2)
- {
- NRFDelay(120);
- if(!K2)
- {
- // while(!K2)
- ;
-
- if(yemian==1)
- {
- gaoya+=1;
- if(gaoya>250) { gaoya=250; }
- write_eeprom(); //保存數(shù)據(jù)
- gaoyachuli(); //
- LcdShow(1,4,lcdgaoya);
- }
- if(yemian==2)
- {
- diya+=1;
- if(diya>250) { diya=250; }
- write_eeprom(); //保存數(shù)據(jù)
- 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(); //保存數(shù)據(jù)
- gaoyachuli(); //
- LcdShow(1,4,lcdgaoya);
- }
-
- if(yemian==2)
- {
- diya-=1;
- if(diya<=1) { diya=1; }
- write_eeprom(); //保存數(shù)據(jù)
- diyachuli(); //顯示
- LcdShow(1,4,lcddiya);
- }
- }
- }
- }
- /************************主函數(shù)********************/
- void main()
- {
- LCDInt();
- LcdShow(0,2," Welcome ");
- NRFDelay(1000);//短暫延時
- LcdShow(1,2," (Kpa) ");
- NRFDelay(2000);//短暫延時
- LCDInt(); //初始化
- init_eeprom(); //讀eeprom數(shù)據(jù)
- NRF24L01Int(); //初始化
- while(1)
- {
- key(); //按鍵掃描
- //==================//進入工作狀態(tài)=====================
- if(yemian==0)
- {
- if(flag==0)
- {
- flag=1;
- LCDInt();
- LcdShow(0,0," Left Right ");
- }
- NRFSetRXMode();//設(shè)置為接收模式
- num++;
- if(num>=20) { num=0; GetDate(); } //開始接受數(shù)
- baojin();
- }
- //==================//進入氣壓上限設(shè)置狀態(tài)=====================
- if(yemian==1) //進入設(shè)置模式
- {
-
- if(flag==1)
- {
- flag=2;
- Buzzer=1;
- LCDInt();
- LcdShow(0,3," Pressure_H ");
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
基于51單片機的TPMS.zip
(400.91 KB, 下載次數(shù): 140)
2017-7-30 02:10 上傳
點擊文件名下載附件
|