标题: 把按键放在单片机外部中断0按的时候按一下跳几次? [打印本页]

作者: 高低都不调    时间: 2021-8-1 21:21
标题: 把按键放在单片机外部中断0按的时候按一下跳几次?
//晶振12MHz
//在P1_0输出20KHz,0-255级可调占空比 每一级0.39%
#include<at89x51.h>
unsigned char PWM=0x01;//PWM的百分比
sbit KEY=P1^5;
sbit L1=P1^1;//档位显示LED
sbit L2=P1^2;
sbit L3=P1^3;
sbit L4=P1^4;

unsigned int cnt;
void InitT0(void)
{
TMOD=0x02;//定时器0工作方式2 8位自动重装
TH0=255;//pwm 50us 20khz
TL0=255;
TR0=1;//开始计时
ET0=1;//允许定时器中断
EX0=1;//开启外部中断1
EA=1;//开启总中断
}
void main(void)
{
InitT0();//初始化T0定时器
while(1)
{
}
}
void Timer0(void) interrupt 1//用于PWM的定时器
{
static unsigned char counter=0;//记录中断次数
counter++;
if(counter >= PWM) P1_0 = 0; else P1_0 = 1;
}

void INTERR(void) interrupt 0
        {
        cnt++;
                {
                switch(cnt)
                        {
                        case 1:PWM=0x00;L1=1;L2=1;L3=1;L4=1;break;
                         case 2:PWM=0x37;L1=0;L2=1;L3=1;L4=1;break;
                         case 3:PWM=0x7D;L1=1;L2=0;L3=1;L4=1;break;
                         case 4:PWM=0xAF;L1=1;L2=1;L3=0;L4=1;break;
                        case 5:PWM=0xFF;L1=1;L2=1;L3=1;L4=0;cnt=0;break;
                         default:break;
                        }
                }
        }




希望各位指点一下。谢谢

作者: lkc8210    时间: 2021-8-1 21:21
IT0=1;        //设置外部中断0的触发方式为下降沿

  进入中断后停止中断(EX0=0;)
  直到中断键放开后再开延时开启中断
If(P32==1){
Delay(10);
EX0=1;
}
作者: 优雅的刺猬    时间: 2021-8-1 22:13
没添加去抖动的功能,加上就好了
作者: 高低都不调    时间: 2021-8-1 22:28
优雅的刺猬 发表于 2021-8-1 22:13
没添加去抖动的功能,加上就好了

怎么加。我试着加了一下结果都按键都没有反应,




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1