|
请教一个问题:51单片机用外部中断通过矩阵按键控制led的亮灭。想要达到目的:每一次按键被触发,LED的状态翻转一次。
单片机电路图如下:
我自己写的程序如下:下载后单片机的效果是按下按键led小灯点亮,一直保持着点亮的状态。请问怎样修改或者怎样优化程序?让它变成每按一次,led的状态翻转一次。
#include <reg52.h>
sbit LED = P0^0;
sbit wai = P3^2;
sbit key = P2^7;
void main(void)
{
int i;
P2 = 0XF7; //矩阵按键变为独立按键
P0 = 0x00; //熄灭led
IT0 = 1; //下降沿触发
EX0 = 1; //开启INT0中断
EA = 1; //开启总中断
if(key == 0)
{
for(i=0;i<1000;i++); //按键消抖
if(key==0)
{
wai = 0; //令P3^2引脚电平为0,下降沿出发外部中断
while(1);
}
}
}
void int0_process() interrupt 0
{
unsigned int i;
if(key == 0)
{
for(i=0;i<1000;i++);
LED = ~LED;
}
key = 0;
}
|
|