基于AT89C51单片机烟雾传感器

 

#include <reg51.h>
#include <stdio.h>
#define uchar unsigned char           //宏定义无符号字符型
#define uint  unsigned  int           //宏定义无符号整型

sbit ST=P3^0;   //A/D启动转换信号
sbit OE=P3^1;   //数据输出允许信号
sbit EOC=P3^2;  //A/D转换结束信号
sbit CLK=P3^3;  //时钟脉冲 
uint i,j,AD0809;        //定义数据类型

//延时子函数
void delay()
{
   i = 1000;
   while(i--);
}
/*************************************************************************
                                CLK振荡信号        
**************************************************************************/
void timer0( ) interrupt 1 //定时器0工作方式1
{

TH0=(65536-2)/256;          //重装计数初值
TL0=(65536-2)%256;          //重装计数初值
CLK=!CLK;                          //取反
}

 /*************************************************************************
                                主函数        
**************************************************************************/
 void main()
{ 
TMOD=0X01;                          //定时器中断0

CLK=0;                                  //脉冲信号初始值为0
TH0=(65536-2)/256;          //定时时间高八位初值
TL0=(65536-2)%256;          //定时时间低八位初值
EA=1;                                  //开CPU中断
ET0=1;                                  //开T/C0中断
TR0=1;
 while(1)                           //无限循环
       {
        ST=0;                                //使采集信号为低
        ST=1;                                //开始数据转换
        ST=0;                                //停止数据转换
        while(!EOC);                //等待数据转换完毕
        OE=1;                                //允许数据输出信号
        AD0809=P1;                    //读取数据
        OE=0;                                //关闭数据输出允许信号
        if(AD0809>=251)                //电压显示不能超过5V
    {
        AD0809=250;
       P2 = 0xE0;//报警闪烁LED灯
      delay();
      P2 =~0xE0;
      delay();
      P0 = ~0x06;//数码管报警显示1
      delay();
      P0 = ~0x00;
      delay();
    }    
  }
   
}        

    

 

posted @ 2017-08-30 16:54  徐景祥  阅读(3883)  评论(0编辑  收藏  举报