簡單的獨立按鍵控制繼電器

/***************************
	獨立按鍵控制繼電器
***************************/
#include <reg52.h>

#define uchar unsigned char

sbit KEY = P1 ^ 0;
sbit RelayEN = P0 ^ 0;				   //定義繼電器開啓信號

void Timer0Init();					   //聲明定時器0初始化函數
void RelayProcess();				   //聲明斷電器處理函數

uchar count = 0;					   //計秒數

void main()							   //主函數
{
	RelayEN = 1;					   //開機時關閉繼電器,否則一上電繼電器有動作;

	Timer0Init();
	RelayProcess();
	
}

void Timer0Init()					   //定時器初始化函數
{
	TMOD |= 0x01;					   //“|”使用多個定時器時不受影響
	TH0 = 0xFC;						   //定時1MS
	TL0 = 0x67;
	TR0 = 1;						   //開啓定時器0
	EA = 1;							   //開啓總中斷
	ET0 = 1;						   //開啓定時器0中斷
}

void RelayProcess()					  //繼電器處理函數
{
	KEY = 0x01;						  //讀外部狀態時,先使端口輸出高電平;
	while (1)
	{
		if(!KEY)					  //判定有無按鍵按下
		{
			if(count >= 20)			  //判定秒數是否達到20MS,即去抖
			{
				count = 0;
				if(!KEY)
				{
					RelayEN = ~RelayEN;//當按鍵按下時,改變繼電器的狀態
					while(!KEY);	   //等待按鍵釋放;
				}
			}
		}
	}
	
}

void Timer0() interrupt 1				//定時器0中斷函數
{
	TH0 = 0xFC;							//重新賦值給定時器0
	TL0 = 0x67;
	count++;							//計秒數
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章