找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1589|回復: 3
收起左側(cè)

keil c51 AT89C51單片機矩陣鍵盤程序問題

[復制鏈接]
ID:1082543 發(fā)表于 2023-6-7 11:50 | 顯示全部樓層 |閱讀模式
在做2x5的矩陣鍵盤時,寫完一段代碼后檢測的時候,行的那個紅藍指示燈狂閃是為什么啊哥,是定義出錯了嗎
1.png
下面是代碼:
#include <reg51.h>

#define uchar unsigned char
#define uint unsigned int

sbit H1 = P1^0;
sbit H2 = P1^1;
sbit L1 = P1^2;
sbit L2 = P1^3;
sbit L3 = P1^4;
sbit L4 = P1^5;
sbit L5 = P1^6;

sbit LATCH = P2^2;
sbit CLK = P2^1;
sbit DIO = P2^0;

uchar code LED_NUM[] = {
    0x3f, 0x06, 0x5b, 0x4f, 0x66,
    0x6d, 0x7d, 0x07, 0x7f, 0x6f
};

void delay(uint t)
{
    uint i, j;
    for (i = 0; i < t; i++)
    {
        for (j = 0; j < 120; j++);
    }
}

uchar get_key()
{
    uchar key = 0xff;
    H1 = 0;
    if (L1==0) key = 1;
    if (L2==0) key = 2;
    if (L3==0) key = 3;
    if (L4==0) key = 4;
    if (L5==0) key = 5;
    H1 = 1;

    H2 = 0;
    if (L1==0) key = 6;
    if (L2==0) key = 7;
    if (L3==0) key = 8;
    if (L4==0) key = 9;
    if (L5==0) key = 0;
    H2 = 1;

    return key;
}

void display(uchar ten, uchar one)
{
    LATCH = 0;
    DIO = LED_NUM[ten];
    CLK = 0;
    CLK = 1;
    DIO = LED_NUM[one];
    CLK = 0;
    CLK = 1;
    LATCH = 1;
}

void main()
{
    uchar key, ten, one;
    P0 = 0x00;
    P1 = 0xff;
    P2 = 0x00;
    while (1)
    {
        key = get_key();
        if (key!=0xff)
        {
            ten = key / 10;
            one = key % 10;
            display(ten, one);
        }
    }
}

回復

使用道具 舉報

ID:332444 發(fā)表于 2023-6-7 14:55 | 顯示全部樓層
直接16鍵盤不用的不接電路就是成熟的掃描方案省事。當然這樣也是可以的,那就是按獨立按鍵處理,獨立按鍵也是可以8+8=16,掃描方式是分2次置47再讀取和置31再讀取。
回復

使用道具 舉報

ID:332444 發(fā)表于 2023-6-7 15:32 | 顯示全部樓層
舉個荔枝,直接把矩陣修改為獨立按鍵形式的掃描法,電路圖不用修改,修改的是掃描值方法,把電路圖中的P1的4-7引腳分別4次接地就是4*4獨立按鍵,同樣可以顯示掃描鍵值原值,有了原值就可以進行任意重新排列。從動畫可以看到P1的4-7引腳分別變藍色的就是4次掃描的結(jié)果,其實和按行列掃描道理和鍵值是一樣的。
錄像61_轉(zhuǎn).gif
3.png
如果把后面2次掃描不用則和你的電路接法就是一樣的了就是少接一個按鍵。
錄像62_轉(zhuǎn).gif

回復

使用道具 舉報

ID:1082543 發(fā)表于 2023-6-7 23:37 | 顯示全部樓層
xianfajushi 發(fā)表于 2023-6-7 15:32
舉個荔枝,直接把矩陣修改為獨立按鍵形式的掃描法,電路圖不用修改,修改的是掃描值方法,把電路圖中的P1的 ...

感謝大神,終于搞成了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表