发新帖本帖赏金 30.00元(功能说明)我要提问
12下一页
返回列表
打印
[单片机芯片]

【TM1640驱动】基于CH32V103实现16位数码管显示0~F

[复制链接]
3576|35
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 lilijin1995 于 2022-9-17 17:51 编辑

#申请原创#

@21小跑堂




TM1640 是一种LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数字接口、数据锁存器、LED 驱动等电路。我们目标是实现TM1640点亮16位数码管,显示“0~F”数字;

1 硬件设计

GPIO初始化配置 SCL(PB6)  SDA(PB7);开漏输出,通过IO模拟驱动TM1640,TM1640IC驱动有点类似于I2C;


我们程序采样的是自动地址的方式去驱动,1次刷16个数据;可以看到cmd1~cm3分半是设置数据、设置地址、控制显示的命令;

然后命令格式如下

在软件设计中我们将实现这个自动地址驱动时序

2 软件设计

首先是TM1640初始化TM1640_GPIO_INIT,设置为开漏极输出,如下:


/*********************************************************************
  * @fn      TM1640_GPIO_INIT
  *
  * [url=home.php?mod=space&uid=247401]@brief[/url]   Initializes GPIOB.6 GPIOB.7
  *
  * [url=home.php?mod=space&uid=266161]@return[/url]  none
  */
void TM1640_GPIO_INIT(void) {

     GPIO_InitTypeDef GPIO_InitStructure = { 0 };

     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_Init(GPIOB, &GPIO_InitStructure);
     GPIO_SetBits(GPIOB, GPIO_Pin_6);//SCL
     GPIO_SetBits(GPIOB, GPIO_Pin_7);//SDA
}


接着设置TM1640,并写入段码


void TM1640_Handle(void)
{
     u8 i;
     TM1640_Generate_START();
     TM1640_WriteData(0x40);//数据命令设置:普通模式,地址自动加一
     TM1640_Generate_STOP();

     TM1640_Generate_START();
     TM1640_WriteData(0xC0);////地址命令设置:初始地址00H
     for(i=0;i<16;i++)  //发送16位显示数据
     {
         TM1640_WriteData(CODE);
     }
     TM1640_Generate_STOP();

     TM1640_Generate_START();
     TM1640_WriteData(0x8c);    //显示控制:显示开,脉冲宽度设为11/16
     TM1640_Generate_STOP();
     Delay_Ms(10);

}




3 下载验证

显示"0~F";


      演示视频链接:



4. 为了方便大家理解,另有视频对代码进行见解

如下:



https://www.bilibili.com/video/BV1SG4y1z7yh/?spm_id_from=333.788&vd_source=2bbde87de845d5220b1d8ba075c12fb0

附件是代码:













TM1640.rar

504.88 KB

使用特权

评论回复

打赏榜单

21小跑堂 打赏了 30.00 元 2022-09-19
理由:恭喜通过原创文章审核!请多多加油哦!

评论
21小跑堂 2022-9-19 15:03 回复TA
视频内容很丰富,下篇文字部分有待补充哦~ 
沙发
belindagraham| | 2022-10-2 22:08 | 只看该作者
TM1640B和TM1628A一样吗               

使用特权

评论回复
板凳
mituzu| | 2022-10-2 22:28 | 只看该作者
tm1640显示时暗不暗            

使用特权

评论回复
地板
mnynt121| | 2022-10-2 22:51 | 只看该作者
用74HC164就可以呀。               

使用特权

评论回复
5
Jacquetry| | 2022-10-4 21:31 | 只看该作者
tm1640显示时暗不暗

使用特权

评论回复
6
alvpeg| | 2022-10-5 16:44 | 只看该作者
CH32V103可以直接扫描数码管进行显示吧

使用特权

评论回复
7
hudi008| | 2022-10-5 17:21 | 只看该作者
TM1640是spi驱动的吗              

使用特权

评论回复
8
albertaabbot| | 2022-10-5 18:23 | 只看该作者
这个驱动的芯片是什么呢               

使用特权

评论回复
9
jkl21| | 2022-10-5 19:29 | 只看该作者
tm1640需要接限流电阻吗?                     

使用特权

评论回复
10
lilijin1995|  楼主 | 2022-10-7 09:36 | 只看该作者
belindagraham 发表于 2022-10-2 22:08
TM1640B和TM1628A一样吗

不一样的

使用特权

评论回复
11
lilijin1995|  楼主 | 2022-10-7 09:39 | 只看该作者
mituzu 发表于 2022-10-2 22:28
tm1640显示时暗不暗

辉度可调的

使用特权

评论回复
12
lilijin1995|  楼主 | 2022-10-7 09:41 | 只看该作者
alvpeg 发表于 2022-10-5 16:44
CH32V103可以直接扫描数码管进行显示吧

可以

使用特权

评论回复
13
lilijin1995|  楼主 | 2022-10-7 09:42 | 只看该作者
hudi008 发表于 2022-10-5 17:21
TM1640是spi驱动的吗

是I2C

使用特权

评论回复
14
lilijin1995|  楼主 | 2022-10-7 09:43 | 只看该作者
albertaabbot 发表于 2022-10-5 18:23
这个驱动的芯片是什么呢

驱动数码管是TM1640,跟TM1640通信是CH32V103

使用特权

评论回复
15
tpgf| | 2022-10-10 08:09 | 只看该作者
TM1640这款芯片最多可以点亮多少位的数码管呢

使用特权

评论回复
16
keaibukelian| | 2022-10-10 08:23 | 只看该作者

通过什么方式调节显示的亮度呢

使用特权

评论回复
17
labasi| | 2022-10-10 08:33 | 只看该作者

iic这种方式是不是意味着一个芯片外挂很多个1640 就能实现一个大屏的显示啊

使用特权

评论回复
18
paotangsan| | 2022-10-10 08:53 | 只看该作者
tpgf 发表于 2022-10-10 08:09
TM1640这款芯片最多可以点亮多少位的数码管呢

16位数码管的显示模式只支持8段*16位

使用特权

评论回复
19
lilijin1995|  楼主 | 2022-10-10 09:06 | 只看该作者
tpgf 发表于 2022-10-10 08:09
TM1640这款芯片最多可以点亮多少位的数码管呢

16位

使用特权

评论回复
20
lilijin1995|  楼主 | 2022-10-10 09:07 | 只看该作者
keaibukelian 发表于 2022-10-10 08:23
通过什么方式调节显示的亮度呢

请查看规格书,通过指令,我们视频有说

使用特权

评论回复
发新帖 本帖赏金 30.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

162

帖子

7

粉丝