[STM32F1]基于STM32F103实现TM1640点亮16位共阴极数码管,显示“0~F”数字

本节我们目标是实现TM1640点亮16位共阴极数码管,显示“0~F”数字

1. 硬件设计

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

TM1640概述

TM1640 是一种LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数字接口、数据锁存器、LED 驱动等电路。本产品性能优良,质量可靠。主要应用于电子产品LED显示屏驱动。采用SOP28SSOP28的封装形式。

特性说明

  • 采用CMOS工艺
  • 显示模式(8 段×16 位)
  • 辉度调节电路(占空比 8 级可调)
  • 两线串行接口(SCLK,DIN)
  • 振荡方式:内置RC振荡
  • 内置上电复位电路
  • 封装形式:SOP28、SSOP28

管脚定义:
[STM32F1]基于STM32F103实现TM1640点亮16位共阴极数码管,显示“0~F”数字_第1张图片

file:///C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20221028215534932.png?lastModify=1667127310

管脚功能定义:

file:///C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20221028215737311.png?lastModify=1667127310

逻辑电源电压 5VSEG 脚驱动拉电流(VDD = 4.5 5.5 VVo = 0V)为90mAGRID脚驱动灌电流200 mA;最大时钟频率为1MHz;

接口说明

微处理器的数据通过两线总线接口和 TM1640 通信,在输入数据时当 CLK 是高电平时,DIN 上的信号必须保持不变;只有 CLK 上的时钟信号为低电平时,DIN 上的信号才能改变。数据的输入总是低位在前,高位在后传输.数据输入的开始条件是 CLK 为高电平时,DIN 由高变低;结束条件是 CLK 为高时,DIN 由低电平变为高电平。指令数据传输过程如下图:

file:///C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20221028221751517.png?lastModify=1667127310

这里我们使用写 SRAM 数据地址自动加  1 模式:

Command1:设置数据;

Command2:设置地址;

data1~N:传输显示数据(最多 16 字节,不能多写);

Command3:控制显示;

数据指令

指令用来设置显示模式和LED 驱动器的状态。在指令START有效后由DIN输入的第一个字节作为一条指令。经过译码,取最高B7B6两位比特位以区别不同的指令。

file:///C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20221028222030939.png?lastModify=1667127310

[STM32F1]基于STM32F103实现TM1640点亮16位共阴极数码管,显示“0~F”数字_第2张图片

数据命令设置:

[STM32F1]基于STM32F103实现TM1640点亮16位共阴极数码管,显示“0~F”数字_第3张图片

地址命令设置:

[STM32F1]基于STM32F103实现TM1640点亮16位共阴极数码管,显示“0~F”数字_第4张图片

file:///C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20221028222201843.png?lastModify=1667127310

上电时,地址默认设为C0H。显示数据与芯片管脚以及显示地址之间的对应关系如下表所示:

file:///C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20221028222246762.png?lastModify=1667127310

显示控制命令

[STM32F1]基于STM32F103实现TM1640点亮16位共阴极数码管,显示“0~F”数字_第5张图片

file:///C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20221028222344305.png?lastModify=1667127310

2 软件设计

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

void MX_GPIO_Init(void)

{

​

  GPIO_InitTypeDef GPIO_InitStruct = {0};

​

  /* GPIO Ports Clock Enable */

  __HAL_RCC_GPIOD_CLK_ENABLE();

  __HAL_RCC_GPIOA_CLK_ENABLE();

  __HAL_RCC_GPIOB_CLK_ENABLE();

​

  /*Configure GPIO pin Output Level */

  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_SET);

​

  /*Configure GPIO pins : PB6 PB7 */

  GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;

  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;

  GPIO_InitStruct.Pull = GPIO_NOPULL;

  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

​

}

接着设置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);

​

}

其中,
TM1640_WriteData(0x40);是Command1数据命令设置,普通模式,地址自动加一;
TM1640_WriteData(0xC0);是Command2地址命令设置,初始地址00H;
TM1640_WriteData(CODE);是传输显示数据(最多 16 字节,不能多写);
TM1640_WriteData(0x8c);是Command3控制显示:显示开,脉冲宽度设为11/16

3 下载验证

显示"0~F";

[STM32F1]基于STM32F103实现TM1640点亮16位共阴极数码管,显示“0~F”数字_第6张图片


4 入门视频教程【TM1640驱动数码管】TM1640驱动原理介绍以及基于STM32F103实现TM1640控制点亮16位共阴极数码管】
---------------------
作者:lilijin1995
链接:https://bbs.21ic.com/icview-3262468-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

 

你可能感兴趣的:(嵌入式基础知识,stm32,单片机,arm)