找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1971|回复: 2
打印 上一主题 下一主题
收起左侧

利用中断方式控制按键次数不同时亮灯不同,但按键后灯都不亮。哪里错了?

[复制链接]
跳转到指定楼层
楼主
ID:316425 发表于 2018-5-6 15:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "reg51.h"

sbit led1=P2^4;
sbit led2=P2^5;
sbit led3=P2^6;
sbit led4=P2^7;
sbit k1=P2^0;
sbit k2=P2^1;
sbit k4=P3^3;

unsigned char presskeynum=0;

void delay(unsigned int i)   
{
    unsigned int j,k;
  for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}


void key()
{
                 if(presskeynum==1)
        {

                if(k1==0)
                        {
                        delay(30);
                        led1=0;
                               
                        }
                        if(k2==0)
                                {
                                        delay(30);
                                        led2=0;
        }
               
  }               
                if(presskeynum==2)
        {

                if(k1==0)
                        {
                        delay(10);
                        led3=0;
                        }
                        if(k2==0)
                                {
                                        delay(10);
                                        led4=0;
        }
               
        }
       
}

void Int0INit()
{
IT0=1;
EX0=1;
EA=1;
}


       
void main()
{
       
        led1=1;
  led2=1;
        led3=1;
  led4=1;
        Int0INit();



         while(1);
}


void Int0() interrupt 0
{


delay(10);
        if(k4==0)
        {
               
         presskeynum++;
                if(presskeynum==3)
                        presskeynum=0;
                else key();

        }



       

}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:322985 发表于 2018-7-10 18:16 | 只看该作者
我用买的开发板,可能有的引脚不一样,就比如我的P3^2口是外部中断0,它对应的是k3按键
回复

使用道具 举报

板凳
ID:322985 发表于 2018-7-10 18:20 | 只看该作者
然后我感觉那个k2,和K1都没有用,
你看一下我改的程序
#include "reg51.h"

sbit led1=P2^4;
sbit led2=P2^5;
sbit led3=P2^6;
sbit led4=P2^7;

sbit k3=P3^2;
sbit k4=P3^3;

unsigned char presskeynum=0;

void delay(unsigned int i)   
{
    unsigned int j,k;
    for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}


void key()
{
                if(presskeynum==1)        //开关按下1次
               {
               
                        delay(30);
                        led1=0;                 //P2^4灯亮         
                    
              
                             delay(30);
                             led2=0;                //亮
                          
               
  }               
                if(presskeynum==2)                                 //按下2次 按下两次怎么判断啊
        {

               
                        delay(10);
                        led3=0;                        //         P2^6灯亮
               
                                        delay(10);
                                        led4=0;
                                                                                led1=~led1;
                                                                                led2=~led2;
                                                                               


               
        }
        
}

void Int0INit()                //外部中断必须要的三个条件
{
IT0=1;                           //外部中断触发方式选择0:低电平触发;1:下降沿触发
EX0=1;
EA=1;                           //总
}


        
void main()
{
        
        led1=1;
        led2=1;
        led3=1;
        led4=1;           //全是暗的
        Int0INit();
                          

         while(1);
}


void Int0() interrupt 0
{
            delay(100);         //消抖
        if(k3==0)
        {         
                presskeynum++;
                if(presskeynum==3)
                   presskeynum=0;
                else key();

        }      
}
功能跟你的想象的可能有点不一样
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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