4x4键盘扫描问题

2019-07-18 10:34发布

程序如下:
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
uchar code a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,};
void delay(uchar ms)
{
        uchar i,j;
        for(i=ms;i<ms;i++)
                for(j=0;j<125;j++);
}
uchar saomiao()
{
        uchar gk;
        P2=0x0f;
        gk=P2;
        if(gk==0x0f)
        return(0);
        else return(1);
}
uchar keyscan()
{
        uchar i,j,scancode,n,m,k,w=0,v;
        if(saomiao())
        {
                delay(5);
                if(saomiao())
                {
                        scancode=0xf7;
                        for(i=0;i<4;i++)
                        {
                                P2=scancode;
                                m=P2;n=0x10;
                                for(j=0;j<4;j++)
                                {
                               
                                        k=n&m;
                                        if(k==0)
                                        {
                                                v=w+j;
                                                while(saomiao());
                                                return(v);
                                        }
                                        n=_crol_(n,1);
                                }
                                scancode=_cror_(scancode,1);
                                w+=4;
                        }
                       
            }
            else return(0xff);
    }else return(0xff);
}
void main()
{
        while(1)
        {
                if(saomiao()==0) continue;
                P1=a[keyscan()];
                delay(10);
        }
为什么后三行的按键可以正常运行,而第一行的就不行。。调试时发现当第一行按键按下时程序中k=0x80,不是应该为0吗。。求帮助。

proteus电路图 proteus电路图
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。