仿真+程序+原理图+设计说明书
Proteus仿真版本:proteus7.8
原理图:Altium Designer
程序编译器:keil 4
编程语言:C语言
编号C0017
C0017 网盘下载链接
整个系统以STC89C52单片机为核心器件,配合电阻电容晶振等器件,构成单片机的最小系统。
1.烟雾采集传感器选用MQ-2,由于该传感器输出的是模拟信号,因此需要模数转换芯片ADC0832,把模拟信号转为数字信号再传给单片机;
2.温度采集使用DS18B20数字传感器,该传感器通过单总线和单片机相连;
3.火焰检测使用火焰检测模块,该模块完成了信号的检测、放大、比较等处理,最终输出高低电平信号给单片机;
4.显示设备使用1602液晶,可以在屏幕上显示实时烟雾浓度值、温度值,以及报警值等信息;
5.报警模块则采用蜂鸣器和LED灯组成,三个LED分别代表了火焰报警指示、烟雾报警指示和温度报警指示,无论哪个检测元素超标,蜂鸣器都会鸣叫报警;
6.3个按键作为操作输入设备,可以用来调节报警阈值的大小;
7.供电采用常用的USB 5V进行供电。
仿真图:
原理图:
/********************************************************
主函数
********************************************************/
void main(void)
{
int temp; // 保存温度值
uchar num; // 保存烟雾值
uchar i; // 循环变量
LcdInit(); // 液晶功能初始化
LcdShowInit(); // 液晶显示内容初始化
gMqAlarm=EEPROM_Read(0x2000); // 从EEPROM中读取报警值
if((gMqAlarm==0)||(gMqAlarm>100)) // 如果读出来数据异常,则重新赋值30
gMqAlarm=30;
LcdGotoXY(0,11); // 光标定位
LcdPrintNum1(gMqAlarm); // 显示烟雾浓度的报警值
gTempAlarm=EEPROM_Read(0x2001)-55; // 将温度报警值读取出来
if((gTempAlarm<=-55)||(gTempAlarm>125)) // 如果读出来数据异常,则重新赋值40度
gTempAlarm=40;
LcdGotoXY(1,11); // 光标定位
LcdPrintNum2(gTempAlarm); // 显示温度的报警值
while(DS18B20_ReadTemp()==85) // 等待传感器初始化完成
{
DelayMs(10);
}
while(1)
{
num=Get_ADC0832(); // 获取烟雾的浓度值
num=num/2.2; // 调整浓度值,使其在0-100之间变化
if(num>100)
num=100;
LcdGotoXY(0,5); // 液晶光标定位到第0行第5列
LcdPrintNum1(num); // 显示烟雾浓度的值
temp=DS18B20_ReadTemp(); // 读取温度值
LcdGotoXY(1,5); // 液晶光标定位到第1行第5列
LcdPrintNum2(temp); // 显示温度值
AlarmJudge(num,temp); // 报警判断
for(i=0;i<15;i++) // 执行15次循环(延时0.15秒,并在这个时间段进行按键扫描)
{
KeyScanf(); // 按键扫描
DelayMs(10); // 延时
}
}
}
资料如下: