基于过程单片机CH32、STM32实现TM1640点亮16位共阴极数码管

发布者:lambda21最新更新时间:2025-09-07 来源: cnblogs关键字:单片机  STM32  TM1640  共阴极数码管 手机看文章 扫描二维码
随时随地手机看文章

实例1 EgTM1640——【基于CH32V103】

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

1 硬件设计

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

2 软件设计

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

/*********************************************************************
 * @fn      TM1640_GPIO_INIT
 *
 * @brief   Initializes GPIOB.6 GPIOB.7
 *
 * @return  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[i]);
    }
    TM1640_Generate_STOP();

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

}

3 下载验证

显示'0~F';

image

实例2 EgTM1640——【基于STM32F103】

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

1 硬件设计

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

TM1640概述

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

特性说明
  • 采用CMOS工艺

  • 显示模式(8 段×16 位)

  • 辉度调节电路(占空比 8 级可调)

  • 两线串行接口(SCLK,DIN)

  • 振荡方式:内置RC振荡

  • 内置上电复位电路

  • 封装形式:SOP28、SSOP28

管脚定义:

image

管脚功能定义:

image

逻辑电源电压 为5V,SEG 脚驱动拉电流(VDD = 4.5~ 5.5 V、Vo = 0V)为90mA;GRID脚驱动灌电流200 mA;最大时钟频率为1MHz;

接口说明

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

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

Command1:设置数据
Command2:设置地址
data1~N:传输显示数据(最多 16 字节,不能多写)
Command3:控制显示

数据指令

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

数据 命令设置:
image

地址命令设置:
image

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

显示控制 命令
image

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[i]);

    }

    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[i]);是传输显示数据(最多 16 字节,不能多写);

TM1640_WriteData(0x8c);是Command3控制显示:显示开,脉冲宽度设为11/16

3 下载验证

显示'0~F';

image


关键字:单片机  STM32  TM1640  共阴极数码管 引用地址:基于过程单片机CH32、STM32实现TM1640点亮16位共阴极数码管

上一篇:stm32单片机GPIO输入
下一篇:STM32CubeMX 多通道 ADC DMA 配置 测试小程序

推荐阅读最新更新时间:2026-03-21 12:47

试验数码管上显示数字( 单片机直接实现位选 阴极)
/********************************************************************************** * 标题: 试验数码管上显示数字( 单片机直接实现位选 共 阴极 ) * * * * 连接方法:P0与J12 用8PIN排线连接 P1与JP16 用排线连接 * *********************************************************************************** * * * 用573 锁存器 控制和 单片机 脚直接位选控制(非
[单片机]
试验<font color='red'>数码管</font>上显示数字( <font color='red'>单片机</font>直接实现位选 <font color='red'>共</font><font color='red'>阴极</font>)
怎么用万用表判断数码管阴极还是共阳极
  一、什么是数码管   数码管是由多个发光二极管组成的一种显示器件,按字段多少可以分为七段管、八段管、米字管等;按工作方式分又可分为共阳数码管和共阴数码管;按位数分又可分为1位、2位、3位、4位等;按颜色分还有红色、绿色、蓝色等,按大小还可分为0.28寸、0.30寸、0.36寸等。   二、数码管工作原理   数码管是一种半导体发光器件,其基本单元是发光二极管。能显示4位数字的叫四位数码管,当然也有多位和只有一位的数码管,他们的电气原理相同。数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发
[测试测量]
怎么用万用表判断<font color='red'>数码管</font>是<font color='red'>共</font><font color='red'>阴极</font>还是共阳极
4位阴极数码管秒表设计仿真与程序
单片机源程序如下: #include reg51.h #include intrins.h #define GPIO_DIG P2 //数据端 #define uchar unsigned char //重命名关键字 #define uint unsigned int //重命名关键字 sbit K1=P3^0; //开始 sbit K2=P3^1; //暂停 sbit K3=P3^2; //复位 sbit L1=P1^4; //数码管1位选 sbit L2=P1^5; //数
[单片机]
4位<font color='red'>共</font><font color='red'>阴极</font><font color='red'>数码管</font>秒表设计仿真与程序
阴极数码管的显示刷新
共阳极数码管是指八段数码管的八段发光二极管的阳极(正极)都连在一起,而阴极对应的各段可分别控制,如图(B)所示: 共阴极数码管是指八段数码管的八段发光二极管的阴极(负极)都连在一起,而阳极对应的各段分别控制,如图(C)所示: 共阴级输入高电平有效,共阳级输入低电平有效。 驱动程序如下: /*seg.c*/ #include ./delay/delay.h #define SEGPORT P0 sbit bit_select = P2^0; //定义位码位为P2^0口 sbit seg_select = P2^1; //定义断码位为P2^1口 /*共阴极数码管的0~F的显示*/ unsigne
[单片机]
<font color='red'>共</font><font color='red'>阴极</font><font color='red'>数码管</font>的显示刷新
8位阴极数码管动态驱动程序
//################################################################## //****** 程序作用: 驱动8位数码管 **************************************** //****** 单片机型号: STC90C16RD+ **************************************** //****** 编写日期: 2013年6月8日晚 **************************************** //**
[单片机]
ch32stm32参数对比
随着物联网技术、智能家居、工业自动化等领域的快速发展,MCU芯片市场也逐渐走向多样化和智能化。其中,32位微控制器不仅在性能、功能、可靠性方面更加优越,而且在应用领域的广泛性和市场占有率上也有着巨大优势。而32位微控制器中的两款经典代表——CH32和STM32,又该如何进行参数对比呢? 在基本参数方面比较,CH32和STM32均采用了ARM Cortex-M内核,都是32位微控制器。在运行频率方面,CH32单片机的部分芯片性能可以达到200MHz,STM32芯片的运行频率更加广泛,从72MHz到216MHz都有涵盖。从存储容量方面来看,两者皆含有各自大小和类型不尽相同的存储空间。而在性能指标方面,STM32的性能指标相较于CH32
[单片机]
ch32可以用keil吗?ch32stm32编程有区别吗?
CH32是山外电子推出的一款基于RISC-V架构的32位微控制器芯片,其具有性价比高的特点,适用于一些成本敏感的产品。而STM32则是意法半导体推出的一款基于ARM Cortex-M架构的32位微控制器芯片,其具有丰富的外设资源和高性能的特点,适用于一些性能要求较高的产品。本文将对CH32和STM32进行比较,并回答读者的问题:ch32可以用keil吗?ch32和stm32编程有区别吗? 一、CH32和STM32比较 1.架构比较 CH32采用了RISC-V架构,而STM32采用了ARM Cortex-M架构。RISC-V架构是一种开源的指令集架构,其具有可定制性强、可移植性好等优点,但是目前在市场上的占有率较低。ARM Cort
[单片机]
TM1640与PIC12F629单片机的结合
TM1640是驱动数码管的专用集成电路,可以直接驱动16位共阴数码管,手册请下载附件。 /******************************* *本程序直接驱动16位共阴数码管,各数码管分别驱动0、1、2、……E、F。 */ #include pic.h //PIC12F629 __CONFIG(0x3F84); #define clk GPIO0 //时钟信号 #define dio GPIO1 //数据/地址数据 #define uchar unsigned char #define uint unsigned int
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved