qq_35443821
qq_35443821
采纳率100%
2016-11-30 17:22 阅读 2.2k
已采纳

关于51单片机的独立键盘检测

10

在51单片机中,怎么用中断的方式检测按键是否按下?希望最好能有代码。谢谢。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

4条回答 默认 最新

  • 已采纳
    hesongjie Real贺杰 2016-12-01 01:24

    、、。引起中断肯定要设置触发事件,键盘的话你肯定要设置低电平中断或者下降沿中断,然后打开该接口对应的中断,再打开总中断,首先确定该键盘对应的接口是中断接口,传统51一共有两个外部中断接口,中断0(P3.2)和中断1(P3.3)
    也就是说你的按键必须接到这两个口才能引起中断。
    void EX0Init()
    {
    IT0 = 1; //外部中断0为下降沿中断
    EX0 = 1;//外部中断0对应的中断打开
    EA = 1; //打开总中断。
    }
    //一旦有按键按下引起中断,MCU就会自动进入到下面这个程序里
    void EX0Isr() interrupt 0
    {
    //要执行的代码
    }

    点赞 评论 复制链接分享
  • pwj596819850 Pipinggo 2016-12-01 01:18

    按键按下有个电平变化,检测中断的电平是高电平触发还是低电平触发就行了。代码木有啊,早转行了。

    点赞 评论 复制链接分享
  • chunfeng89 -chunfeng- 2016-12-01 13:02

    1、引用楼上的说法,我要补充一点:
    void EX0Init()
    {
    IT0 = 1; //外部中断0为下降沿中断
    EX0 = 1;//外部中断0对应的中断打开
    EA = 1; //打开总中断。
    }
    //一旦有按键按下引起中断,MCU就会自动进入到下面这个程序里,
    由于按键抖动的问题,会频繁进入中断,很不稳定;而且,干扰产生的低电平也很容易引起中断
    void EX0Isr() interrupt 0
    {
    //要执行的代码,
    }

    2、可以改为这样,采用定时中断,去扫描按键,定时查询,这样既不会调用delay这种耗时的延时,
    也避免了频繁进入中断。
    初始化定时器
    void timer1_init()
    {
    }

    void timer_sr() interrupt 1()
    {
    //做一个1ms的定时
    //1ms定时到了,放一个标志位 flag = 1;
    }

    void mian()
    {
    while(1)
    {
    if(flag == 1)
    {
    //执行按键扫描处理
    }
    }
    }

    点赞 评论 复制链接分享
  • sukiyob sukiyob 2016-12-16 05:29

    传统51一共有两个外部中断接口,中断0(P3.2)和中断1(P3.3)

    点赞 评论 复制链接分享

相关推荐