请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验之谈】基于STM32F103实现TM1640点亮16位共阴极数码管,显示“0~F”数字的经验分享

[复制链接]
STMCU小助手 发布时间:2022-12-8 16:00

本节我们目标是实现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
    , z* l# g" ]5 Z5 P' B$ l3 Q9 q

管脚定义:  q1 f& Y& b5 I0 F& B+ g  |" y5 g' o

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

管脚功能定义:


7 N( j/ s* ]& L! F9 Z

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

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


) \1 e  N9 w  c) _# e/ ?: L

接口说明

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


2 p3 }7 E- z: x* [# M! l* S5 W) I9 l
: n( y, \4 O4 t+ X: ]2 J: R0 m6 }

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

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

& S' D( c3 ?! D7 l! {

Command1:设置数据;

Command2:设置地址;

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

Command3:控制显示;

/ [& ^7 f8 ?9 S& I  p: {- {

数据指令

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

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

数据命令设置:


, C# e- E9 j9 x# B) J: m, Q1 e

地址命令设置:

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

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


9 ^' d+ S( l( @# E

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

显示控制命令

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

2 软件设计

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


; j: P  d9 f% J

    8 p) Y) o& p+ p8 h) u& v
    " R/ y* P+ e  ^: a/ o; [0 }" v# O6 h1 X; _. U% H+ A7 H, N# ?4 Y
  • void MX_GPIO_Init(void)3 J; o: E7 Z$ Z8 o
  • {5 a) H/ G3 K" t! C

  • 0 Y7 e2 h+ Y5 O0 r
  • GPIO_InitTypeDef GPIO_InitStruct = {0};
    4 [8 e* X9 X' M" P

  • & ?4 t7 V5 Z1 B0 k) w
  • /* GPIO Ports Clock Enable */) H8 _" x! S: `: R. C% o
  • __HAL_RCC_GPIOD_CLK_ENABLE();/ Q  s- t- M: T- Y4 ?% R
  • __HAL_RCC_GPIOA_CLK_ENABLE();/ s" P6 ]; U3 f
  • __HAL_RCC_GPIOB_CLK_ENABLE();
      L( e- d$ l! w/ ^* y& s

  • , n$ d2 L! l$ g, Z" i$ C) x
  • /*Configure GPIO pin Output Level */+ p/ W: ], [' O! a- `3 r/ t
  • HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_SET);
    % A( l+ X- `; Y* v# U

  • ( M4 L  Z- U- {% `& o$ d
    9 w' A# P: V0 _! u& c! Q
  • /*Configure GPIO pins : PB6 PB7 */
    ) L* s  i6 N$ o' b5 h
  • GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;+ f/ i% `& u- f- g
  • GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
    4 M' q/ |4 X7 s7 h* n6 K
  •   GPIO_InitStruct.Pull = GPIO_NOPULL;
    0 T& w( T/ X1 F( R: m8 T; e. V
  •   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;. ^" N  B0 V% B9 `
  • HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    3 r" z  G& h! o! f& w0 d

  • 1 |3 V8 u1 ~- R5 d
  • }
    " A+ i! W) w- s: k5 t
% |0 C  j5 A& Q/ `  H
% |* v! l. b* e3 K

- S" _3 }* g* X! Z0 U接着设置TM1640,并写入段码

    3 i, Y( P# V) l' X
  • void TM1640_Handle(void)
    % y4 G& }+ S! n4 ?
  • }
  • u8 i;
    2 T* T) E: v% d; u4 Z  j! x$ O
  •   TM1640_Generate_START();
  • TM1640_WriteData(0x40);//数据命令设置:普通模式,地址自动加一
    7 N. O% e: E. K% b
  • TM1640_Generate_STOP();1 s: {: c- g8 f( L
  • TM1640_Generate_START();0 P  F: \$ b9 |& ]9 N
  • TM1640_WriteData(0xC0);地址命令设置:初始地址00H% v1 l8 d! ~, m2 U
  • for(i=0;i<16;i++)  //发送16位显示数据1 g5 |( ~+ T( ^" T2 U8 y2 O, X, J
  • {
    5 w$ r2 B" \6 a$ b
  •   TM1640_WriteData(CODE);
    / k4 ^( i. D  {& H. ]8 q6 T3 P
  •   }
    : O6 k7 o( D' n5 X
  • TM1640_Generate_STOP();
  • TM1640_Generate_START();
    $ N. T+ X& j0 Q$ O/ ]1 r5 B
  • TM1640_WriteData(0x8c);    //显示控制:显示开,脉冲宽度设为11/16( y( T0 s& I* Y  r( w( Z
  • TM1640_Generate_STOP();) M" j, e7 w3 b5 v+ I- y
  •   delay_ms(10);
    * x' T% w5 t, k
  • * z5 g, P0 U  |
  • }
    4 D" f  `  C" H3 O. g# F! i- U' {7 ^/ ^: Z' }  L3 H/ i2 H
    3 X+ ]5 o# D0 S' ]2 S" [
    ; e6 F* L  n3 S* D9 S
+ O9 W2 n8 j% Y# _# U

; P' ?: K- `, q2 ^4 X; Z$ q
0 m4 Y( S. u2 K2 \: }  u
其中,5 u, @  K% w0 G, r' [
TM1640_WriteData(0x40);是Command1数据命令设置,普通模式,地址自动加一;% [% N1 n3 Z6 j* V- E& p5 V5 k, W
TM1640_WriteData(0xC0);是Command2地址命令设置,初始地址00H;( N$ V1 P2 L7 b
TM1640_WriteData(CODE);是传输显示数据(最多 16 字节,不能多写);
# V4 A# _/ `  K6 N8 @: ?TM1640_WriteData(0x8c);是Command3控制显示:显示开,脉冲宽度设为11/16- a) J2 Z* b" n9 Y& h9 H9 ^

2 r, M  M+ L" v

3 下载验证

显示"0~F";: p! R' J: E. G# \3 C0 B" L

6 e& }( d9 G. n! s+ N: w


$ ]  ~2 K; _: b  j% m---------------------* K+ h- J4 A- b4 S3 [# _# k
作者:lilijin1995


; l. t3 b  }! H2 R* G+ t0 m& A* V3 p1 D6 z
收藏 评论0 发布时间:2022-12-8 16:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版