找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1960|回复: 3
收起左侧

把按键放在单片机外部中断0按的时候按一下跳几次?

[复制链接]
ID:190152 发表于 2021-8-1 21:21 | 显示全部楼层 |阅读模式
100黑币
//晶振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;
                        }
                }
        }




希望各位指点一下。谢谢

最佳答案

查看完整内容

IT0=1; //设置外部中断0的触发方式为下降沿 进入中断后停止中断(EX0=0;) 直到中断键放开后再开延时开启中断 If(P32==1){ Delay(10); EX0=1; }
回复

使用道具 举报

ID:161164 发表于 2021-8-1 21:21 | 显示全部楼层
IT0=1;        //设置外部中断0的触发方式为下降沿

  进入中断后停止中断(EX0=0;)
  直到中断键放开后再开延时开启中断
If(P32==1){
Delay(10);
EX0=1;
}
回复

使用道具 举报

ID:336165 发表于 2021-8-1 22:13 | 显示全部楼层
没添加去抖动的功能,加上就好了
回复

使用道具 举报

ID:190152 发表于 2021-8-1 22:28 | 显示全部楼层
优雅的刺猬 发表于 2021-8-1 22:13
没添加去抖动的功能,加上就好了

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表