基於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();
    }    
  }
   
}        

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM