基于单片机的Wi-Fi无线气体浓度检测报警系统设计详解:模数转换器、LCD显示与串口通信,可调阈值与模拟无线传输(Proteus仿真工程+原理图工程+源代码)
18-1-基于单片机的Wi-Fi无线气体(烟雾、一氧化碳、氧气)浓度检测报警系统设计(模数转换器、LCD1602、串口、可调阈值、可模拟无线传输)(proteus、源代码、仿真工程、原理图工程)
功能描述:
使用单片机实现烟雾浓度、一氧化碳浓度、氧气浓度的监测,可以实时监测当前系统中的气体浓度。可以通过按键手动的设置烟雾、一氧化碳、氧气浓度的报警阈值,当超过阈值会进行声学与光学报警。使用串口传输模拟WIFI无线传输的功能。
1、烟雾浓度监测
2、一氧化碳浓度监测
3、氧气浓度监测
4、人机交互阈值调节
5、声学与光学报警
6、LCD1602浓度实时监测
7、串口数据传输,模拟WIFI传输的功能
有哪些资料:
1、源代码KEIL4
2、仿真工程文件
3、原理图工程文件
#include <reg52.h>
#include "ds18b20.h"
#include <I2C.H>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define PCF8591 0x90
sbit rs = P2^0;
sbit rw = P2^1;
sbit e = P2^2;
sbit k1=P3^2;
sbit k2=P3^3;
sbit k3=P3^4;
sbit beep=P2^6;
sbit led1=P2^3;
sbit led2=P2^5;
sbit led3=P2^4;
uchar ad,mos;
uchar code xianshi1[]=" Íß˹Ũ¶È:";
uchar code xianshi2[]=" Ò»Ñõ»¯Ì¼Å¨¶È:";
uchar code xianshi3[]=" ÑõÆøÅ¨¶È:";
uchar xianshi4[20];
uchar code xianshi5[]=" ÈÝÁ¿";
uchar code xianshi6[]="%";
uchar code xianshi7[]="********* WIFI ´«ÊäÒÑ¿ªÆô£¡*********\r\n";
uchar code xianshi8[]=" \r\n";
uchar Dat_rxd;
uint aa;
uint DV,DL,DN,power;
uint DN_s = 50,DV_s=50,DL_s=50;
bit bb,temp_b,dv_b,dl_b;
void delay(uchar ms)
{ // ÑÓʱ×Ó³ÌÐò
uchar i ;
while(ms--)
{
for(i = 0 ; i<250;i++) ;
}
}
void wr_com(unsigned char com)
{
// дÈëÖ¸ÁîÊý¾Ýµ½LCD
rs = 0 ;
rw = 0 ;
e = 0 ;
P0 = com ;
delay(1);
e = 1 ;
delay(1);
e = 0 ;
}
void wr_dat(unsigned char dat)
{
//дÈë×Ö·ûÏÔʾÊý¾Ýµ½LCD
rs = 1 ;
rw = 0 ;
e = 0 ;
P0 = dat ;
delay(1);
e = 1 ;
delay(1);
e = 0 ;
}
void LCD_write_string(uchar x,uchar y,uchar *s)
{
if (y == 0)
{
wr_com(0x80 + x); //±íʾµÚÒ»ÐÐ
}
else
{
wr_com(0xC0 + x); //±íʾµÚ¶þÐÐ
}
while (*s) //ÅжÏÊÇ·ñ×Ö·û´®µÄ½áβ
{
wr_dat( *s); //ÏÔʾµ±Ç°×Ö·û
s ++; //×Ö·û´®µØÖ·¼Ó1
}
}
void LCD_write_char(uchar x,uchar y,uchar Data)
{
if (y == 0)
{
wr_com(0x80 + x);
}
else
{
wr_com(0xC0 + x);
}
wr_dat(Data);
}
/*******************************************************************
ADC·¢ËÍ×Ö½Ú[ÃüÁî]Êý¾Ýº¯Êý
*******************************************************************/
bit ISendByte(unsigned char sla,unsigned char c)
{
Start_I2c(); //Æô¶¯×ÜÏß
SendByte(sla); //·¢ËÍÆ÷¼þµØÖ·
if(ack==0)return(0);
SendByte(c); //·¢ËÍÊý¾Ý
if(ack==0)return(0);
Stop_I2c(); //½áÊø×ÜÏß
return(1);
}
/*******************************************************************
ADC¶Á×Ö½ÚÊý¾Ýº¯Êý
*******************************************************************/
unsigned char IRcvByte(unsigned char sla)
{ unsigned char c;
Start_I2c(); //Æô¶¯×ÜÏß
SendByte(sla+1); //·¢ËÍÆ÷¼þµØÖ·
if(ack==0)return(0);
c=RcvByte(); //¶ÁÈ¡Êý¾Ý0
Ack_I2c(1); //·¢ËͷǾʹðλ
Stop_I2c(); //½áÊø×ÜÏß
return(c);
}
作者:叫我Eric