功能介绍:
采用51单片机作为主控单片机,通过采集传感器的胎压和DS18b20的温度,显示到LCD1602上面,并且可以通过按键设置温度和压力的阈值,超过此值蜂鸣器进行报警,可以及时的提醒驾驶员胎压或者温度异常,程序采用keil编写,并且有中文注释,新手容易看懂,仿真采用Proteus,全套仿真资料齐全:文末有资料分享:
225-基于51单片机汽车胎压监测报警系统(程序+仿真+原理图+元件清单)
程序部分展示,有中文注释,新手容易看懂
#define uchar unsigned char
#define uint unsigned int
sbit k1=P3^0;//阀值设置
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;
sbit beep=P3^7;//蜂鸣器
uchar wendu[]="wen:25 C 40 C";//温度显示数组
uchar pasca[]="pas:100kP 000kP";//压力显示数组
uchar warn=0; //蜂鸣器开关
uint k=0,T,Pr;
uint T_lim=40,Pr_lim=240;//报警值
//主函数
void main()
{
wendu[6]=0xdf;
wendu[14]=0xdf;
Init_1602();//LCD初始化
TMOD=0x01;//定时器0初始化
TH0=0xfc;
TL0=0x18;
ET0=1;
EA=1;
TR0=1;
while(1)
{
/**********************************************/
if((T>T_lim)||(Pr>Pr_lim)) //判断报警
warn=1;
else
warn=0;
/**********************************************/
if(!k1)
{
if(T_lim<99)
T_lim++;
while(!k1);
}
if(!k2)
{
if(T_lim>0)
T_lim--;
while(!k2);
}
if(!k3)
{
if(Pr_lim<999)
Pr_lim++;
while(!k3);
}
if(!k4)
{
if(Pr_lim>0)
Pr_lim--;
while(!k4);
}
}
}
void time0() interrupt 1
{
if(warn) //响铃
beep=!beep;
if(k<100)
k++;
else
{
k=0;
T=Ds18b20ReadTemp();//读取当前温度
Pr=ADC()*3;//读取压力值
//显示计算,把结果计算到显示数组用以显示
wendu[12]=T_lim/10+0x30;
wendu[13]=T_lim%10+0x30;//温度个位
pasca[11]=Pr_lim/100+0x30;
pasca[12]=Pr_lim%100/10+0x30;//压力个位
pasca[13]=Pr_lim%10+0x30;//压力小数位
//阀值计算
wendu[4]=T/10+0x30;
wendu[5]=T%10+0x30;//温度个位
pasca[4]=Pr/100+0x30;
pasca[5]=Pr%100/10+0x30;//压力个位
pasca[6]=Pr%10+0x30;//压力小数位