找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 667|回复: 3
收起左侧

keil c51 AT89C51单片机矩阵键盘程序问题

[复制链接]
ID:1082543 发表于 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 发表于 2023-6-7 14:55 | 显示全部楼层
直接16键盘不用的不接电路就是成熟的扫描方案省事。当然这样也是可以的,那就是按独立按键处理,独立按键也是可以8+8=16,扫描方式是分2次置47再读取和置31再读取。
回复

使用道具 举报

ID:332444 发表于 2023-6-7 15:32 | 显示全部楼层
举个荔枝,直接把矩阵修改为独立按键形式的扫描法,电路图不用修改,修改的是扫描值方法,把电路图中的P1的4-7引脚分别4次接地就是4*4独立按键,同样可以显示扫描键值原值,有了原值就可以进行任意重新排列。从动画可以看到P1的4-7引脚分别变蓝色的就是4次扫描的结果,其实和按行列扫描道理和键值是一样的。
录像61_转.gif
3.png
如果把后面2次扫描不用则和你的电路接法就是一样的了就是少接一个按键。
录像62_转.gif

回复

使用道具 举报

ID:1082543 发表于 2023-6-7 23:37 | 显示全部楼层
xianfajushi 发表于 2023-6-7 15:32
举个荔枝,直接把矩阵修改为独立按键形式的扫描法,电路图不用修改,修改的是扫描值方法,把电路图中的P1的 ...

感谢大神,终于搞成了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表