基于51单片机智能家居空气质量监控—温湿度PM2.5

2024-04-13 18:20

本文主要是介绍基于51单片机智能家居空气质量监控—温湿度PM2.5,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于51单片机智能家居空气质量监控

(仿真+程序+原理图+PCB+设计报告)

功能介绍

具体功能:

1.检测温度、湿度、PM2.5浓度,并在LCD1602实时显示;

2.可以使用按键设置温湿度上下限、PM2.5浓度上限值。

3.超过设定范围进行对应的声光报警。

#include <reg52.h>
/***΢ÐŹ«ÖںţºÄ¾×Óµ¥Æ¬»ú****/
#include <intrins.h>#define uchar unsigned char		// ÒÔºóunsigned char¾Í¿ÉÒÔÓÃuchar´úÌæ
#define uint  unsigned int		// ÒÔºóunsigned int ¾Í¿ÉÒÔÓÃuint ´úÌæsfr ISP_DATA  = 0xe2;			// Êý¾Ý¼Ä´æÆ÷
sfr ISP_ADDRH = 0xe3;			// µØÖ·¼Ä´æÆ÷¸ß°Ëλ
sfr ISP_ADDRL = 0xe4;			// µØÖ·¼Ä´æÆ÷µÍ°Ëλ
sfr ISP_CMD   = 0xe5;			// ÃüÁî¼Ä´æÆ÷
sfr ISP_TRIG  = 0xe6;			// ÃüÁî´¥·¢¼Ä´æÆ÷
sfr ISP_CONTR = 0xe7;			// ÃüÁî¼Ä´æÆ÷sbit LcdRs_P   = P1^2;    // 1602Òº¾§µÄRS¹Ü½Å       
sbit LcdRw_P   = P1^3;    // 1602Òº¾§µÄRW¹Ü½Å 
sbit LcdEn_P   = P1^4;    // 1602Òº¾§µÄEN¹Ü½Å
sbit KeySet_P  = P3^2;		// ¡°ÉèÖá±°´¼üµÄ¹Ü½Å
sbit KeyDown_P = P3^3;		// ¡°¼õ¡±°´¼üµÄ¹Ü½Å
sbit KeyUp_P   = P3^4;		// ¡°¼Ó¡±°´¼üµÄ¹Ü½Å 
sbit Buzzer_P  = P1^5;		// ·äÃùÆ÷
sbit DHT11_P   = P1^1;	 	// ÎÂʪ¶È´«¸ÐÆ÷DHT11Êý¾Ý½ÓÈë
sbit LedTH_P   = P2^0;		// ζȹý¸ß±¨¾¯Ö¸Ê¾µÆ
sbit LedTL_P   = P2^1;		// ζȹýµÍ±¨¾¯Ö¸Ê¾µÆ
sbit LedHH_P   = P2^2;		// ʪ¶È¹ý¸ß±¨¾¯Ö¸Ê¾µÆ
sbit LedHL_P   = P2^3;		// ʪ¶È¹ýµÍ±¨¾¯Ö¸Ê¾µÆ
sbit LedPM_P   = P2^4;		// PM2.5¹ý¸ß±¨¾¯Ö¸Ê¾µÆuchar temp;								// ±£´æζÈ
uchar humi;								// ±£´æʪ¶È
uint  pm;									// ±£´æPM2.5uchar gIndex=0;						// ´®¿Ú½ÓÊÕË÷Òý
uint  Value[20]={0};			// ´®¿ÚÊý¾Ý»º´æÇøuchar AlarmTL;						// ζÈÏÂÏÞ±¨¾¯Öµ
uchar AlarmTH;						// ζÈÉÏÏÞ±¨¾¯Öµ
uchar AlarmHL; 						// ʪ¶ÈÏÂÏÞ±¨¾¯Öµ
uchar AlarmHH;						// ʪ¶ÈÉÏÏÞ±¨¾¯Öµ
uint  AlarmPM;						// PM2.5±¨¾¯Öµ/*********************************************************/
// µ¥Æ¬»úÄÚ²¿EEPROM²»Ê¹ÄÜ
/*********************************************************/
void ISP_Disable()
{ISP_CONTR = 0;ISP_ADDRH = 0;ISP_ADDRL = 0;
}/*********************************************************/
// ´Óµ¥Æ¬»úÄÚ²¿EEPROM¶ÁÒ»¸ö×Ö½Ú£¬´Ó0x2000µØÖ·¿ªÊ¼
/*********************************************************/
unsigned char EEPROM_Read(unsigned int add)
{ISP_DATA  = 0x00;ISP_CONTR = 0x83;ISP_CMD   = 0x01;ISP_ADDRH = (unsigned char)(add>>8);ISP_ADDRL = (unsigned char)(add&0xff);// ¶ÔSTC89C51ϵÁÐÀ´Ëµ£¬Ã¿´ÎҪдÈë0x46£¬ÔÙдÈë0xB9,ISP/IAP²Å»áÉúЧISP_TRIG  = 0x46;	   ISP_TRIG  = 0xB9;_nop_();ISP_Disable();return (ISP_DATA);
}/*********************************************************/
// Íùµ¥Æ¬»úÄÚ²¿EEPROMдһ¸ö×Ö½Ú£¬´Ó0x2000µØÖ·¿ªÊ¼
/*********************************************************/
void EEPROM_Write(unsigned int add,unsigned char ch)
{ISP_CONTR = 0x83;ISP_CMD   = 0x02;ISP_ADDRH = (unsigned char)(add>>8);ISP_ADDRL = (unsigned char)(add&0xff);ISP_DATA  = ch;ISP_TRIG  = 0x46;ISP_TRIG  = 0xB9;_nop_();ISP_Disable();
}/*********************************************************/
// ²Á³ýµ¥Æ¬»úÄÚ²¿EEPROMµÄÒ»¸öÉÈÇø
// д8¸öÉÈÇøÖÐËæ±ãÒ»¸öµÄµØÖ·£¬±ã²Á³ý¸ÃÉÈÇø£¬Ð´ÈëÇ°ÒªÏȲÁ³ý
/*********************************************************/
void Sector_Erase(unsigned int add)	  
{ISP_CONTR = 0x83;ISP_CMD   = 0x03;ISP_ADDRH = (unsigned char)(add>>8);ISP_ADDRL = (unsigned char)(add&0xff);ISP_TRIG  = 0x46;ISP_TRIG  = 0xB9;_nop_();ISP_Disable();
}/*********************************************************/
// ºÁÃ뼶µÄÑÓʱº¯Êý£¬timeÊÇÒªÑÓʱµÄºÁÃëÊý
/*********************************************************/
void DelayMs(uint time)
{uint i,j;for(i=0;i<time;i++)for(j=0;j<112;j++);
}/*********************************************************/
// 10us¼¶ÑÓʱ³ÌÐò
/*********************************************************/
void Delay10us()
{_nop_();	// Ö´ÐÐÒ»ÌõÖ¸ÁÑÓʱ1΢Ãë_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}/*********************************************************/
// ¶ÁÈ¡DHT11µ¥×ÜÏßÉϵÄÒ»¸ö×Ö½Ú
/*********************************************************/
uchar DhtReadByte(void)
{   bit bit_i; uchar j;uchar dat=0;for(j=0;j<8;j++)    {while(!DHT11_P);	// µÈ´ýµÍµçƽ½áÊø	Delay10us();			// ÑÓʱDelay10us();Delay10us();if(DHT11_P==1)		// ÅжÏÊý¾ÝÏßÊǸߵçƽ»¹Êǵ͵çƽ{bit_i=1; while(DHT11_P);} else{bit_i=0;}dat<<=1;		   		// ½«¸ÃλÒÆλ±£´æµ½dat±äÁ¿ÖÐdat|=bit_i;    }return(dat);  
}/*********************************************************/
// ¶ÁÈ¡DHT11µÄÒ»Ö¡Êý¾Ý£¬Êª¸ß¡¢ÊªµÍ(0)¡¢Î¸ߡ¢ÎµÍ(0)¡¢Ð£ÑéÂë
/*********************************************************/
void ReadDhtData()
{    	 uchar HumiHig;		// ʪ¶È¸ß¼ì²âÖµuchar HumiLow;		// ʪ¶ÈµÍ¼ì²âÖµ uchar TemHig;			// ζȸ߼ì²âÖµuchar TemLow;			// ζȵͼì²âÖµuchar check;			// УÑé×Ö½Ú DHT11_P=0;				// Ö÷»úÀ­µÍDelayMs(20);			// ±£³Ö20ºÁÃëDHT11_P=1;				// DATA×ÜÏßÓÉÉÏÀ­µç×èÀ­¸ßDelay10us();	 		// ÑÓʱµÈ´ý30usDelay10us();Delay10us();while(!DHT11_P);	// µÈ´ýDHTµÄµÍµçƽ½áÊøwhile(DHT11_P);		// µÈ´ýDHTµÄ¸ßµçƽ½áÊø//½øÈëÊý¾Ý½ÓÊÕ״̬HumiHig = DhtReadByte(); 	// ʪ¶È¸ß8λHumiLow = DhtReadByte(); 	// ʪ¶ÈµÍ8Ϊ£¬×ÜΪ0TemHig  = DhtReadByte(); 	// ζȸß8λ TemLow  = DhtReadByte(); 	// ζȵÍ8Ϊ£¬×ÜΪ0 check   = DhtReadByte();	// 8λУÑéÂ룬ÆäÖµµÈÓÚ¶Á³öµÄËĸö×Ö½ÚÏà¼ÓÖ®ºÍµÄµÍ8λDHT11_P=1;				// À­¸ß×ÜÏßif(check==HumiHig + HumiLow + TemHig + TemLow) 		// Èç¹ûÊÕµ½µÄÊý¾ÝÎÞÎó{temp=TemHig; 			// ½«Î¶ȵļì²â½á¹û¸³Öµ¸øÈ«¾Ö±äÁ¿temphumi=HumiHig;			// ½«Êª¶ÈµÄ¼ì²â½á¹û¸³Öµ¸øÈ«¾Ö±äÁ¿humi}
}/*********************************************************/
// 1602Òº¾§Ð´ÃüÁÊý£¬cmd¾ÍÊÇҪдÈëµÄÃüÁî
/*********************************************************/
void LcdWriteCmd(uchar cmd)
{ LcdRs_P = 0;LcdRw_P = 0;LcdEn_P = 0;P0=cmd;DelayMs(2);LcdEn_P = 1;    DelayMs(2);LcdEn_P = 0;	
}/*********************************************************/
// 1602Òº¾§Ð´Êý¾Ýº¯Êý£¬dat¾ÍÊÇҪдÈëµÄÊý¾Ý
/*********************************************************/
void LcdWriteData(uchar dat)
{LcdRs_P = 1; LcdRw_P = 0;LcdEn_P = 0;P0=dat;DelayMs(2);LcdEn_P = 1;    DelayMs(2);LcdEn_P = 0;
}/*********************************************************/
// 1602Òº¾§³õʼ»¯º¯Êý
/*********************************************************/
void LcdInit()
{LcdWriteCmd(0x38);        // 16*2ÏÔʾ£¬5*7µãÕó£¬8λÊý¾Ý¿ÚLcdWriteCmd(0x0C);        // ¿ªÏÔʾ£¬²»ÏÔʾ¹â±êLcdWriteCmd(0x06);        // µØÖ·¼Ó1£¬µ±Ð´ÈëÊý¾Ýºó¹â±êÓÒÒÆLcdWriteCmd(0x01);        // ÇåÆÁ
}/*********************************************************/
// Òº¾§¹â±ê¶¨Î»º¯Êý
/*********************************************************/
void LcdGotoXY(uchar line,uchar column)
{// µÚÒ»ÐÐif(line==0)        LcdWriteCmd(0x80+column); // µÚ¶þÐÐif(line==1)        LcdWriteCmd(0x80+0x40+column); 
}/*********************************************************/
// Òº¾§Êä³öÊý×Ö£¨PM2.5µÄ£©
/*********************************************************/
void LcdPrintNum1(uint num)
{LcdWriteData(num/100+48);					// °ÙλLcdWriteData(num%100/10+48);			// ʮλLcdWriteData(num%10+48); 					// ¸öλ
}/*********************************************************/
// Òº¾§Êä³öÊý×Ö£¨ÎÂʪ¶ÈµÄ£©
/*********************************************************/
void LcdPrintNum2(uchar num)
{LcdWriteData(num/10+48);					// ʮλLcdWriteData(num%10+48); 					// ¸öλ
}/*********************************************************/
// Òº¾§Êä³ö×Ö·û´®º¯Êý
/*********************************************************/
void LcdPrintStr(uchar *str)
{while(*str!='\0')LcdWriteData(*str++);
}/*********************************************************/
// Òº¾§ÏÔʾÄÚÈݳõʼ»¯
/*********************************************************/
void LcdShowInit()
{LcdGotoXY(0,0);										// Òº¾§¹â±ê¶¨Î»µ½µÚ0ÐеÚ0ÁÐLcdPrintStr(" PM2.5:   ug/m3 ");	// ÏÔʾÄÚÈÝLcdGotoXY(1,0);										// Òº¾§¹â±ê¶¨Î»µ½µÚ1ÐеÚ0ÁÐLcdPrintStr("T:   C   H:  %RH");	// ÏÔʾÄÚÈÝLcdGotoXY(1,4);										// ζȵ¥Î»ÉãÊ϶ÈÉÏÃæµÄԲȦ·ûºÅLcdWriteData(0xdf);	
}/*********************************************************/
// ´®¿Ú³õʼ»¯
/*********************************************************/
void UartInit()
{SCON = 0x50;		// ÅäÖô®¿Ú¼Ä´æÆ÷TMOD = 0x20;		// ÅäÖö¨Ê±Æ÷¼Ä´æÆ÷TH1  = 0xf4;		// ¼ÆË㲨ÌØÂʵÄֵΪ2400TL1  = 0xf4;		// ¼ÆË㲨ÌØÂʵÄֵΪ2400EA   = 1;				// ´ò¿ª×ÜÖжÏES   = 1;				// ´ò¿ª´®¿ÚÖжÏTR1  = 1;				// Æô¶¯¶¨Ê±Æ÷
}/*********************************************************/
// °´¼üɨÃè
/*********************************************************/
void KeyScanf()
{if(KeySet_P==0)		// ÅжÏÉèÖð´¼üÊÇ·ñ±»°´ÏÂ{EA=0;/*½«Òº¾§ÏÔʾ¸ÄΪÉèÖÃζȵÄÒ³Ãæ****************************************************/LcdWriteCmd(0x01);				  	LcdGotoXY(0,0);LcdPrintStr("Temperature Set ");LcdGotoXY(1,0);LcdPrintStr("      -    C    ");LcdGotoXY(1,10);	 					LcdWriteData(0xdf);			LcdGotoXY(1,4);	 					// ÔÚÒº¾§ÉÏÌî³äζȵÄÏÂÏÞÖµ	LcdPrintNum2(AlarmTL);	LcdGotoXY(1,7);	 					// ÔÚÒº¾§ÉÏÌî³äζȵÄÉÏÏÞÖµLcdPrintNum2(AlarmTH);LcdGotoXY(1,5);	 					// ¹â±ê¶¨Î»µ½µÚ1ÐеÚ5ÁÐLcdWriteCmd(0x0f);				// ¹â±êÉÁ˸DelayMs(10);	  					// È¥³ý°´¼ü°´ÏµĶ¶¶¯while(!KeySet_P);	 				// µÈ´ý°´¼üÊÍ·ÅDelayMs(10);					  	// È¥³ý°´¼üËÉ¿ªµÄ¶¶¶¯/*ÉèÖÃζȵÄÏÂÏÞÖµ****************************************************************/while(KeySet_P)						// ¡°ÉèÖüü¡±Ã»Óб»°´Ï£¬ÔòÒ»Ö±´¦ÓÚζÈÏÂÏÞµÄÉèÖÃ{if(KeyDown_P==0)				// ÅÐ¶Ï ¡°¼õ°´¼ü¡° ÊÇ·ñ±»°´ÏÂ		{if(AlarmTL>0)					// Ö»Óе±Î¶ÈÏÂÏÞÖµ´óÓÚ0ʱ£¬²ÅÄܼõ1AlarmTL--;LcdGotoXY(1,4);	 			// ÖØÐÂË¢ÐÂÏÔʾ¸ü¸ÄºóµÄζÈÏÂÏÞÖµ	LcdPrintNum2(AlarmTL);  		LcdGotoXY(1,5);				// ÖØж¨Î»ÉÁ˸µÄ¹â±êλÖÃDelayMs(350);					// ÑÓʱ}if(KeyUp_P==0)		  		// ÅÐ¶Ï ¡°¼Ó°´¼ü¡° ÊÇ·ñ±»°´ÏÂ{if(AlarmTL<99)	   		// Ö»Óе±Î¶ÈÏÂÏÞֵСÓÚ99ʱ£¬²ÅÄܼÓ1AlarmTL++;LcdGotoXY(1,4);	 	 		// ÖØÐÂË¢ÐÂÏÔʾ¸ü¸ÄºóµÄζÈÏÂÏÞÖµLcdPrintNum2(AlarmTL);LcdGotoXY(1,5);				// ÖØж¨Î»ÉÁ˸µÄ¹â±êλÖÃDelayMs(350);					// ÑÓʱ}	}LcdGotoXY(1,8);DelayMs(10);	  					// È¥³ý°´¼ü°´ÏµĶ¶¶¯while(!KeySet_P);	 				// µÈ´ý°´¼üÊÍ·ÅDelayMs(10);					  	// È¥³ý°´¼üËÉ¿ªµÄ¶¶¶¯/*ÉèÖÃζȵÄÉÏÏÞÖµ****************************************************************/	while(KeySet_P)	  				// ¡°ÉèÖüü¡±Ã»Óб»°´Ï£¬ÔòÒ»Ö±´¦ÓÚζÈÉÏÏÞµÄÉèÖÃ{if(KeyDown_P==0)				// ÅÐ¶Ï ¡°¼õ°´¼ü¡° ÊÇ·ñ±»°´ÏÂ{if(AlarmTH>0)  				// Ö»Óе±Î¶ÈÉÏÏÞÖµ´óÓÚ0ʱ£¬²ÅÄܼõ1			AlarmTH--;LcdGotoXY(1,7);	 	  	// ÖØÐÂË¢ÐÂÏÔʾ¸ü¸ÄºóµÄζÈÉÏÏÞÖµLcdPrintNum2(AlarmTH);LcdGotoXY(1,8);				// ÖØж¨Î»ÉÁ˸µÄ¹â±êλÖÃDelayMs(350);					// ÑÓʱ}if(KeyUp_P==0)			   	// ÅÐ¶Ï ¡°¼Ó°´¼ü¡° ÊÇ·ñ±»°´ÏÂ{if(AlarmTH<99)	 			// Ö»Óе±Î¶ÈÉÏÏÞֵСÓÚ99ʱ£¬²ÅÄܼÓ1AlarmTH++;LcdGotoXY(1,7);				// ÖØÐÂË¢ÐÂÏÔʾ¸ü¸ÄºóµÄζÈÉÏÏÞÖµ 	LcdPrintNum2(AlarmTH);LcdGotoXY(1,8);				// ÖØж¨Î»ÉÁ˸µÄ¹â±êλÖÃDelayMs(350);					// ÑÓʱ}								 }/*½«Òº¾§ÏÔʾ¸ÄΪÉèÖÃʪ¶ÈµÄÒ³Ãæ****************************************************/LcdWriteCmd(0x01);				  	LcdGotoXY(0,0);LcdPrintStr("  Humidity Set  ");LcdGotoXY(1,0);LcdPrintStr("      -   %RH   ");		LcdGotoXY(1,4);	 					// ÔÚÒº¾§ÉÏÌî³äʪ¶ÈµÄÏÂÏÞÖµ	LcdPrintNum2(AlarmHL);	LcdGotoXY(1,7);	 					// ÔÚÒº¾§ÉÏÌî³äʪ¶ÈµÄÉÏÏÞÖµLcdPrintNum2(AlarmHH);LcdGotoXY(1,5);	 					// ¹â±ê¶¨Î»µ½µÚ1ÐеÚ5ÁÐDelayMs(10);	  					// È¥³ý°´¼ü°´ÏµĶ¶¶¯while(!KeySet_P);	 				// µÈ´ý°´¼üÊÍ·ÅDelayMs(10);/*ÉèÖÃʪ¶ÈµÄÏÂÏÞÖµ****************************************************************/while(KeySet_P)				 		// ¡°ÉèÖüü¡±Ã»Óб»°´Ï£¬ÔòÒ»Ö±´¦ÓÚʪ¶ÈÏÂÏÞµÄÉèÖÃ{if(KeyDown_P==0)				// ÅÐ¶Ï ¡°¼õ°´¼ü¡° ÊÇ·ñ±»°´ÏÂ{if(AlarmHL>0)	 				// Ö»Óе±Êª¶ÈÏÂÏÞÖµ´óÓÚ0ʱ£¬²ÅÄܼõ1AlarmHL--;LcdGotoXY(1,4);				// ÖØÐÂË¢ÐÂÏÔʾ¸ü¸ÄºóµÄʪ¶ÈÏÂÏÞÖµ 	LcdPrintNum2(AlarmHL);LcdGotoXY(1,5);				// ÖØж¨Î»ÉÁ˸µÄ¹â±êλÖÃDelayMs(350);}if(KeyUp_P==0)			  	// ÅÐ¶Ï ¡°¼Ó°´¼ü¡° ÊÇ·ñ±»°´ÏÂ{if(AlarmHL<99)	  		// Ö»Óе±Êª¶ÈÏÂÏÞֵСÓÚ99ʱ£¬²ÅÄܼÓ1AlarmHL++;LcdGotoXY(1,4);	 		 	// ÖØÐÂË¢ÐÂÏÔʾ¸ü¸ÄºóµÄʪ¶ÈÏÂÏÞÖµLcdPrintNum2(AlarmHL);LcdGotoXY(1,5);	  		// ÖØж¨Î»ÉÁ˸µÄ¹â±êλÖÃDelayMs(350);					// ÑÓʱ}	}LcdGotoXY(1,8);DelayMs(10);	  					// È¥³ý°´¼ü°´ÏµĶ¶¶¯while(!KeySet_P);	 				// µÈ´ý°´¼üÊÍ·ÅDelayMs(10);					  	// È¥³ý°´¼üËÉ¿ªµÄ¶¶¶¯/*ÉèÖÃʪ¶ÈµÄÉÏÏÞÖµ****************************************************************/while(KeySet_P)				   	// ¡°ÉèÖüü¡±Ã»Óб»°´Ï£¬ÔòÒ»Ö±´¦ÓÚʪ¶ÈÉÏÏÞµÄÉèÖÃ{if(KeyDown_P==0)		 		// ÅÐ¶Ï ¡°¼õ°´¼ü¡° ÊÇ·ñ±»°´ÏÂ{if(AlarmHH>0)			  	// Ö»Óе±Êª¶ÈÉÏÏÞÖµ´óÓÚ0ʱ£¬²ÅÄܼõ1AlarmHH--;LcdGotoXY(1,7);	 		 	// ÖØÐÂË¢ÐÂÏÔʾ¸ü¸ÄºóµÄʪ¶ÈÉÏÏÞÖµLcdPrintNum2(AlarmHH);LcdGotoXY(1,8);		   	// ÖØж¨Î»ÉÁ˸µÄ¹â±êλÖÃDelayMs(350);}if(KeyUp_P==0)				 	// ÅÐ¶Ï ¡°¼Ó°´¼ü¡° ÊÇ·ñ±»°´ÏÂ{if(AlarmHH<99)				// Ö»Óе±Êª¶ÈÉÏÏÞֵСÓÚ99ʱ£¬²ÅÄܼÓ1AlarmHH++;LcdGotoXY(1,7);	 			// ÖØÐÂË¢ÐÂÏÔʾ¸ü¸ÄºóµÄʪ¶ÈÉÏÏÞÖµ	LcdPrintNum2(AlarmHH);LcdGotoXY(1,8);	 			// ÖØж¨Î»ÉÁ˸µÄ¹â±êλÖÃDelayMs(350);					// ÑÓʱ}	}/*½«Òº¾§ÏÔʾ¸ÄΪÉèÖÃPM2.5µÄÒ³Ãæ****************************************************/LcdWriteCmd(0x01);				  	// ÉèÖýçÃæµÄÏÔʾ¿ò¼ÜLcdGotoXY(0,0);LcdPrintStr("   PM2.5 Set    ");LcdGotoXY(1,0);LcdPrintStr("        ug/m3   ");LcdGotoXY(1,4);								// ÏÔʾµ±Ç°µÄ±¨¾¯ÖµLcdPrintNum1(AlarmPM);				LcdGotoXY(1,6);	 							// ¹â±ê¶¨Î»µ½µÚ1ÐеÚ6ÁÐDelayMs(10);	  							// È¥³ý°´¼ü°´ÏµĶ¶¶¯while(!KeySet_P);	 						// µÈ´ý°´¼üÊÍ·ÅDelayMs(10);while(KeySet_P)				 				// ¡°ÉèÖüü¡±Ã»Óб»°´Ï£¬ÔòÒ»Ö±´¦ÓÚ¹âÇ¿ÏÂÏÞµÄÉèÖÃ{if(KeyDown_P==0)						// ÅÐ¶Ï ¡°¼õ°´¼ü¡° ÊÇ·ñ±»°´ÏÂ{if(AlarmPM>1)							// Ö»ÓÐgAlarmPM´óÓÚ1²ÅÄܼõ1								AlarmPM--;				LcdGotoXY(1,4);						// Òº¾§¹â±ê¶¨Î»LcdPrintNum1(AlarmPM);		// ˢиıäºóµÄ±¨¾¯ÖµLcdGotoXY(1,6);DelayMs(200);							// ÑÓʱһÏÂ}if(KeyUp_P==0)			  			// ÅÐ¶Ï ¡°¼Ó°´¼ü¡° ÊÇ·ñ±»°´ÏÂ{if(AlarmPM<999)							// Ö»ÓÐgAlarmPMСÓÚ999²ÅÄܼÓ1AlarmPM++;				LcdGotoXY(1,4);						// Òº¾§¹â±ê¶¨Î»LcdPrintNum1(AlarmPM);		// ˢиıäºóµÄ±¨¾¯ÖµLcdGotoXY(1,6);DelayMs(200);							// ÑÓʱһÏÂ}	}/*Íê³ÉÉèÖã¬Í˳öÇ°µÄ´¦Àí**********************************************************/LcdWriteCmd(0x0C);	  						// È¡Ïû¹â±êÉÁ˸LcdShowInit();										// Òº¾§ÏÔʾΪ¼ì²â½çÃæµÄDelayMs(10);	  									// È¥³ý°´¼ü°´ÏµĶ¶¶¯while(!KeySet_P);	 								// µÈ´ý°´¼üÊÍ·ÅDelayMs(10);					  					// È¥³ý°´¼üËÉ¿ªµÄ¶¶¶¯Sector_Erase(0x2000);			 				// ´æ´¢Ö®Ç°±ØÐëÏȲÁ³ýEEPROM_Write(0x2000,AlarmTL);			// °ÑζÈÏÂÏÞ´æÈëµ½EEPROMµÄ0x2000Õâ¸öµØÖ·EEPROM_Write(0x2001,AlarmTH);			// °ÑζÈÉÏÏÞ´æÈëµ½EEPROMµÄ0x2001Õâ¸öµØÖ·EEPROM_Write(0x2002,AlarmHL);			// °Ñʪ¶ÈÏÂÏÞ´æÈëµ½EEPROMµÄ0x2002Õâ¸öµØÖ·EEPROM_Write(0x2003,AlarmHH);			// °Ñʪ¶ÈÉÏÏÞ´æÈëµ½EEPROMµÄ0x2003Õâ¸öµØÖ·EEPROM_Write(0x2004,AlarmPM/100);	// °ÑPM2.5´æÈëµ½EEPROMµÄ0x2004ºÍ0x2005ÕâÁ½¸öµØÖ·EEPROM_Write(0x2005,AlarmPM%100);EA=1;}	
}/*********************************************************/
// ±¨¾¯ÅжÏ
/*********************************************************/
void AlarmJudge(void)
{/*ζÈ*/if(temp>AlarmTH)				// ζÈÊÇ·ñ¹ý¸ß{LedTH_P=0;LedTL_P=1;}else if(temp<AlarmTL)		// ζÈÊÇ·ñ¹ýµÍ{LedTL_P=0;LedTH_P=1;}else										// ζÈÕý³£{LedTH_P=1;LedTL_P=1;}/*ʪ¶È*/if(humi>AlarmHH)	   		// ʪ¶ÈÊÇ·ñ¹ý¸ß{LedHH_P=0;LedHL_P=1;}else if(humi<AlarmHL)		// ʪ¶ÈÊÇ·ñ¹ýµÍ{LedHL_P=0;LedHH_P=1;}else				   					// ʪ¶ÈÕý³£{LedHH_P=1;LedHL_P=1;}/*PM2.5*/if(pm>AlarmPM)LedPM_P=0;elseLedPM_P=1;/*·äÃùÆ÷*/if((LedHH_P==0)||(LedHL_P==0)||(LedTH_P==0)||(LedTL_P==0)||(LedPM_P==0)) 	// ·äÃùÆ÷Åжϣ¬Ö»ÒªÖÁÉÙ1¸ö±¨¾¯µÆÁÁ£¬·äÃùÆ÷¾Í±¨¾¯Buzzer_P=0;else	Buzzer_P=1;
}/*********************************************************/
// ±¨¾¯Öµ³õʼ»¯
/*********************************************************/
void AlarmInit(void)
{AlarmTL=EEPROM_Read(0x2000);	// ´ÓEEPROMµÄ0x2000Õâ¸öµØÖ·¶Áȡζȵı¨¾¯ÏÂÏÞAlarmTH=EEPROM_Read(0x2001);	// ´ÓEEPROMµÄ0x2001Õâ¸öµØÖ·¶Áȡζȵı¨¾¯ÉÏÏÞAlarmHL=EEPROM_Read(0x2002);	// ´ÓEEPROMµÄ0x2002Õâ¸öµØÖ·¶Áȡʪ¶ÈµÄ±¨¾¯ÏÂÏÞ	AlarmHH=EEPROM_Read(0x2003);	// ´ÓEEPROMµÄ0x2003Õâ¸öµØÖ·¶Áȡʪ¶ÈµÄ±¨¾¯ÉÏÏÞAlarmPM=EEPROM_Read(0x2004)*100+EEPROM_Read(0x2005);		// ¶ÁÈ¡PM2.5±¨¾¯Öµif((AlarmTL==0)||(AlarmTL>100))	// Èç¹ûζÈÏÂÏÞ±¨¾¯Öµ¶Á³öÀ´Òì³££¨µÈÓÚ0»ò´óÓÚ100£©£¬ÔòÖØи³ÖµAlarmTL=20;if((AlarmTH==0)||(AlarmTH>100))	// Èç¹ûζÈÉÏÏÞ±¨¾¯Öµ¶Á³öÀ´Òì³££¨µÈÓÚ0»ò´óÓÚ100£©£¬ÔòÖØи³ÖµAlarmTH=35;if((AlarmHL==0)||(AlarmHL>100))	// Èç¹ûζÈÏÂÏÞ±¨¾¯Öµ¶Á³öÀ´Òì³££¨µÈÓÚ0»ò´óÓÚ100£©£¬ÔòÖØи³ÖµAlarmHL=40;if((AlarmHH==0)||(AlarmHH>100))	// Èç¹ûζÈÉÏÏÞ±¨¾¯Öµ¶Á³öÀ´Òì³££¨µÈÓÚ0»ò´óÓÚ100£©£¬ÔòÖØи³ÖµAlarmHH=85;if((AlarmPM==0)||(AlarmPM>1300))	// Èç¹û¶ÁÈ¡µ½µÄ±¨¾¯ÖµÒì³££¬ÔòÖØи³ÖµAlarmPM=200;
}/*********************************************************/
// Ö÷º¯Êý
/*********************************************************/

硬件设计

使用元器件:

单片机:STC89C52;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

单片机座子;

11.0592M晶振;30pF独石电容;

电解电容10uF;电解电容 220uF;

电阻1K;电阻4.7K;

电阻10K;排阻10K;

轻触开关;1602液晶;

1602液晶座子;10K电位器;

DHT11传感器;DHT11座子;

PM2.5传感器;有源蜂鸣器;

S8550(PNP)三极管;

绿色led灯;红色led灯;

黄色led灯;电源开关;

DC3.5电源座;洞洞板;

电源线;导线:若干;

流程图:

设计资料

01 仿真图

本设计使用proteus8.9版本设计,资料中有软件链接,无需担心!具体如图!

02 原理图

本系统原理图采用Altium Designer19和proteul99SE设计,无需担心!具体如图!

03 程序

本设计使用软件keil4和keil5两个版本编程设计,无需担心!具体如图!

04 设计报告

一万六千字设计报告,具体如下!

05 设计资料

        资料获取请关注同名公众号,全部资料包括仿真源文件 、程序(含注释)、AD原理图、pcb电路图、开题报告、参考论文、流程图、任务书、仿真视频等。具体内容如下,全网最全! !

资料获取请观看前面演示视频!

点赞分享一起学习成长。

这篇关于基于51单片机智能家居空气质量监控—温湿度PM2.5的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/900875

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

单片机毕业设计基于单片机的智能门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订

基于人工智能的智能家居语音控制系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 随着物联网(IoT)和人工智能技术的发展,智能家居语音控制系统已经成为现代家庭的一部分。通过语音控制设备,用户可以轻松实现对灯光、空调、门锁等家电的控制,提升生活的便捷性和舒适性。本文将介绍如何构建一个基于人工智能的智能家居语音控制系统,包括环境准备

kubernetes集群部署Zabbix监控平台

一、zabbix介绍 1.zabbix简介 Zabbix是一个基于Web界面的分布式系统监控的企业级开源软件。可以监视各种系统与设备的参数,保障服务器及设备的安全运营。 2.zabbix特点 (1)安装与配置简单。 (2)可视化web管理界面。 (3)免费开源。 (4)支持中文。 (5)自动发现。 (6)分布式监控。 (7)实时绘图。 3.zabbix的主要功能

基于树梅派的视频监控机器人Verybot

最近这段时间做了一个基于树梅派 ( raspberry pi ) 的视频监控机器人平台 Verybot ,现在打算把这个机器人的一些图片、视频、设计思路进行公开,并且希望跟大家一起研究相关的各种问题,下面是两张机器人的照片:         图片1:                   图片2                    这个平台的基本组成是:

PC与android平板通过浏览器监控Verybot的视频

下面这个视频是PC与android平板通过浏览器监控Verybot的视频:           http://v.youku.com/v_show/id_XNjYzNzYyMTIw.html

java后端服务监控与告警:Prometheus与Grafana集成

Java后端服务监控与告警:Prometheus与Grafana集成 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在现代的微服务架构中,监控和告警是确保服务稳定性的关键组成部分。Prometheus和Grafana是两个强大的工具,它们可以集成在一起,为Java后端服务提供实时监控和可视化告警。 服务监控的重要性 服务监控可以帮助我们实时了解服务的健