74HC08做外部中断实现按键快速响应的方法—day6
74HC08管脚图如下所示:
四组与门输入。
其真值表如下图所示:
Y1=1A&1B
Y2=2A&2B
Y3=3A&3B
Y4=4A&4B
硬件电路如下图所示:
上述实现逻辑:
当SW17按下时 3Y=1Y&2Y=1B&1A&2B&2A
当有按键按下时P32通过外部中断0下降沿方式判断当前是哪个按键按下的,解决软件中延时较多造成按键反应迟钝的问题。挺好用的,哈哈哈,但是有点浪费了,但是效果挺好的。
实现代码如下:
#include <reg51.h>
void Dire_Inte_Fu() interrupt 0 using 0 //51单片机外部中断0使用的是interrupt 0 产生中断信号
{
if(P2 != 0XFF) //如果P2端口有按键按下
{
if(0xf7 == P2) //判断当前是哪一个按键按下
{
ucDataKey[0] = 0x01; //使能信号灯
}
else if(0XFB == P2) //判断当前是哪一个按键按下
{
ucDataKey[0] = 0x02;
}
else if(0XFD == P2) //判断当前是哪一个按键按下
{
ucDataKey[0] = 0x04;
}
else if(0XFE == P2) //判断当前是哪一个按键按下
{
ucDataKey[0] = 0x08;
}
}
SendData(ucDataKey[0], 0x00);
}
void Init_Fun()
{
SendData(0x00, 0x00);
}
void main(void)
{
/*uchar Key_Value,Key1,Key2,Key3,Key4;
uint count = 0; */
P2 = 0xff;
//SendData(0X00, 0x00);
EX0 = 1; //开外部中断0
IT0 = 1; //使用下降沿中断
EA = 1; //开总中断
Init_Fun();
for(;;) //while(1){}
{
Delay1ms(2000);
Delay1ms(2000);
}
}