找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机TM1638数码管和按键控制器程序 怎么得到按键返回值?

查看数: 3138 | 评论数: 7 | 收藏 3
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-3-9 01:18

正文摘要:

回复

ID:1109793 发表于 2024-2-2 16:41
再顶一下,望前辈指点
ID:1109793 发表于 2024-1-30 10:46
188610329 发表于 2023-3-9 13:22
TM1638  按要求是  需要在  DIO 放置 10K 上拉 以及 100P 电容滤波的,你买的现成板子大概率 没有加这个部 ...

前辈,请教一下,我的板子上上拉10K也有,101的电容也有,三条线还串联了180电阻。显示和按键都正常使用,但是在强电磁干扰下会读到很多意外的按键,甚至亮度都会变成最低,这个怎样解决?
ID:841986 发表于 2023-3-9 17:24
要得到TM1638按键返回值,需要进行以下步骤:

初始化TM1638控制器:在程序中通过SPI接口向TM1638控制器写入数据,对其进行初始化。具体的初始化操作可以参考TM1638的数据手册。

读取按键状态:通过读取TM1638控制器内部的寄存器,可以得到按键的状态。具体的读取操作可以参考TM1638的数据手册。

解析按键状态:得到按键状态后,需要进行解析,以得到按键的返回值。TM1638控制器可以同时检测多个按键的状态,因此需要对返回值进行判断,以确定哪个按键被按下。

以下是一个简单的示例程序,用于从TM1638控制器读取按键状态:
#include <reg52.h>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int

sbit STB = P1^0;  // TM1638控制引脚1
sbit CLK = P1^1;  // TM1638控制引脚2
sbit DIO = P1^2;  // TM1638控制引脚3

void tm1638_write(uint address, uchar data)
{
    STB = 0;  // 开始传输数据
    spi_write(address);  // 发送地址
    spi_write(data);  // 发送数据
    STB = 1;  // 停止传输数据
}

uchar tm1638_read(uint address)
{
    uchar data;

    STB = 0;  // 开始传输数据
    spi_write(address | 0x02);  // 发送读取命令和地址
    data = spi_read();  // 读取数据
    STB = 1;  // 停止传输数据

    return data;
}

uchar get_key(void)
{
    uchar key_code = tm1638_read(0x42);  // 读取按键状态

    switch (key_code)
    {
        case 0x01:  // 第1个按键被按下
            return 1;
        case 0x02:  // 第2个按键被按下
            return 2;
        case 0x04:  // 第3个按键被按下
            return 3;
        case 0x08:  // 第4个按键被按下
            return 4;
        case 0x10:  // 第5个按键被按下
            return 5;
        case 0x20:  // 第6个按键被按下
            return 6;
        case 0x40:  // 第7个按键被按下
            return 7;
        case 0x80:  // 第8个按键被按下
            return 8;
        default:
            return

    }
    return key_code;
}
ID:651494 发表于 2023-3-9 17:00
ID:624769 发表于 2023-3-9 13:22
TM1638  按要求是  需要在  DIO 放置 10K 上拉 以及 100P 电容滤波的,你买的现成板子大概率 没有加这个部分的,那么如果 12T 的学习板单片机操作(速度慢板载有上拉) 一般是没有这个问题的,但是遇到 STC8 这种1T单片机,你就要在 CLK =0 之后给与足够的 延时等待,以及IO口 要设置内部上拉开,并且不是推挽模式,才能读到正确的键值。
ID:278006 发表于 2023-3-9 09:54
ID:996773 发表于 2023-3-9 09:45


我看不懂楼主的语言,我只知道汇编,我用过这个1638和楼主一样很熟悉,思路应该是一样的

这个1638按键没有返回概念,用它的按键只能一直不停读取键值,好像一共三个字节

,每一个按键对应一个位数据,然后把固定的键值做比对,对上就说明按键按下,再去

执行,提醒楼主,同一个读键脚上的按键不一定在同一个字节里

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

Powered by 单片机教程网

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