关于CT107D开发板矩阵按键前两列不工作问题的研究

版权声明:本文为博主原创文章,转载请注明原创链接! https://blog.csdn.net/qq_34706280/article/details/79380810

CT107D开发板矩阵按键原理图如下所示:

这里写图片描述

其中CON3的1引脚和2引脚相连构成矩阵键盘。

//经典矩阵按键处理函数
unsigned char keyProcess(void)
{
    unsigned char keyTemp = 0;
    unsigned char keyValue = 0;
    unsigned char P3_Value = 0;

    P3 = 0xf0;
    if(P3 != 0xf0)
    {
        Delay15ms();
        if(P3 != 0xf0)
        {
            P3_Value = P3;
            switch(P3_Value)
            {
                case 0xe0:
                {
                    keyTemp = 1;
                }break;
                case 0xb0:
                {
                    keyTemp = 2;
                }break;
                case 0xd0:
                {
                    keyTemp = 3;
                }break;
                case 0x70:
                {
                    keyTemp = 4;
                }break;
            }
        }
    }

    P3 = 0x0f;
    if(P3 != 0x0f)
    {
        Delay15ms();
        if(P3 != 0x0f)
        {
            P3_Value = P3;
            switch(P3_Value)
            {
                case 0x0e:
                {
                    keyValue = keyTemp;
                }break;
                case 0x0b:
                {
                    keyValue = 4 + keyTemp;
                }break;
                case 0x0d:
                {
                    keyValue = 8 + keyTemp;
                }break;
                case 0x07:
                {
                    keyValue = 12 + keyTemp;
                }break;
            }
        }
    } 
    return keyValue;
}

由上述经典矩阵键盘扫描函数编写按键驱动时发现由P3^6和P3^7两个引脚控制的两列键盘无论如何按,都不产生任何效果,也许有人会认为这是开发板坏掉了,其实不然,开发板没有坏掉,只是这里的P3^6和P3^7实际上不控制该两列按键。
若使用如下代码进行矩阵键盘驱动代码的编写,则完全可以实现功能,代码如下:

sfr P4 = 0xC0;

sbit r1=P3^0;  
sbit r2=P3^1;
sbit r3=P3^2;
sbit r4=P3^3;

sbit c1=P4^4;
sbit c2=P4^2;
sbit c3=P3^5;
sbit c4=P3^4;

unsigned char keyProcess(void)
{
    unsigned char key_value;

    r1=0;
    r2=r3=r4=1;
    c1=c2=c3=c4=1;

    if(!c1) 
    {
        key_value=0;
    }
    else if(!c2) 
    {
        key_value=1;
    }
    else if(!c3) 
    {
        key_value=2;
    }
    else if(!c4) 
    {
        key_value=3;
    }

    r2=0;
    r1=r3=r4=1;
    c1=c2=c3=c4=1;

    if(!c1) 
    {
        key_value=4;
    }
    else if(!c2) 
    {
        key_value=5;
    }
    else if(!c3) 
    {
        key_value=6;
    }
    else if(!c4) 
    {
        key_value=7;
    }

    r3=0;
    r2=r1=r4=1;
    c1=c2=c3=c4=1;

    if(!c1) 
    {
        key_value=8;
    }
    else if(!c2) 
    {
        key_value=9;
    }
    else if(!c3) 
    {
        key_value=10;
    }
    else if(!c4) 
    {
        key_value=11;
    }

    r4=0;
    r2=r3=r1=1;
    c1=c2=c3=c4=1;

    if(!c1) 
    {
        key_value=12;
    }
    else if(!c2) 
    {
        key_value=13;
    }
    else if(!c3) 
    {
        key_value=14;
    }
    else if(!c4) 
    {
        key_value=15;
    }

    return key_value;
}

让人惊讶的是,矩阵键盘的第1列和第2列竟然是有P4^4引脚和P4^2引脚控制的,这又是为何呢?
蓝桥杯开发板的矩阵键盘电路连接和普通的开发板一样,它使用的是P3口,但蓝桥杯比赛要求使用IAP转接板转接的IAP15F2k61s2芯片,这个单片机内置晶振,运行速度快,由于其没有P36,P37口,在转接板上用芯片的P42,P44口代替。因此在开发时需要改变一下控制引脚的地址。
最终测试程序参考代码下载地址:
http://download.csdn.net/download/qq_34706280/10260248

猜你喜欢

转载自blog.csdn.net/qq_34706280/article/details/79380810
今日推荐