基于51单片机烟雾报警器数码管显示( proteus仿真+程序+设计报告+讲解视频)
仿真图proteus7.8及以上
程序编译器:keil 4/keil 5
编程语言:C语言
设计编号:S0067
1. 主要功能:
基于51单片机的烟雾报警器proteus仿真设计
1.LED数码管
显示烟雾报警值和检测到的烟雾值;
2.可以通过按键调整烟雾报警浓度值;
3.烟雾浓度低于报警值工作指示灯绿灯亮。
烟雾浓度高于阈值蜂鸣器报警,工作指示灯红灯亮;
4.通过ADC0832
采集滑动变阻器模拟MQ-2
电压变化。
需注意仿真中51单片机芯片是兼容的,AT89C51,AT89C52是51单片机的具体型号,内核是一样的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序是兼容的,芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。
2. 讲解视频:
讲解视频包含仿真运行讲解和代码讲解
3. 仿真
打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。
4. 程序代码
使用keil4或者keil5编译,代码有注释,可以结合报告理解代码含义。
完整代码见文章下载链接
#include "reg51.h"
#include "intrins.h"
sbit CLK= P1^1;//时钟,初始状态为0
sbit DI= P1^2;//数据输入
sbit DO= P1^3; // 数据输出
sbit CS= P1^0;
sbit LED_RED=P3^4; //红灯
sbit LED_GREEN=P3^5; //绿灯
sbit beep=P3^0;//蜂鸣器
unsigned char code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned int num=0;//烟雾
unsigned int limit=1500;//阀值
unsigned char beepflag;
unsigned int cnt=0;
/*********************************************
读取ADC
**********************************************/
unsigned char ADC()//通道ch0
{
unsigned char temp0,temp1,i;
CS=0;
temp0=0;
temp1=0;
_nop_();
_nop_();
DI=1;//开始位
_nop_();
_nop_();
CLK=1;
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
DI=0;
_nop_();
_nop_();
//选择通道0
DI=1;
_nop_();
CLK=1;//上升沿DI=1
_nop_();
CLK=0;//1个下降沿DI=1
_nop_();
DI=0;
_nop_();
CLK=1;
_nop_();
CLK=0;//第3个上升沿DI=0
_nop_();
DI=1;
//********通道选择结束开始读取转换后的二进制数****
//下降沿读数,一下进行判断和处理,共8次
for(i=0;i<8;i++)
{
temp0=temp0<<1;
CLK=1;
if(DO)
temp0++;
_nop_();
CLK=0;
}
for(i=0;i<8;i++)
{
temp1=temp1>>1;
CLK=1;
if(DO)
temp1=temp1 +0x80;
_nop_();
CLK=0;
}
CS=1;
return temp0;
}
void delay(unsigned int i)//延时
{
while(i--);
}
void main()
{
TMOD|=0X01;
TH0=0X3C;
TL0=0XB0;
EX0=1;//打开外部中断0
EX1=1;//打开外部中断1
IT0=1;//下降沿触发
IT1=1;//下降沿触发
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
beepflag = 0;
while(1)
{
P0=smgduan[num/1000];//显示烟雾度
P2=0xfe;
delay(100);
P2=0xff;
P0=smgduan[num%1000/100];//显示烟雾度
P2=0xfd;
delay(100);
P2=0xff;
P0=smgduan[num%100/10];//显示烟雾度
// P0 =P0|0x80; //加小数点
P2=0xfb;
delay(100);
P2=0xff;
P0=smgduan[num%10];//显示烟雾度
P2=0xf7;
delay(100);
P2=0xff;
P0=smgduan[limit/1000];//显示烟雾度阀值
P2=0xef;
delay(100);
P2=0xff;
P0=smgduan[limit%1000/100];//显示烟雾度阀值
P2=0xdf;
delay(100);
P2=0xff;
P0=smgduan[limit%100/10];//显示烟雾度阀值
P2=0xbf;
delay(100);
P2=0xff;
P0=smgduan[limit%10];//显示烟雾度阀值
P2=0x7f;
delay(100);
P2=0xff;
}
}
void Timer0() interrupt 1//定时器中断
{
TH0=0X3C; //50ms中断
TL0=0XB0;
if(cnt==20){//1秒一次
cnt = 0;
// if(num>limit){//报警
// if(beepflag<10)beepflag++;//10秒计数
// }else{
// beep=1;
// beepflag = 0;
// }
//
// if(beepflag<10&&num>limit*10){//响10秒
// beep=0;
// }else{
// beep=1;
// }
if(num>limit){//报警
beep=0;
LED_RED=0; //红色报警灯 亮
LED_GREEN=1; //绿色报警灯 灭
}else{
beep=1;
LED_RED=1; //红色报警灯 灭
LED_GREEN=0; //绿色报警灯 亮
}
}
cnt++;
}
void jia() interrupt 0//按键 外部中断0处理函数
{
if(limit<2500)
limit=limit+10;
else
limit=0;
}
void jian() interrupt 2//按键 外部中断1处理函数
{
if(limit>0)
limit=limit-10;
else
limit=2500;
}
5. 设计报告
4947字设计报告,内容包括硬件设计、软件设计、软硬件框图、调试、结论等
6. 设计资料内容清单&&下载链接
资料设计资料包括仿真,程序代码、讲解视频、功能要求、设计报告、软硬件设计框图等。
0、常见使用问题及解决方法–必读!!!!
1、仿真图
2、程序源码
3、功能要求
4、开题报告
5、设计报告
6、软硬件流程框图
7、讲解视频
Altium Designer 安装破解
KEIL+proteus 单片机仿真设计教程
KEIL安装破解
Proteus元器件查找
Proteus安装
Proteus简易使用教程
单片机学习资料
相关数据手册
答辩技巧
设计报告常用描述
鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url
资料下载链接(可点击):
https://docs.qq.com/doc/DS1VFWmlRSVRCR3Rl