12下一页
返回列表 发新帖我要提问本帖赏金: 30.00元(功能说明)

[单片机芯片] 【TM1640驱动】基于CH32V103实现16位数码管显示0~F

[复制链接]
6210|35
 楼主| lilijin1995 发表于 2022-9-14 10:37 | 显示全部楼层 |阅读模式
本帖最后由 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;

微信截图_20220914102525.png


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

然后命令格式如下

spng.png

d.png

k.png

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

2 软件设计

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


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

  9.      GPIO_InitTypeDef GPIO_InitStructure = { 0 };

  10.      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  11.      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
  12.      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  13.      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  14.      GPIO_Init(GPIOB, &GPIO_InitStructure);
  15.      GPIO_SetBits(GPIOB, GPIO_Pin_6);//SCL
  16.      GPIO_SetBits(GPIOB, GPIO_Pin_7);//SDA
  17. }


接着设置TM1640,并写入段码


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

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

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

  18. }




3 下载验证

显示"0~F";

1966993-20220913120347792-533350568.jpg


      演示视频链接:



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

如下:



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

附件是代码:













TM1640.rar

504.88 KB, 下载次数: 30

打赏榜单

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

评论

视频内容很丰富,下篇文字部分有待补充哦~  发表于 2022-9-19 15:03
belindagraham 发表于 2022-10-2 22:08 | 显示全部楼层
TM1640B和TM1628A一样吗               
mituzu 发表于 2022-10-2 22:28 | 显示全部楼层
tm1640显示时暗不暗            
mnynt121 发表于 2022-10-2 22:51 | 显示全部楼层
用74HC164就可以呀。               
Jacquetry 发表于 2022-10-4 21:31 | 显示全部楼层
tm1640显示时暗不暗
alvpeg 发表于 2022-10-5 16:44 | 显示全部楼层
CH32V103可以直接扫描数码管进行显示吧
hudi008 发表于 2022-10-5 17:21 | 显示全部楼层
TM1640是spi驱动的吗              
albertaabbot 发表于 2022-10-5 18:23 | 显示全部楼层
这个驱动的芯片是什么呢               
jkl21 发表于 2022-10-5 19:29 | 显示全部楼层
tm1640需要接限流电阻吗?                     
 楼主| lilijin1995 发表于 2022-10-7 09:36 | 显示全部楼层
belindagraham 发表于 2022-10-2 22:08
TM1640B和TM1628A一样吗

不一样的
微信截图_20221007093612.png
 楼主| lilijin1995 发表于 2022-10-7 09:39 | 显示全部楼层
mituzu 发表于 2022-10-2 22:28
tm1640显示时暗不暗

辉度可调的
 楼主| lilijin1995 发表于 2022-10-7 09:41 | 显示全部楼层
alvpeg 发表于 2022-10-5 16:44
CH32V103可以直接扫描数码管进行显示吧

可以
 楼主| lilijin1995 发表于 2022-10-7 09:42 | 显示全部楼层
hudi008 发表于 2022-10-5 17:21
TM1640是spi驱动的吗

是I2C
 楼主| lilijin1995 发表于 2022-10-7 09:43 | 显示全部楼层
albertaabbot 发表于 2022-10-5 18:23
这个驱动的芯片是什么呢

驱动数码管是TM1640,跟TM1640通信是CH32V103
tpgf 发表于 2022-10-10 08:09 | 显示全部楼层
TM1640这款芯片最多可以点亮多少位的数码管呢
keaibukelian 发表于 2022-10-10 08:23 | 显示全部楼层

通过什么方式调节显示的亮度呢
labasi 发表于 2022-10-10 08:33 | 显示全部楼层

iic这种方式是不是意味着一个芯片外挂很多个1640 就能实现一个大屏的显示啊
paotangsan 发表于 2022-10-10 08:53 | 显示全部楼层
tpgf 发表于 2022-10-10 08:09
TM1640这款芯片最多可以点亮多少位的数码管呢

16位数码管的显示模式只支持8段*16位
 楼主| lilijin1995 发表于 2022-10-10 09:06 | 显示全部楼层
tpgf 发表于 2022-10-10 08:09
TM1640这款芯片最多可以点亮多少位的数码管呢

16位
 楼主| lilijin1995 发表于 2022-10-10 09:07 | 显示全部楼层
keaibukelian 发表于 2022-10-10 08:23
通过什么方式调节显示的亮度呢

请查看规格书,通过指令,我们视频有说
您需要登录后才可以回帖 登录 | 注册

本版积分规则

56

主题

165

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部