标题: 4*4矩阵按键《行列反转法》扫描依次显示0-f [打印本页]

作者: hualihushao    时间: 2019-5-9 21:44
标题: 4*4矩阵按键《行列反转法》扫描依次显示0-f
数码管采用共阴数码管;
proteus电路接法如下:




程序如下:
void key_scan()          //按键扫描函数
{
        unsigned char code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
       
        P2 = 0xf0;          //列扫描
        if(P2 != 0xf0)
        {
                delay(1000);
                if(P2 != 0xf0)
                {
                       
                        P2 = 0xef;
                //        delay(10000);
                        if(P2 != 0xef)      //第一行扫描
                        {
                                switch(P2)
                                {
                                        case 0xee: P1 = 0x1f; P0 = table[0]; break;
                                        case 0xed: P1 = 0x1f; P0 = table[4]; break;
                                        case 0xeb: P1 = 0x1f; P0 = table[8]; break;
                                        case 0xe7: P1 = 0x1f; P0 = table[12]; break;
                                }
                        }
                       
                        P2 = 0xdf;
                        if(P2 != 0xdf)
                        {
                                switch(P2)
                                {
                                        case 0xde: P1 = 0x1f; P0 = table[1]; break;
                                        case 0xdd: P1 = 0x1f; P0 = table[5]; break;
                                        case 0xdb: P1 = 0x1f; P0 = table[9]; break;
                                        case 0xd7: P1 = 0x1f; P0 = table[13]; break;
                                }
                        }
                       
                        P2 = 0xbf;
                        if(P2 != 0xbf)
                        {
                                switch(P2)
                                {
                                        case 0xbe: P1 = 0x1f; P0 = table[2]; break;
                                        case 0xbd: P1 = 0x1f; P0 = table[6]; break;
                                        case 0xbb: P1 = 0x1f; P0 = table[10]; break;
                                        case 0xb7: P1 = 0x1f; P0 = table[14]; break;
                                }
                        }
                       
                        P2 = 0x7f;
                        if(P2 != 0x7f)
                        {
                                switch(P2)
                                {
                                        case 0x7e: P1 = 0x1f; P0 = table[3]; break;
                                        case 0x7d: P1 = 0x1f; P0 = table[7]; break;
                                        case 0x7b: P1 = 0x1f; P0 = table[11]; break;
                                        case 0x77: P1 = 0x1f; P0 = table[15 ]; break;
                                }
                        }
                }
        }
}
void main()
{
        while(1)
        {
                key_scan();
        }
}


作者: bhjyqjs    时间: 2019-5-10 08:35
这根本就不是行列反转法,是标准的逐行扫描。
抄别人的东东,也要看看。
版主浪费了50黑币
作者: hualihushao    时间: 2019-5-26 11:03
我请你看看接法,谢谢
作者: huaxinfeng    时间: 2020-3-2 10:53
有没有文件直接使用的
作者: brew9    时间: 2020-3-2 11:47
只能说太繁琐,算法其实很简单。
http://www.51hei.com/bbs/dpj-136958-1.html




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1