基於AT89C51單片機煙霧傳感器
阿新 • • 發佈:2017-08-30
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單片機煙霧傳感器