找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2590|回复: 2
收起左侧

酒精浓度传感器

[复制链接]
ID:103184 发表于 2016-1-14 12:58 | 显示全部楼层 |阅读模式
#include <reg52.h>
#include <stdio.h>
//**************定义管脚***************//
//sbit P0_7=P0^7;      //小数点
sbit P1_0_A=P1^0;      //74LM138A相连接
sbit P1_1_B=P1^1;      //74LM138B相连接
sbit P1_2_C=P1^2;      //74LM138C相连接
sbit SAT=P1^3;         //SATAD转换启动信号,输入高电平有效
sbit OE=P1^4;          //OE为输出允许信号,高电平有效
sbit EOC=P3^2;         //AD转换结束信号,转换结束时,此端输出一个高电平
sbit LED_RED=P1^5;     //低电平点亮
sbit LED_BLUE=P1^6;    //低电平点亮
sbit SPEAKER=P1^7;     //高电平报警
unsigned int   DATA;       
//****************七段码*****************//--->高电平点亮七段码
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,
                            0x6d,0x7d,0x07,0x7f,0x6f,0x80};
void  Xint0()  interrupt   0  using     1   //中断INT0函数
{         
      
          OE=1;
      DATA=P2;
      OE=0;
          
}
//****************延时函数******************//
void delay_1ms(unsigned int i)
{   
       unsigned char x, j;
      for(j=0;j<i;j++)
      for(x=0;x<=148;x++);
}
//************ADC0809转换函数**************//
void ADC0809()
{   
     SAT=0;
         EOC=1;               
     delay_1ms(1);
     SAT=1;
         EOC=0;               
     delay_1ms(1);
     SAT=0;
         EOC=1;
     delay_1ms(5);
}
//*************Display函数*******************//
//--->Display函数的功能:将采集到的电压值转换为实际气体浓度值进行显示
void Display(unsigned int date)
{        
    unsigned int ge,shi,bai,qian;
        qian=date/1000%10;//--->提取千位
        bai=date/100%10;  //--->提取百位
        shi=date/10%10;   //--->提取十位
        ge=date%10;       //--->提取个位
    P1_2_C=0; //C
    P1_1_B=0; //B
    P1_0_A=0; //A      --->选择千位数码管
    P0=table[qian];  //--->将千位的数据送给千位
    delay_1ms(3);
    P1_2_C=0;//C
    P1_1_B=0;//B
    P1_0_A=1;//A      --->选择百位数码管
    P0=table[bai];  //--->将百位的数据送给百位
    delay_1ms(3);
    //P0=table[10];    //--->点亮小数点
    //delay_1ms(3);
    P1_2_C=0;//C
    P1_1_B=1;//B
    P1_0_A=0;//A      --->选择十位数码管
    P0=table[shi];  //--->将十位的数据送给十位
    delay_1ms(3);
    //P0=table[10];    //--->点亮小数点
    //delay_1ms(3);
    P1_2_C=0;//C
    P1_1_B=1;//B
    P1_0_A=1;//A      --->选择个位数码管
    P0=table[ge];   //--->将个位的数据送给个位
    delay_1ms(3);  
}
//*****************主函数******************//
void main()
{
        ET0=0;
        IT0=1; //INT0为边沿触发
        EX0=1; //中断INT0允许
        EA=1;  //开放中断
    while(1)       
    {
        ADC0809();
        DATA=DATA*4;          //数据的处理
        Display(DATA);   
       if(DATA<400)    //--->判断是否需要报警
              {            
                  SPEAKER=0; //--->不报警
                  LED_BLUE=0;
             }
       else if (DATA>=800)     
          {              
                SPEAKER=1;//--->严重报警
                LED_RED=0;
                        LED_BLUE=1;
                delay_1ms(2);
                SPEAKER=0;
                LED_RED=1;
                delay_1ms(2);
                SPEAKER=1;
                LED_RED=0;
           }
       else   
             {
                 SPEAKER=1;   //--->一般报警
                 LED_RED=1;
                         LED_BLUE=1;
                         delay_1ms(2);
                 SPEAKER=0;
                 delay_1ms(2);
                 SPEAKER=1;
            }
     }
}

回复

使用道具 举报

ID:1 发表于 2016-1-15 05:59 | 显示全部楼层
楼主 你上传的这3个程序有什么不不同?有没有原理图上传一个?(可加200黑币)
回复

使用道具 举报

ID:119164 发表于 2016-5-7 22:05 来自手机 | 显示全部楼层
有兴趣做产品 QQ903735643
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表