请大家帮忙给看看,我这个矩阵键盘哪里有问题

2019-07-16 04:19发布

请大家帮忙给看看,我这个矩阵键盘哪里有问题,不知道为啥,有时候要多按几下才会有反应,绝非键盘问题。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar aa;
uchar code ss[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e};
sbit FMQ=P1^5;
sbit SMG1=P1^0;
sbit SMG2=P1^1;
sbit SMG3=P1^2;
sbit SMG4=P1^3;
void display(uchar aa);
uchar keysun();
void delay(uint z);
void main()
{

        aa=0;
        SMG1=0;
        SMG2=0;
        SMG3=0;
        SMG4=0;
        while(1)
        {
                display(keysun());
        }
}
void display(uchar aa)
{
        P0=ss[aa];
}
uchar keysun()
{
        uchar key,temp;
        P2=0xfe;
        temp=P2;
        while(temp!=0xf0)
        {
                delay(1);
                temp=P2;
                while(temp!=0xf0)
                {
                        switch(temp)
                        {
                                case 0xee: key=1; FMQ=0; break;
                                case 0xde: key=2; FMQ=0; break;
                                case 0xbe: key=3; FMQ=0; break;
                                case 0x7e: key=4; FMQ=0; break;                               
                        }
                        while(temp!=0xf0)
                        {
                                delay(1);
                                temp=P2;
                                temp=temp&0xf0;                       
                        }
                }
        FMQ=1;
        display(key);

        }
        return key;
}
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
DQHWX
1楼-- · 2019-07-16 09:28
新手一个   case   switch       case 0xee: key=1; FMQ=0; break;  这三个不懂·······

还有sbit能不能弄点有实际意义的英文单词或者拼音·······还有那个uchar aa

你自己明白别人要看好久
lovezjf234
2楼-- · 2019-07-16 11:42
很有可能就是扫描周期太长,在处理按键结果的过程比较长,其实你可以想一想,你的按键还可以简单很多,一加入while循环就有衍射出很多问题,尤其是代码很多的时候
n109
3楼-- · 2019-07-16 14:20

P2=0xfe;
temp=P2;
之后加句
temp=temp&0xf0;
试试看

一周热门 更多>