发作品签到
标准版

TM1650矩阵按键模块

工程标签

9.3k
0
0
11

简介

基于TM1650的4x4矩阵按键模块。

简介:基于TM1650的4x4矩阵按键模块。

开源协议

Public Domain

创建时间:2021-05-18 20:30:03更新时间:2023-12-05 16:50:23

描述

简介

基于TM1650的4x4矩阵按键模块。使用I2C接口与单片机通信,当有按键按下时,TM1650通过下降沿中断通知单片机。免去了单片机做按键扫描,节省了单片机宝贵的CPU时间。

 

模块引脚定义

VCC:模块电源正极,3.3V或者5V
SCL:I2C通信接口时钟线
SDA:I2C通信接口数据线
INT#:中断信号输出。无按键按下时维持高电平,当有按键按下时,输出低电平,可使用下降沿中断检测
GND:模块电源地

 

工作原理

TM1650最大支持4x7规模的矩阵按键,本项目仅仅用到了4x4的大小。TM1650的DIG1~DIG4引脚与A~G引脚可以构成一个4x7规模的按键扫描矩阵,矩阵中的每一个按键都对应了一个固定的按键代码,当有按键按下时,TM1650通过DP引脚输出一个下降沿,通知单片机,单片机随即通过I2C总线来向TM1650读出一个字节,这个字节就是被按下按键的按键代码。按键代码如下:

cf8RG6OfAwSqHX7FVOwYoOOP9YkVggd5zMlSSH7N.png

 

合宙Luatos驱动库

https://wiki.luatos.com/api/libs/tm1650.html

 

51单片机示例代码

 

unsigned char TM1650_KEY_FLAG=0;  //按键中断标志

//TM1650按键扫描初始化
void TM1650_init(void)
{
    I2CStart();
    I2CSendByte(0x48);  I2CWaitAck();    //发送工作模式配置指令
    I2CSendByte(0x19);  I2CWaitAck();    //发送键扫模式代码0x19
    I2CStop();
}

//TM1650读按键代码
unsigned char TM1650_read(void)
{
    unsigned char key;
    I2CStart();
    I2CSendByte(0x49);       I2CWaitAck();    //发送读按键指令
    key = I2CReceiveByte();  I2CSendAck(1);   //读一个字节,并响应NACK
    I2CStop();
   
    return key;
}

//外部中断0初始化
void INT0_init(void)
{
    IT0=1 ;  /*下降沿触发中断*/
    EX0=1 ;  /*使能INT0中断*/
}

void main(void)
{
    unsigned char key;
    TM1650_init();
    INT0_init();
    EA=1;
    while(1)
    {
        if(TM1650_KEY_FLAG)
        {
            TM1650_KEY_FLAG=0;
            key = TM1650_read();
           
            switch(key)
            {
                case 0x44:
                    //处理KEY1按下
                break;

                case 0x4C:
                    //处理KEY2按下
                break;

                //....
            }
           
        }
    }
   
}

void INT0_ISR(void) interrupt 0
{
    TM1650_KEY_FLAG = 1;
}
 

 

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
暂无数据
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航