微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 请大家帮忙给看看,我这个矩阵键盘哪里有问题

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

时间:10-02 整理:3721RD 点击:
请大家帮忙给看看,我这个矩阵键盘哪里有问题,不知道为啥,有时候要多按几下才会有反应,绝非键盘问题。
#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--);
}

新手一个   case   switch       case 0xee: key=1; FMQ=0; break;  这三个不懂
还有sbit能不能弄点有实际意义的英文单词或者拼音还有那个uchar aa
你自己明白别人要看好久

很有可能就是扫描周期太长,在处理按键结果的过程比较长,其实你可以想一想,你的按键还可以简单很多,一加入while循环就有衍射出很多问题,尤其是代码很多的时候


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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top