一、资料内容
- (1)、基于51单片机的可燃气体报警器proteus仿真设计一份;
- (2)、基于51单片机的可燃气体报警器proteus仿真设计keli源代码一份;
- (3)、基于51单片机的可燃气体报警器设计Altium designer 原理图一份;
- (4)、基于51单片机的可燃气体报警器设计Altium designer PCB一份;
- (5)、基于51单片机的可燃气体报警器设计元器件清单一份;
- (6)、基于51单片机的烟雾报警系统proteus仿真设计视频讲解一份;
二、设计要求
- 1、完成51单片机最小系统的设计与仿真搭建;
- 2、通过单片机编程实现ADC0832模数转换功能;
- 3、通过模数转换功能实现可燃气体检测;
- 4、超过阈值启动声光报警功能;
- 6、根据上述要求完成实物制作与仿真;
三、相关资料截图
图1. 系统proteus仿真界面截图
图2. 系统Keil编程界面源代码截图
图3. 系统原理图工程文件
图4. PCB工程文件
图5. 系统实物照片
四、视频讲解
部分代码:
#include<reg51.h> //包含单片机寄存器的头文件
#include<intrins.h> //包含_nop_()函数定义的头文件
unsigned char flag=0; //紧急报警标示位
unsigned char flag1=0; //传感器检测报警标示位
sbit CS=P1^0; //将CS位定义为P3.4引脚
sbit CLK=P1^1; //将CLK位定义为P1.0引脚
sbit DIO=P1^2; //将DIO位定义为P1.1引脚
sbit K1=P2^4;
sbit LED1=P2^0; //警情指示灯
sbit LED2=P2^1; //正常指示灯
sbit BEEP=P2^2;
/*****************************************************
函数功能:延时1ms
(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒
***************************************************/
void delay1ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
;
}
/*****************************************************
函数功能:延时若干毫秒
入口参数:n
***************************************************/
void delaynms(unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
delay1ms();
}
/*****************************************************
函数功能:按键控制子程序
******************************************************/
void key()
{
if(K1==0)
{
delaynms(5);
if(K1==0)
{
while(!K1);
flag++;
if(flag==2)
flag=0;
}
}
}
/*****************************************************
函数功能:报警子程序
*****************************************************/
void baojing()
{
if(flag==1||flag1==1)
{
LED2=1;
LED1=0;
BEEP=0;
delaynms(500);
BEEP=1;
delaynms(500);
}
if(flag==0&&flag1==0)
{
LED2=0;
LED1=1;
BEEP=1;
}
}
/*****************************************************
函数功能:将模拟信号转换成数字信号
***************************************************/
unsigned int A_D()
{
unsigned char i,dat;
CS=1; //一个转换周期开始
CLK=0; //为第一个脉冲作准备
CS=0; //CS置0,片选有效
DIO=1; //DIO置1,规定的起始信号
CLK=1; //第一个脉冲
CLK=0; //第一个脉冲的下降沿,此前DIO必须是高电平
DIO=1; //DIO置1, 通道选择信号
CLK=1; //第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0
CLK=0; //第二个脉冲下降沿
DIO=0; //DI置0,选择通道0
CLK=1; //第三个脉冲
CLK=0; //第三个脉冲下降沿
DIO=1; //第三个脉冲下沉之后,输入端DIO失去作用,应置1
CLK=1; //第四个脉冲
for(i=0;i<8;i++) //高位在前
{
CLK=1; //第四个脉冲
CLK=0;
dat<<=1; //将下面储存的低位数据向右移
dat|=(unsigned char)DIO; //将输出数据DIO通过或运算储存在dat最低位
}
CS=1; //片选无效
return dat; //将读书的数据返回
}
/*****************************************************
函数功能:警情检测子程序
*****************************************************/
void jq()
{
unsigned int AD_val; //储存A/D转换后的值
AD_val=A_D(); //进行A/D转换
if(AD_val>=100)
flag1=1;
else
flag1=0;
}
/*****************************************************
函数功能:主函数
***************************************************/