基于51单片机烟雾报警器数码管显示( proteus仿真+程序+设计报告+讲解视频)
基于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 temp0=temp0 temp1=temp11; 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(numlimit){//报警 // if(beepflag // beep=1; // beepflag = 0; // } // // if(beepflag // beep=1; // } if(numlimit){//报警 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 if(limit0) limit=limit-10; else limit=2500; }
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...