1. 程式人生 > >單片機入門-矩陣鍵盤控制數碼管顯示

單片機入門-矩陣鍵盤控制數碼管顯示

矩陣 right 控制 入門 i/o num .cn mar oid

任務簡述:通過按下4X4矩陣鍵盤實現數碼管對應顯示數字

實現方式:通過行列分接法,可以節省使用單片機的I/O口,掃描矩陣鍵盤是否有按下,判斷P2端口得到的值。

protues 硬件系統

技術分享

單片機晶振復位電路:

技術分享

鎖存器、上拉電阻:

技術分享

4x4矩陣鍵盤:

技術分享

代碼實現:

技術分享

void key44scan(void)//鍵盤掃描函數
{
    uint t;
    P2=0xfe;
    t=P2;
    t=t&0xf0;
    if(t!=0xf0)
    {
        delay();
        t=P2;
    
        switch(t)
        {
              
case 0xee:keynum=1; break; case 0xde:keynum=5; break; case 0xbe:keynum=9; break; case 0x7e:keynum=13; break; } P0=table[keynum]; while(t!=0xf0) { t=P2; t=t&0xf0; } } P2=0xfd
; t=P2; t=t&0xf0; if(t!=0xf0) { delay(); t=P2; switch(t) { case 0xed:keynum=2; break; case 0xdd:keynum=6; break; case 0xbd:keynum=10; break; case 0x7d:keynum=14; break; } P0
=table[keynum]; while(t!=0xf0) { t=P2; t=t&0xf0; } } P2=0xfb; t=P2; t=t&0xf0; if(t!=0xf0) { delay(); t=P2; switch(t) { case 0xeb:keynum=3; break; case 0xdb:keynum=7; break; case 0xbb:keynum=11; break; case 0x7b:keynum=15; break; } P0=table[keynum]; while(t!=0xf0) { t=P2; t=t&0xf0; } } P2=0xf7; t=P2; t=t&0xf0; if(t!=0xf0) { delay(); t=P2; switch(t) { case 0xe7:keynum=4; break; case 0xd7:keynum=8; break; case 0xb7:keynum=12; break; case 0x77:keynum=0; break; } P0=table[keynum]; while(t!=0xf0) { t=P2; t=t&0xf0; } } }

單片機入門-矩陣鍵盤控制數碼管顯示