微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机矩阵键盘和独立键盘冲突

51单片机矩阵键盘和独立键盘冲突

时间:10-02 整理:3721RD 点击:
请问在用51单片机做一个计算器,4*4矩阵键盘和四个独立按键都要使用到,如何扫描按键才能使它们不冲突,想请教关键的代码是怎样的?

uchar keyscan()
{
               
                        P3=0xfe;
                        temp=P3;
                        temp=temp&0xf0;
                        while(temp!=0xf0)
                                {
                                        delay(5);
                                        temp=P3;
                                        temp=temp&0xf0;
                                        while(temp!=0xf0)
                                        {
                                                temp=P3;
                                        switch(temp)
                                                {
                                                case 0xee:num=0;
                                                                break;
                                                        case 0xde:num=1;
                                                                break;
                                                        case 0xbe:num=2;
                                                                break;
                                                        case 0x7e:num=3;
                                                                break;
                                                }
                                                while(temp!=0xf0)
                                                {
                                                    temp=P3;
                                                        temp=temp&0xf0;
                                                }
                                        }
                                }
                        P3=0xfd;
                        temp=P3;
                        temp=temp&0xf0;
                        while(temp!=0xf0)
                                {
                                        delay(5);
                                        temp=P3;
                                        temp=temp&0xf0;
                                        while(temp!=0xf0)
                                        {
                                                temp=P3;
                                        switch(temp)
                                                {
                                                case 0xed:num=4;
                                                                break;
                                                        case 0xdd:num=5;
                                                                break;
                                                        case 0xbd:num=6;
                                                                break;
                                                        case 0x7d:num=7;
                                                                break;
                                                }
                                                        while(temp!=0xf0)
                                                {
                                                    temp=P3;
                                                        temp=temp&0xf0;
                                                }
                                        }
                                }

                        P3=0xfb;
                        temp=P3;
                        temp=temp&0xf0;
                        while(temp!=0xf0)
                                {
                                        delay(5);
                                        temp=P3;
                                        temp=temp&0xf0;
                                        while(temp!=0xf0)
                                        {
                                                temp=P3;
                                        switch(temp)
                                                {
                                                        case 0xeb:num=8;
                                                                break;
                                                        case 0xdb:num=9;
                                                                break;
                                                        case 0xbb:num=10;
                                                                break;
                                                        case 0x7b:num=11;
                                                                break;
                                                }
                                                while(temp!=0xf0)
                                                {
                                                    temp=P3;
                                                        temp=temp&0xf0;
                                                }
                                        }
                                }

                        P3=0xf7;
                        temp=P3;
                        temp=temp&0xf0;
                        while(temp!=0xf0)
                                {
                                        delay(5);
                                        temp=P3;
                                        temp=temp&0xf0;
                                        while(temp!=0xf0)
                                        {
                                                temp=P3;
                                        switch(temp)
                                                {
                                                       
                                                        case 0xe7:num=12;
                                                                break;
                                                        case 0xd7:num=13;
                                                                break;
                                                        case 0xb7:num=14;
                                                                break;
                                                        case 0x77:num=15;
                                                                break;
                                                }
                                                        while(temp!=0xf0)
                                                {
                                                    temp=P3;
                                                        temp=temp&0xf0;
                                                }
                                        }
                                }
                               
         return num;
}
这样就不冲突啦,每按一个键返回num值

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

网站地图

Top