1. 程式人生 > >基於AT89C51單片機煙霧傳感器

基於AT89C51單片機煙霧傳感器

rup void 技術 spa 脈沖 sbit interrupt 類型 com

技術分享

技術分享

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

基於AT89C51單片機煙霧傳感器