功能介绍:采用51单片机作为CPU主控,采用MQ2传感器采集烟雾浓度,采用LCD1602显示相关数据,采用按键设置报警值,当浓度大于设置值,蜂鸣器产生声光报警,并且语音模块进行语音提醒,继电器驱动风扇进行排气,文末有资料分享:
24-基于51单片机的MQ2烟雾检测报警系统(程序+原理图+PCB+元件清单全套资料)
程序部分展示,有中文注释,新手容易看懂
uint ADC_Get(uchar Channel)//读取ADC值
{
ADC_CONTR=0x88|Channel;
_nop_(); _nop_(); _nop_(); _nop_();
while(!(ADC_CONTR&0x10));
ADC_CONTR&=0xe7;
return(ADC_RES*4+ADC_RESL);
}
float ADC_Value(uchar Channel)//读取ADC通道值
{
float AD_Value;
uint i;
for(i=0;i<10;i++)
AD_Value+=ADC_Get(Channel);
AD_Value/=10;
AD_Value=(AD_Value*5)/1024;
return AD_Value;
}
void delay9(unsigned int a) //延时函数
{
unsigned int i;
while (--a!=0)
for(i=600;i>0;i--);
}
void USART_Init()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd; //波特率9600
SCON=0x50;
TR1=1;
TI=1;
}
void ADC_Init()//ADC初始化
{
P1ASF=0x07;
AUXR1=0x00;
ADC_RES=0;
ADC_RESL=0;
ADC_CONTR=0x80;
delay9(2);
}
void delay_m(int ms)//延时函数
{
int i;
do{
i = 11059200L / 13000;
while(--i) ; //14T per loop
}while(--ms);
}
void main()
{
USART_Init();
ADC_Init();//ADC初始化
init();//LCD初始化
delay_m(200);
yinyue=0;q1=1;
while (1)
{
if(key1==0)
{
bug++;
if(bug>999) bug=999;
}
if(key2==0)
{
bug--;
if(bug<1) bug=1;
}
下面是原理图和PCB文件展示: