搜档网
当前位置:搜档网 › 51单片机外部中断(按键)

51单片机外部中断(按键)

#include

#define uchar unsigned char
#define uint unsigned int

sbit k1=P3^2;
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;


uchar ws=0;

void delay_ms(unsigned int xms) //ms级延时子程序
{
unsigned int x,y;
for(x=xms;x>0;x--)
for(y=130;y>0;y--);
}

void key_scan() interrupt 0 //使用了外部中断0的键盘扫描子函数
{
if(k1==0) //有键按下吗?(k1=0 ?)
{
delay_ms(10); //延时消抖
if(k1==0) //确实是有键按下,则:
{
ws++;
if(ws==3)
ws=0;
while(!k1); //等待按键放开
}
}
switch(ws)
{
case 0:
led1=0;
led2=1;
led3=1;
break;
case 1:
led1=1;
led2=0;
led3=1;
break;
case 2:
led1=1;
led2=1;
led3=0;
break;
}
}

void outside_init() //外部中断初始化
{
EA=1; //开总中断
EX0=1; //打开外部中断0
IT0=1; //设置为下降沿触发
}

void main()
{
P1=0xff;
led1=0;
outside_init();
while(1)
{
delay_ms(3000);
}
}

相关主题