小甲鱼123的个人空间 https://bbs.21ic.com/?2473954 [收藏] [复制] [RSS]

日志

矩阵键盘

已有 219 次阅读2017-3-29 20:22 |个人分类:51单片机学习日志|系统分类:单片机| 键盘

        很久之前写的矩阵键盘检测程序,没有验证过行不行。今天实验了下,思路没有问题,但是问题大大的。4x4矩阵键盘检测不了,顿觉得好郁闷啊。小白一个,还没学会怎么调试,自己想不出来问题在哪啊,只能求助师兄的帮助。在师兄的帮助下调试下,改了一两个地方,可以检测到按键按键。大学了,能有教你学习你就很幸运了。今天又涨知识了。
        我反复检验键盘检测有没有问题,还是发现了问题。师兄帮忙调试成功的程序还是有bug,按键按了十几二十次后按键会检测不到。问题又来,每一次解决问题何尝不是在成长呢?继续吧!

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;
}

求bug所在?

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)