51单片机的酒精检测Proteus仿真+源代码

发布者:自在逍遥最新更新时间:2020-02-14 来源: 51hei关键字:51单片机  酒精检测  Proteus仿真 手机看文章 扫描二维码
随时随地手机看文章

酒精传感器仿真中没有,其实就是传感器检测时相应的电阻值会变化,用滑动电位器代替就ok

仿真原理图如下

单片机源程序如下:

//程序头函数

#include

//显示函数

#include

#include

#include "eeprom52.h"

#include "temp.h"


//宏定义

#define uint unsigned int 

#define uchar unsigned char

#define Data_ADC0809 P1


//管脚声明

sbit P34=P3^4;//温度

sbit LED_R= P2^2; //红指示灯

sbit LED_G= P2^0; //绿色指示灯

sbit FENG = P2^5; //蜂鸣器

//ADC0809

sbit ST=P3^3;

sbit EOC=P3^6;

sbit OE=P3^2;

//按键

sbit Key1=P2^6;        //设置按键

sbit Key2=P2^7; //加

sbit Key3=P3^7;        //减

bit bdata flag;//指示灯和蜂鸣器闪烁报警标志位

uchar set;          //设置标志位



//函数声明

extern uchar ADC0809();

extern void Key();


//酒精含量变量

unsigned int temp=0;

unsigned int WARNING=25; // 初始报警值

/******************把数据保存到单片机内部eeprom中******************/

void write_eeprom()

{

        SectorErase(0x2000);

        byte_write(0x2000, WARNING);

        byte_write(0x2060, a_a);        

}


/******************把数据从单片机内部eeprom中读出来*****************/

void read_eeprom()

{

        WARNING   = byte_read(0x2000);

        a_a      = byte_read(0x2060);

}


/**************开机自检eeprom初始化*****************/

void init_eeprom() 

{

        read_eeprom();                //先读

        if(a_a != 1)                //新的单片机初始单片机内问eeprom

        {

                WARNING=25;

                a_a = 1;

                write_eeprom();           //保存数据

        }        

}

//初始化函数

void init()         

{

        TMOD=0x01; //定时器0方式1

         TL0=0xb0;

         TH0=0x3c;

        TL1=65000/256;

        TH1=65000/256;  //赋初值

         EA=1;        //开总中断

        ET0=1;        //允许定时器0中断

         TR0=1;        //定时器0开

}

//主函数

void main()

{

        Init1602();        //1602初始化

        init_eeprom();  //开始初始化保存的数据

        init();         //初始化函数

        while(1)//主循环

        {

                if(set==0) //如果没有按下设置(默认set是0,就是正常显示状态)

                {

                        temp=ADC0809();        //读取酒精值

                        Display_1602(temp,WARNING,ReadTemperature());         //显示酒精值

                }

                if(temp                {

                        flag=0;         //执行下面flag=0的(主要就是绿灯闪,关蜂鸣器和继电器)

                }

                else if(temp>WARNING&&set==0)  //如果实际的酒精值大于报警值且在正常显示状态下

                {

                        flag=1;        //执行下面flag=1的(主要就是红灯闪,开蜂鸣器和继电器)

                }

                Key();//按键扫描

        }

}

//ADC0809读取信息

uchar ADC0809()

{

        uchar temp_=0x00;

        //初始化高阻太


        OE=0;

        //转化初始化

        ST=0;

        //开始转换

        ST=1;

        ST=0;

        //外部中断等待AD转换结束

        while(EOC==0)

        //读取转换的AD值

        OE=1;

        temp_=Data_ADC0809;

        OE=0;

        return temp_;

}

//按键函数

void Key()

{

        if(Key1==0)        //如果设置按键按下

        {

                while(Key1==0);//等待按键释放

                FENG=0;        //蜂鸣器响

                set++;        //设置的变量加1

                flag=0;        //绿灯闪

                TR0=0;        //关定时器0

                write_com(0x0f);//打开显示 无光标 光标闪烁

                write_com(0x80+15);//位置

//                   write_com(0x06);//当读或写一个字符是指针后一一位

                FENG=1;        //蜂鸣器关

        }

        if(set>=2)        //又按了下设置

        {

                set=0;        //正常显示状态

//                write_com(0x38);//屏幕初始化

                write_com(0x0c);//打开显示 无光标 无光标闪烁

                FENG=1;        //蜂鸣器关

                flag=1;        //红灯闪

                TR0=1;        //定时器0开

        }

        if(Key2==0&&set!=0)          //在设置的状态下按下加

        {

                while(Key2==0);          //等待按键释放

                FENG=0;                //蜂鸣器响

                WARNING++;        //报警值加1

                if(WARNING>=255)  //如果报警值大于等于255

                WARNING=0;                 //报警值归零

                write_com(0x80+13);

                write_data('0'+WARNING/100); 

                write_data('0'+WARNING/10%10);

                write_data('0'+WARNING%10);           //显示报警值

                //write_com(0x80+0x40+13);//调整位置

                FENG=1;         //蜂鸣器关

                write_eeprom();                           //保存数据

        }

        if(Key3==0&&set!=0)         //在设置的状态下按下减

        {

                while(Key3==0);         //等待按键释放

                FENG=0;                 //蜂鸣器响

                WARNING--;         //报警值减1

                if(WARNING<=0)        //如果报警值小于等于0

                WARNING=255;        //那么报警值为255

                write_com(0x80+13);

                write_data('0'+WARNING/100);

                write_data('0'+WARNING/10%10);

                write_data('0'+WARNING%10);

                //write_com(0x80+0x40+13);//调整位置

                FENG=1;         //蜂鸣器关

                write_eeprom();                           //保存数据

        }

}


void  time1_int(void) interrupt 1 //定时器中断0

{

        uchar count;

        TL0=0xb0;

         TH0=0x3c;  //重赋初值50ms

          count++;  ///溢出值加1

        if(count==10)  //如果时间到半秒

        {

                if(flag==0)          //如果flag为0

                {

                        LED_G=0;  //绿灯亮

                        LED_R=1;  //红灯灭

                        FENG=1;          //蜂鸣器关

[1] [2]
关键字:51单片机  酒精检测  Proteus仿真 引用地址:51单片机的酒精检测Proteus仿真+源代码

上一篇:51单片机多点18b20温度测量系统
下一篇:基于单片机+ADC0809的数字电流表仿真+源程序+设计报告

推荐阅读最新更新时间:2024-11-05 21:37

ADC0832模数转换51单片机程序与电路图
#include AT89x51.h #include intrins.h #define uint unsigned int #define uchar unsigned char //******************adc0832****************************// sbit CS=P2^3; //使能。 sbit CLK=P2^2;// 时钟 sbit DO=P2^1; // 数据输出 sbit DI=P2^0;//数据输入 char CC = 11001001 ; uchar tab ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
[单片机]
ADC0832模数转换<font color='red'>51单片机</font>程序与电路图
用Proteus学习51单片机之中断
以52单片机来说,一共有6个中断源,其说明如下(序号用于中断程序的编写): 中断源名称 默认级别 序号 说明 INT0 最高 0 外部中断0,由P3.2端口线引入,低电平或下降沿引起 INT1 第3 2 由P3.3端口线引入,低电平或下降沿引起 T0 第2 1 定时器/计数器0中断,由T0计数器计满回零引起 T1 第4 3 定时器/计数器1中断,由T1计数器计满回零引起 T2 最低 5 定时器/计数器2中断,由T2计数器计满回零引起 TI/RI 第5 4 串行口中断,串行端口完成一帧字符发送/接收后引起 中断的允许和关闭,由中断允许寄存器IE控制,而IE又细分为7位,详细控制到每一个中断的开关 位序号 位
[单片机]
用Proteus学习<font color='red'>51单片机</font>之中断
基于AT89C51单片机和传感器实现家庭安全报警系统的设计
家庭安全报警系统家庭安防报警功能是智能家居系统的重要功能,同家庭的各种传感器、功能键、探测器及执行器共同构成家庭的安防体系,是家庭安防体系的“大脑”。报警功能包括防火、防盗、煤气泄露报警及紧急求助等功能,报警系统采用先进智能型控制网络技术、由微机管理控制,实现对匪情、盗窃、火灾、煤气、紧急求助等意外事故的自动报警。然而市场上出现的各类家庭安全报警系统功能虽较齐全,但并不完善,明显的不足之处就是报警号码都是预先存入,而且没有提供人机交互功能,用户如因特殊情况需更换报警电话号码时往往无能为力,其设计显然不够人性化,也给用户带来了诸多不便。明显的不足之处就是报警号码都是预先存入,而且没有提供人机交互功能,用户如因特殊情况需更换报警电话号
[单片机]
基于AT89C<font color='red'>51单片机</font>和传感器实现家庭安全报警系统的设计
51单片机学习:独立按键实验
实验名称:独立按键实验 接线说明: 实验现象:下载程序后,按下“独立按键”模块中K1键,控制D1指示灯亮灭 注意事项: ***************************************************************************************/ #include reg52.h typedef unsigned int u16; //对系统默认数据类型进行重定义 typedef unsigned char u8; //定义独立按键控制脚 sbit KEY1=P3^1; sbit KEY2=P3^0; sbit KEY3=P3^2; sbit KEY4=P3^3; //定义LED
[单片机]
51单片机密码锁制作的程序和流程图
一、基本组成: 单片机小系统+4*4矩阵键盘+1602显示+DC电机 基本电路: 键盘和和显示 键盘接P1口,液晶的电源的开、关通过P2.7口控制 电机(控制口P2.4) 小系统就不贴上来了吧。。。 二、基本功能描述: 1.验证密码、修改密码 a)锁的初始密码是123456(密码最长为10位,最短为1位)。 2.恢复初始密码 a)系统可以恢复初始密码,否则一旦忘记密码而又不能恢复初始密码,该锁就永远打不开。但是又不能让用户自行修改密码,否则其他人也可以恢复该初始密码,使得锁的安全性大大下降。 3.使系统进入低功耗状态 a)在实际使用中,锁只有在开门时才被使用。因而在大多数的时间
[单片机]
<font color='red'>51单片机</font>密码锁制作的程序和流程图
基于51单片机的多任务机制及应用
1 引言 传统的单片机程序一般采用单任务机制,单任务系统具有简单直观、易于控制的优点。然而由于程序只能按顺序依次执行,缺乏灵活性,只能使用中断函数实时地处理一些较短的任务,在较复杂的应用中使用极为不便。嵌入式多任务操作系统的出现解决了这个问题。在多任务系统中可以同时执行多个并行任务,任务之间可以相互跳转。但是嵌入式操作系统在提供强大功能的同时,也带来了代码量大、结构复杂、对硬件要求较高、开发难度大且成本高等问题。而很多时候只需要实现简单的多任务操作就可以满足实际需要,本文设计的这种简单的多任务机制,在只增加极少量C语言代码的前提下,不需使用汇编,无需对原本的程序进行大改动,就可以实现多任务操作。 实时操作系统RTOS的核
[单片机]
51单片机学习笔记(二)_流水灯实验
流水灯实验电路图 一、控制一/多灯亮灭 汇编实现 ;注释 LOOP: ;SETB P1.1 ;(1)熄灭灯 MOV P1,#0FFH; LCALL DELAY ;(2)延时一段时间 ;CLR P1.1 ;(3)点亮灯 MOV P1,#0FDH; LCALL DELAY ;(4)延时一段时间 AJMP LOOP ;(5)跳转到第一句LOOP处 ;以下子程序 DELAY: MOV R7,#250 ; D1: MOV R6,#250 ; D2: DJNZ R6,D2 ;R6=R6-1;IF(R6!=0) GOTO D2; DJNZ R7,D1 ; RET ;返回主程序 END
[单片机]
<font color='red'>51单片机</font>学习笔记(二)_流水灯实验
51单片机设计的超声波测距器
  一、设计要求   设计一个超声波测距器,可以应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。要求测量范围在0.10-3.00m,测量精度1cm,测量时与被测物体无直接接触,能够清晰稳定地显示测量结果。   二、设计思路    超声波传感器及其测距原理    超声波是指频率高于20KHz的机械波。为了以超声波作为检测手段,必须产生超生波和接收超声波。完成这种功能的装置就是超声波传感器,习惯上称为超声波换能器或超声波探头。超声波传感器有发送器和接收器,但一个超声波传感器也可具有发送和接收声波的双重作用。超声波传感器是利用压电效应的原理将电能和超声波相互转化,即在发射超声
[单片机]
<font color='red'>51单片机</font>设计的超声波测距器
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved