206 基于51单片机PM2.5空气质量检测仪设计

完整版 电路图和程序代码 下载地址

https://pan.baidu.com/s/168AVExFGKe1u35E-ocjZYg?pwd=8888

部分代码展示

void main()
{
	uint PM_AD_buf=0;
	uint PM_AD_dat=0;
	uint AD_dat1=0;
	float PM_js=0.0;
	bit flag1=0	;
	time_init();  	//定时器初始化
	init_1602();	//lcd1602初始化
	
	while(1)
	{
		
		flag_300ms ++;
		if(flag_300ms >= 300)
		{
			flag_300ms = 0;

				PM25_void();
				write_sfm_pm(1,6,pm) ;			   //显示PM
			
			  write_sfm_pm(2,2,U8T_data_H);
			  write_sfm_pm(2,11,U8RH_data_H);

		}

	}
}

/*************定时器0初始化程序***************/
void time_init()	  
{
	EA   = 1;	 	  //开总中断
	TMOD = 0X02;	  //定时器0、定时器1工作方式1
	TH0=216;	//每40us进一次中断
	TL0=216;
	ET0  = 1;		  //开定时器0中断 
	TR0  = 0;		  //允许定时器0定时
}

/*************定时器0中断服务程序***************/
 void time0_int() interrupt 1		 //定时中断函数	 每40us进一次中断 
{  									
    time_num1++;				   	    //定时计数变量+1
	if(time_num1==8)
	{
		GP2Y_LED=0;					//输出低电平,驱动传感器
	}
	else if(time_num1>250)			//10MS后计数器清零,关闭定时器
	{
		time_num1=0;
		TR0=0;
  }	

}

/****************PM2.5采集函数********************/	   
void PM25_void()
{
	uint PM_AD_buf=0;
	uint PM_AD_dat=0;
	uint AD_dat1=0;
	float PM_js=0.0;
	bit flag1=0	;
	GP2Y_LED = 1;
	TR0=1; 							   //开启中断
 	while(1)
	{
		if(time_num1>5)				//大约
		break;
	}
	AD_dat1 = ad0832read(1,0);	 //模数转换
	PM_AD_dat=AD_dat1; 
	PM_AD_dat=PM_AD_dat*8+AD_dat1;
	PM_AD_dat/=9;							   //模数转换后计算平均值
	PM_js=((float)(PM_AD_dat/51.2+0.01))*172-90;//计算PM2.5的值
	if(PM_js < 0)
		PM_js = 0;
	PM_dat=(uint)(PM_js);
	b=PM_dat;
	if(b>=999) b=99;				  //数据修正
	pm = b;
}

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值