外部中断:实现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