打印

第四个和第八个按键按下去灯不亮,其他灯都亮……

[复制链接]
1190|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jxmzzr|  楼主 | 2013-11-13 15:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/******************************************************************/
/*               按键状态显示试验                                                                                  *
/*                                                                                                                       *
/*  连接方法:连接JP8(P1)与JP4(按钮接口)                                    *
/*                              JP11 (P2)与JP1(LED接口)                                                   *
                                                                                                                                  *
/*按键则点亮LED灯,8路指示灯接p0口                                                           *
/******************************************************************/
#include <reg51.h>
#include <intrins.h>

#define uchar unsigned char
#define uint  unsigned int

uchar  temp;
uchar  key=233;

void  delay(uchar x)                                                           
{ uchar j;
    while((x--)!=0)
    { for(j=0;j<125;j++)
         {;}
    }
}
void  keyscan(void)
{         
        temp = 0;
    P1=0xF0;                 //高四位输入   行为高电平  列为低电平
    delay(1);
        temp=P1;                 //读P1口
    temp=temp&0xF0;                         //屏蔽低四位
    temp=~((temp>>4)|0xF0);         
    if(temp==1)          // p1.4 被拉低
        key=0;
    else if(temp==2)   // p1.5 被拉低
        key=1;
    else if(temp==4)   // p1.6 被拉低
        key=2;
    else if(temp==8)   // p1.7 被拉低
         key=3;


    P1=0x0F;                //低四位输入  列为高电平 行为低电平
    delay(1);
        temp=P1;                //读P1口      
    temp=temp&0x0F;
    temp=~(temp|0xF9);
    if(temp==2)                   // p1.1  被拉低
        key=key+0;
    else if(temp==4)   // p1.2  被拉低
        key=key+4;

        if(key == 0)        P0 = 0xFE;
        if(key == 1)          P0 = 0xFD;
        if(key == 2)           P0=  0xFB;
        if(key == 3)           P0 = 0xF7;
        if(key == 4)           P0 = 0xEF;
        if(key == 5)           P0 = 0xDF;
        if(key == 6)        P0 = 0xBF;
        if(key == 7)           P0 = 0x7F;         
  }
/*************************************************************/
/*                                                           */
/*判断键是否按下                                             */
/*                                                           */
/*************************************************************/

void  keydown(void)
{  
          P1=0xF8;
        if(P1!=0xF8)  //判断按键是否按下 如果按钮按下 会拉低P1其中的一个端口
        {
          keyscan();
    }

}

main()
{
   while(1)
   {
                P0 = 0xFF;
                keydown();
         }
}


这个程序我是任选矩阵按键中的两行控制八个LED灯,我选的是前两行。烧录完成后第四个和第八个按键按下去灯不亮,其他灯都亮。什么情况?求解释。
沙发
拿起书本| | 2013-12-5 16:01 | 只看该作者
这种问题最有可能的原因就是硬件问题了,仔细检查一下吧。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

460

主题

2188

帖子

12

粉丝