欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > TM1640学习手册及示例代码

TM1640学习手册及示例代码

2025/4/22 16:26:41 来源:https://blog.csdn.net/weixin_72749746/article/details/147403905  浏览:    关键词:TM1640学习手册及示例代码

数据手册 

TM1640数据手册

数据手册解读

这里我们看管脚定义DIN和SCLK,一个数据线一个时钟线

SEG1~SEG8为段码,GRID1~GRID16为位码(共阴极情况下)

这里VDD给5V

 数据指令

数据命令设置

地址命令设置

显示控制命令

共阴极硬件连接图

这里我们只介绍共阴极,共阳极需要在代码里调整,有兴趣可以私聊我

注意事项

TM1640驱动源码(非阻塞)

tm1640.c
//******************************************************************************
/*** @Name       : TM1640_Start* @Date       : 2025年4月21日* @Description: TM1640起始* @Parameters : None* @Return     : None*/  
void TM1640_Start(void)
{TM_SDA_H();TM_SCL_H();__NOP();__NOP();TM_SDA_H();__NOP();__NOP();TM_SDA_L();__NOP();__NOP();__NOP();__NOP();TM_SCL_L();__NOP();__NOP();
}//******************************************************************************
/*** @Name       : TM1640_Stop* @Date       : 2025年4月21日* @Description: TM1640结束* @Parameters : None* @Return     : None*/  
void TM1640_Stop(void)
{TM_SCL_H();__NOP();__NOP();TM_SDA_L();__NOP();__NOP();TM_SDA_H();__NOP();__NOP();TM_SCL_L();TM_SDA_L();
}//******************************************************************************
/*** @Name       : TM1640_WriteData* @Date       : 2025年4月21日* @Description: 写入一字节的数据* @Parameters : oneByte:需要发送的数据字节* @Return     : None*/  
void TM1640_WriteData(uint8_t oneByte)
{uint8_t index;for(index=0;index<8;index++){TM_SCL_L();if(oneByte&0x01) TM_SDA_H();elseTM_SDA_L();__NOP();__NOP();__NOP();TM_SCL_H();oneByte=oneByte>>1;}TM_SCL_L();__NOP();__NOP();__NOP();__NOP();TM_SDA_L();__NOP();__NOP();
}//******************************************************************************
/*** @Name       : TM1640_Handle* @Date       : 2025年4月21日* @Description: 启动、写数据和控制显示* @Parameters : None* @Return     : None*/  
void TM1640_Handle(void)
{uint8_t index;TM1640_Start();TM1640_WriteData(CMD_DATA_1);//地址自动加1,普通模式TM1640_Stop();TM1640_Start();TM1640_WriteData(START_ADDRESS_1);for(index=0;index<smg_num;index++){TM1640_WriteData(smg[index]);}TM1640_Stop();TM1640_Start();TM1640_WriteData(BRIGHTNESS_LEVEL_4);TM1640_Stop();__NOP();}

这里smg[index]需要你自己去定义,然后将数组传入tm1640中就可以 

tm1640.h
/*数码管数量*/
#define smg_num    16(最大16位)
/*显示控制命令,设置亮度打开显示屏,共8级亮度,也就是设置不同的脉冲宽度*/
#define BRIGHTNESS_LEVEL_1  0x88
#define BRIGHTNESS_LEVEL_2  0x89
#define BRIGHTNESS_LEVEL_3  0x8a
#define BRIGHTNESS_LEVEL_4  0x8b
#define BRIGHTNESS_LEVEL_5  0x8c
#define BRIGHTNESS_LEVEL_6  0x8d
#define BRIGHTNESS_LEVEL_7  0x8e
#define BRIGHTNESS_LEVEL_8  0x8f
#define CLOSE_DISPLAY       0x80/*数据设置命令*/
#define CMD_DATA_1          0X40 //地址自动加1,普通模式       0100 0000
#define CMD_DATA_2          0X44 //地址固定,普通模式          0100 0100
#define CMD_DATA_3          0X48 //地址自动加1,内部测试模式   0100 1000
#define CMD_DATA_4          0X4C //地址固定,内部测试模式      0100 1100/*地址命令设置 显存地址为0xC0-0xCF*/
#define START_ADDRESS_1       0XC0 //第一个数码管
#define START_ADDRESS_2       0XC1 
#define START_ADDRESS_3       0XC2 
#define START_ADDRESS_4       0XC3 
#define START_ADDRESS_5       0XC4 
#define START_ADDRESS_6       0XC5 
#define START_ADDRESS_7       0XC6 
#define START_ADDRESS_8       0XC7 
#define START_ADDRESS_9       0XC8 
#define START_ADDRESS_10      0XC9 
#define START_ADDRESS_11      0XCa 
#define START_ADDRESS_12      0XCb 
#define START_ADDRESS_13      0XCc 
#define START_ADDRESS_14      0XCd 
#define START_ADDRESS_15      0XCe 
#define START_ADDRESS_16      0XCf#define TM_SCL_H()  GPIOB->BSRR = GPIO_PIN_6
#define TM_SCL_L()  GPIOB->BRR = GPIO_PIN_6#define TM_SDA_H()  GPIOB->BSRR = GPIO_PIN_7
#define TM_SDA_L()  GPIOB->BRR = GPIO_PIN_7

 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com