加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

基于51单片机的酒精气体检测器设计

3小时前
115
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
实物图
相关方案
  • 方案介绍
  • 相关文件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

使用说明:

上电以后,需要预热一段时间,此时lcd显示Loading... (预热过程为电压先上升后下降的改成,通过检测电压来检测是否预热完成) , 预热完成后显示酒精浓度,按下按下按键key1即可进入报警设置模式,按下key2加,key3减, 再次按下key1退出报警设置模式(必须为报警设置模式key2和key3才起作用)

原理图

部分程序:

#include "stc89x_90x.h"
#include "LCD1602.h"
#include "ADC0832.h"
#include "intrins.h"

sbit k1=P1^4;
sbit k2=P1^5;
sbit k3=P1^6;

sbit beep=P3^5;
sbit beep2=P3^2;
sbit beep3=P3^3;
sbit beep4=P3^4;
sbit led=P3^6;

unsigned char temp1[]={"Potency: **%"};      //ÏÔʾ¾Æ¾«Å¨¶È
unsigned char temp2[]={"early:**%  "};      //ÏÔʾŨ¶ÈÔ¤¾¯Öµ
unsigned char temp3[]={"Loading...   "};

unsigned char key,a;
unsigned char dat=50;                               //¾Æ¾«Å¨¶ÈÔ¤¾¯³õʼλ
long int m;

void Delay1000ms()        //@11.0592MHz
{
unsigned char i, j, k;

_nop_();
i = 8;
j = 1;
k = 243;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}

/********
void concentration()
¾Æ¾«Å¨¶È¼ÆËã
*********/
void concentration()
{
unsigned char count;                           //¶¨Òå8λµÄcout
long int a;                                       //¶¨Ò峤ÕûÐͱäÁ¿

count=ADC_acquisition();                       //½«ADC0832¶Á³öµÄÖµ¸³¸øcount
a=count*50;
count=(float)(a/256);

if(count<13)
count=(float)(13);                   //µ±µçѹֵСÓÚ1.4Vʱ£¬½«µçѹֵ¹Ì¶¨ÔÚ1.4V
else
count=(float)(count-13)*3.5;                   //¼ÆËã¾Æ¾«Å¨¶ÈΪһ¸ö¸¡µãÐͱäÁ¿

/*    ÕâÒ»¾äûÓÐÓÃÉÏÒ»¾äcountΪu8ÀàÐÍÒѾ­Íê³ÉÁËÀàÐÍת»»
count=(char)count;
*/

if(count>=100)                                   //µ±Å¨¶È´óÓÚ100%ʱ£¬½«Å¨¶È¹Ì¶¨ÔÚ100%
{
count=100;
temp1[8]=count/100+'0';
}
else temp1[8]=' ';
temp1[9]=count%100/10+'0';                       //½«Å¨¶ÈÖµ¸³¸øÊý×é
temp1[10]=count%100%10+'0';
m=count;
}

/************
void loading()
³õʼ¼ÓÔØ(Ô¤ÈÈ)º¯Êý
*************/
void loading()
{
unsigned char s=10;
while(s--)
{
WriteInstruction(0x80);
a=0;
while(temp3[a]!='�')
{
WriteData(temp3[a]);
a++;
}
}
Delay1000ms();Delay1000ms();
Delay1000ms();Delay1000ms();
while(1)
{
concentration();
if(m==0)
{
temp3[7]=' ';
temp3[8]='O';
temp3[9]='K';
}
WriteInstruction(0x80);
a=0;
while(temp3[a]!='�')
{
WriteData(temp3[a]);
a++;
}
if(m==0)
{
Delay1000ms();
break;
}
}
}

/********
void independent()
Ô¤¾¯Ñ¡Ôñ룬k2ΪÔö¼Ó£¬k3Ϊ¼õÉÙ
*********/
void independent()
{
if(k2==0)
{
delay(1000);
if(k2==0)
{
while(k2==0);
dat++;
if(dat==100)dat=99;
}
}
if(k3==0)
{
delay(1000);
if(k3==0)
{
while(k3==0);
dat--;
if(dat==0)dat=1;
}
}
temp2[6]=dat/10+'0';
temp2[7]=dat%10+'0';
}

/**************
void first_line()
ÏÔʾµÚÒ»ÐУ¬¼´Îª¾Æ¾«Å¨¶È
***************/
void first_line()
{
WriteInstruction(0x80);
a=0;
while(temp1[a]!='�')
{
WriteData(temp1[a]);
a++;
}
delay(1000);
}

/*************
void second_line()
ÏÔʾµÚ¶þÐУ¬¼´Îª¾Æ¾«Å¨¶ÈÔ¤¾¯Öµ
**************/
void second_line()
{
independent();
temp2[6]=dat/10+'0';
temp2[7]=dat%10+'0';
WriteInstruction(0x80+0x40);
a=0;
while(temp2[a]!='�')
{
WriteData(temp2[a]);
a++;
}
delay(1000);
}

/*******
void main()
Ö÷º¯Êý
********/
void main()
{
unsigned char n=0;
key=0;
Init();
loading();
Init();
while(1)
{
concentration();             //¾Æ¾«Å¨¶È¼ì²âλ
first_line();                 //ÏÔʾµÚÒ»Ðоƾ«Å¨¶È
if(k1==0)
{
delay(1000);
if(k1==0)
{
while(k1==0);
if(key==0)key=1;
else key=0;
}
}
if(key==1)
{
independent();
second_line();
n=1;
}
if(key==0)
{
if(n==1)
{
WriteInstruction(0x01);
}
n=0;
}
if(dat<=m)
{
led=0;

  • 有需要资料的可了解一下.docx

相关推荐

电子产业图谱