外部中斷:實現LED燈的亮和滅


實驗:按一下獨立按鍵,燈亮,再按一次,燈滅

之前做過的獨立按鍵實驗也能實現這個功能,但是會占用很多CPU資源,不是好的方法,這里使用外部中斷來實現比較合適

效果和獨立按鍵實驗一樣

1. 下降沿方式觸發:外部中斷0

#include <reg52.h>

#define u16 unsigned int
#define u8  unsigned char
	
sbit LED1 = P2^0;		// 要點亮的LED燈
sbit k3 = P3^2;			// 控制LED燈的獨立按鍵

// 延遲函數,延遲10us
void delay(u16 time)
{
	while(time--);
}

// 中斷條件
void int0Init()
{
	EA = 1;		// 中斷總允許位
	EX0 = 1;	// 外部中斷0允許位
	// 中斷標志:邊沿觸發方式(下降沿有效),因為獨立按鍵常態下是斷開的,處於高電平,按下按鍵后為低電平
	IT0 = 1;	
}

// 主函數
void main()
{
	// 中斷初始化
	int0Init();
	// 中斷函數
	while(1);
}

// 中斷函數
void int0() interrupt 0
{
	// 消抖,延遲10ms
	delay(1000);
	if(k3 == 0)		// 按下k3按鍵 
	{
		LED1 = ~LED1;	// LED燈切換狀態
	}
}

1. 下降沿方式觸發:外部中斷1

#include <reg52.h>

#define u16 unsigned int
#define u8  unsigned char
	
sbit LED1 = P2^0;		// 要點亮的LED燈
sbit k4 = P3^3;			// 控制LED燈的獨立按鍵

// 延遲函數,延遲10us
void delay(u16 time)
{
	while(time--);
}

// 中斷條件
void int1Init()
{
	EA = 1;		// 中斷總允許位
	EX1 = 1;	// 外部中斷1允許位
	// 中斷標志:邊沿觸發方式(下降沿有效),因為獨立按鍵常態下是斷開的,處於高電平,按下按鍵后為低電平
	IT1 = 1;	
}

// 主函數
void main()
{
	// 中斷初始化
	int1Init();
	// 中斷函數
	while(1);
}

// 中斷函數
void int1() interrupt 2
{
	// 消抖,延遲10ms
	delay(1000);
	if(k4 == 0)		// 按下k3按鍵 
	{
		LED1 = ~LED1;	// LED燈切換狀態
	}
}

 以上是外部中斷0和外部中斷1的實驗,可以用外部中斷0和外部中斷1控制同一盞燈,模擬兩個開關控制同一盞燈,按下一個開關,燈亮,去按下另外一個開關,燈滅

 


免責聲明!

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



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