基于51单片机一氧化碳(CO)浓度检测报警仿真LCD显示( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机一氧化碳(CO)浓度检测报警仿真LCD显示( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机一氧化碳浓度检测报警仿真

  • [1. 主要功能:](#1. 主要功能:)
  • [2. 讲解视频:](#2. 讲解视频:)
  • [3. 仿真](#3. 仿真)
  • [4. 程序代码](#4. 程序代码)
  • [5. 设计报告](#5. 设计报告)
  • [6. 原理图](#6. 原理图)
  • [7. 设计资料内容清单&&下载链接](#7. 设计资料内容清单&&下载链接)

仿真图proteus7.8及以上

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:S0073

1. 主要功能:

基于51单片机的一氧化碳CO报警器proteus仿真设计

1.LCD1602液晶显示一氧化碳报警值和检测到的一氧化碳浓度值;

2.可以通过按键调整一氧化碳报警值;

3.一氧化碳浓度低于报警值工作指示灯绿灯亮。

一氧化碳浓度高于阈值蜂鸣器报警,工作指示灯红灯亮;

4.通过ADC0832采集滑动变阻器模拟一氧化碳传感器MQ-7电压变化。

需注意仿真中51单片机芯片是兼容的,AT89C51,AT89C52是51单片机的具体型号,内核是一样的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序是兼容的,芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。

以下为本设计资料展示图:

2. 讲解视频:

讲解视频包含仿真运行讲解和代码讲解

3. 仿真

打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。开始仿真后LCD1602液晶显示当前烟雾浓度,烟雾浓度测量值280ppm,报警值600ppm,工作指示灯绿灯亮。

通过点击滑动变阻器的阻值调整,阻值高于上限值600ppm后,蜂鸣器报警,工作指示灯红灯亮。

4. 程序代码

使用keil4或者keil5编译,代码有注释,可以结合视频理解代码含义。

LCD1602.c

c 复制代码
#include "lcd1602.h"

void delay_uint(uint i)
{
	while(i--);
}
/********************************************************************
* 名称 : write_com(uchar com)
* 功能 : 1602命令函数
* 输入 : 输入的命令值
* 输出 : 无
***********************************************************************/
void write_com(uchar com)
{
	e=0;
	rs=0;
	rw=0;
	P0=com;
	delay_uint(20);
	e=1;
	delay_uint(20);
	e=0;
}

/********************************************************************
* 名称 : write_data(uchar dat)
* 功能 : 1602写数据函数
* 输入 : 需要写入1602的数据
* 输出 : 无
***********************************************************************/
void write_data(uchar dat)
{
	e=0;
	rs=1;
	rw=0;
	P0=dat;
	delay_uint(20);
	e=1;
	delay_uint(20);
	e=0;	
}

/********************************************************************
* 名称 : write_string(uchar hang,uchar add,uchar *p)
* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下
	 	 write_string(1,5,"ab cd ef;")
* 输入 : 行,列,需要输入1602的数据
* 输出 : 无
***********************************************************************/
void write_string(uchar hang,uchar add,uchar *p)
{
	if(hang==1)   
		write_com(0x80+add);
	else
		write_com(0x80+0x40+add);
		while(1)
		{
			if(*p == '\0')  break;
			write_data(*p);
			p++;
		}	
}

/********************************************************************
* 名称 : init_1602()
* 功能 : 初始化1602液晶 
* 输入 : 无
* 输出 : 无
***********************************************************************/
void init_1602()
{
	write_com(0x38);						//数据总线为8位,显示2行,5x7点阵
	write_com(0x0e);						//开显示,有光标,光标闪烁
	write_com(0x06);						//光标自动右移
	delay_uint(1000);						//等待设置完成
}

ADC0832转换程序

C 复制代码
#include "ADC0832.h"
#include "intrins.h"
/*********************************************
读取ADC
**********************************************/
uchar ADC(uchar ch)//通道ch	 1,2
{
	uchar 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_();
	if(ch==1)
	DI=0;
	if(ch==2)
	DI=1;
	_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;
}

主程序:

C 复制代码
void main()
{
	init_1602(); //LCD1602初始化
	TMOD|=0X01;
	TH0=0X3C;
	TL0=0XB0;	
	ET0=1;//打开定时器0中断允许
	EA=1;//打开总中断
	TR0=1;//打开定时器
	while(1)
	{
		if(!k3)	//高阀值加
		{
			if(high<999)
				high++;
			while(!k3);
		}
		if(!k4)	//高阀值减
		{
			if(high>low)
				high--;
			while(!k4);
		}
		if(det_co>high) //上限报警
		{
			led1=0;	 //LED1红灯点亮
			led2=1;	  //LED2绿灯熄灭
		}
		else
		{
			led1=1;	  //LED1红灯熄灭
			led2=0;		//LED2绿灯点亮
		}
		beep=led1;
	}
}
void Timer0() interrupt 1
{
	TH0=0X3C;
	TL0=0XB0;
	det_co=ADC(1);//测量一氧化碳
	disp1[6]=det_co/100+0x30; //一氧化碳百位
	disp1[7]=det_co%100/10+0x30;	  //一氧化碳十位
	disp1[8]=det_co%10+0x30;		  //一氧化碳个位
//	disp2[2]=low/100+0x30;
//	disp2[3]=low%100/10+0x30;
//	disp2[4]=low%10+0x30;
	disp2[6]=high/100+0x30;
	disp2[7]=high%100/10+0x30;
	disp2[8]=high%10+0x30;
	write_string(1,0,disp1);
	write_string(2,0,disp2);
}

5. 设计报告

7991字设计报告,内容包括硬件设计、软件设计、软硬件框图、调试、结论等

社会的进步和科技的发展,人们对环境安全与健康保护的认识不断深化,对预防各类环境危害因素的需求日益增强。有毒有害气体作为影响人类生存环境及生命安全的重要因素之一,其检测与防护的重要性愈发凸显。在工业生产领域,如化工、冶金、煤矿等众多行业中,有毒有害气体的泄漏可能导致重大安全事故,严重威胁工作人员的生命安全以及设备设施的正常运行;在家庭生活场景中,燃气设备的不完全燃烧或者通风不良等因素可能导致一氧化碳浓度超标,给居民带来潜在的生命危险;公共场所如商场、学校、医院等地,同样需要严密监控可能产生的有毒有害气体,确保广大公众的人身安全。

6. 原理图

原理图使用AD绘制,可供实物参考,仿真不同于实物,经验不足不要轻易搞实物。

Proteus仿真和实物作品的区别:

1.运行环境:Proteus仿真是在计算机上运行的,而实物则是在硬件电路板上运行。

2.调试方式:在Proteus仿真中,可以方便地进行单步调试和观察变量值的变化,而在实物中则需要通过调试器或者串口输出等方式进行调试。

电路连接方式:在Proteus仿真中,可以通过软件设置进行电路连接的修改,而在实物中则需要通过硬件电路板和连接线进行修改。

3.运行速度:Proteus仿真通常比实物运行速度快,因为仿真是基于计算机运行的,而实物则需要考虑电路板上的物理限制和器件的响应时间等因素。

4.功能实现:在Proteus仿真中,可以通过软件设置实现不同的功能,而在实物中则需要根据电路设计和器件的性能进行实现。

7. 设计资料内容清单&&下载链接

资料设计资料包括仿真,程序代码、讲解视频、功能要求、设计报告、软硬件设计框图等。

0、常见使用问题及解决方法--必读!!!!

1、程序

2、proteus仿真

3、功能要求

4、软硬件流程图

5、开题报告

6、设计报告

7、原理图

8、讲解视频

Altium Designer 安装破解

KEIL+proteus 单片机仿真设计教程

KEIL安装破解

MQ-7.pdf

Proteus元器件查找

Proteus安装

Proteus简易使用教程

单片机学习资料

相关数据手册

答辩技巧

设计报告常用描述

鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url

资料下载链接:

https://docs.qq.com/doc/DS1h1Q1BkWE9rcUV4

相关推荐
逆小舟3 小时前
【STM32】手把手教你完成“天气预报项目”
stm32·单片机·嵌入式硬件
cjy_Somnr7 小时前
keil5报错显示stm32的SWDIO未连接不能烧录
stm32·单片机·嵌入式硬件
Lay_鑫辰8 小时前
西门子诊断-状态和错误位(“轴”工艺对象 V1...3)
服务器·网络·单片机·嵌入式硬件·自动化
无垠的广袤10 小时前
【工业树莓派 CM0 NANO 单板计算机】本地部署 EMQX
linux·python·嵌入式硬件·物联网·树莓派·emqx·工业物联网
逐步前行10 小时前
Proteus 8.9(三)元器件类
proteus
雲烟12 小时前
嵌入式设备EMC安规检测参考
网络·单片机·嵌入式硬件
泽虞12 小时前
《STM32单片机开发》p7
笔记·stm32·单片机·嵌入式硬件
田甲12 小时前
【STM32】 数码管驱动
stm32·单片机·嵌入式硬件
up向上up13 小时前
基于51单片机垃圾箱自动分类加料机快递物流分拣器系统设计
单片机·嵌入式硬件·51单片机
资料,小偿1 天前
4.1.2基于51单片机汇编语言出租车计价器proteus仿真出租车计价器,汇编语言51单片机
汇编·51单片机·proteus