打印

小白求助,矩阵键盘检测问题

[复制链接]
946|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小甲鱼123|  楼主 | 2017-3-29 19:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void keyscan()
{
        uchar temp;//
        P3 = 0xf0;
        temp=(P3 & 0xf0);
       
        if(temp != 0xf0)//
        {
               
                delay(5);//
                temp=P3 & 0xf0;
                if(temp != 0xf0)//
                {
                        P3 = temp | 0x0f;
                        keyvalue = P3;//
                        while((P3 = temp | 0x0f) == keyvalue);//
                }
        }
         
}


不用变量temp时,直接if(p3 & 0xf0 != 0xf0),检测不了矩阵键盘按下是什么原因呢?

相关帖子

沙发
小甲鱼123|  楼主 | 2017-3-29 20:31 | 只看该作者
按多了,会检测不到是怎么回事儿?

使用特权

评论回复
板凳
小甲鱼123|  楼主 | 2017-3-29 20:32 | 只看该作者
void main()
{
         for(;;)
        {
               
                keyscan();
                if(1 == key_deal(keyvalue))
                {
                  led1 = 0;
                }
                if(4 == key_deal(keyvalue))
                {
                  led1 = 1;
                }
        }
}

void keyscan()
{
        uchar temp;
        P3 = 0xf0;
        temp=(P3 & 0xf0);
        if(temp != 0xf0)// ÅжÏÊÇ·ñÓа´¼ü°´ÏÂ
        {
               
                delay(5);// Ïû¶¶
                temp=P3 & 0xf0;
                if(temp != 0xf0)// ÔÙ´ÎÅжϣ¬È·¶¨ÊÇ·ñÕæµÄÓа´¼ü°´ÏÂ
                {
                        P3 = temp | 0x0f;//°Ñ¸ßËÄλµÄÖµ¸³¸øP3£¬´Ó¶ø¿ÉÒԵõ½Ò»¸ö°ËλµÄ¼üÖµÂë
                        keyvalue = P3;// »ñÈ¡¼üÖµÂë
                        while((P3 = temp | 0x0f) == keyvalue);//ËÉÊÖ¼ì²â
                }
        }
         
}

uchar key_deal(uchar temp)//
{
        uchar num = 0;
        switch(temp)
        {
                case 0xee : num = 1;
                        break;
                case 0xed : num = 5;
                        break;
                case 0xeb : num = 9;
                        break;
                case 0xe7 : num = 13;
                        break;

                case 0xde : num = 2;
                        break;
                case 0xdd : num = 6;
                        break;
                case 0xdb : num = 10;
                        break;
                case 0xd7 : num = 14;
                        break;

                case 0xbe : num = 3;
                        break;
                case 0xbd : num = 7;
                        break;
                case 0xbb : num = 11;
                        break;
                case 0xb7 : num = 15;
                        break;

                case 0x7e : num = 4;
                        break;
                case 0x7d : num = 8;
                        break;
                case 0x7b : num = 12;
                        break;
                case 0x77 : num = 16;
                        break;

                default : ;
        }

        return num;
}

使用特权

评论回复
地板
dirtwillfly| | 2017-3-30 21:00 | 只看该作者
51单片机?
电路是怎么样的?

使用特权

评论回复
5
小甲鱼123|  楼主 | 2017-3-30 21:18 | 只看该作者
dirtwillfly 发表于 2017-3-30 21:00
51单片机?
电路是怎么样的?

对啊,新手当然是学51

使用特权

评论回复
6
小甲鱼123|  楼主 | 2017-3-30 21:21 | 只看该作者
dirtwillfly 发表于 2017-3-30 21:00
51单片机?
电路是怎么样的?

行线依次接P3的第四位,列线接高四位,led1接的是P1^0

使用特权

评论回复
7
hbin85| | 2017-4-18 14:50 | 只看该作者
(p3 & 0xf0 != 0xf0)
优先级问题
!= 优先级高于&运算符
if((p3 & 0xf0) != 0xf0)这样应该就可以了

使用特权

评论回复
8
小甲鱼123|  楼主 | 2017-5-1 14:48 | 只看该作者
hbin85 发表于 2017-4-18 14:50
(p3 & 0xf0 != 0xf0)
优先级问题
!= 优先级高于&运算符

谢谢啊,C语言运算符不熟悉,真是尴尬啊

使用特权

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

本版积分规则

3

主题

10

帖子

0

粉丝