×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-05-30 发布时间:
|

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口代替。因此在开发时需要改变一下控制引脚的地址。 



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址