0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32 I2C写入驱动数码管显示实验

CHANBAEK 来源: 想啥做啥 作者: 想啥做啥 2023-12-06 16:09 次阅读

实验环境

Matlab版本: 2021b

操作系统 :Win10专业版

硬件平台 :YF-STM32-ALPHA 1R4

实验内容I2C驱动数码管芯片显示‘0’~‘A’字符

模型与原理图

本次实验所用到的simulink模型如图5.2所示,电路原理图如图5.3所示,实验效果为数码管从‘0’~‘A’轮流显示,如图5.1所示。

图片

图5.1 数码管驱动显示实验效果

图片

图5.2 数码管显示I2C驱动模型

图片

图5.3 CH422G共阴数码管电路连接

基础模型介绍与分析

1、数码管简介

数码管简单来说就是将多个LED有规律的排列在一起,实验中用到的数码管外观如图5.4所示,其型号为:FJ3461AH,三维尺寸:30.00mmx14.00mmx7.20mm,数码管内部为共阴极,内部电路原理和引脚定义如图5.5图所示。

图片

图5.4 数码管实物外观

图片

图5.5 数码管尺寸及内部电路原理图

2、CH422G芯片介绍

数码管驱动芯片CH422引脚分布如图5.6所示,引脚定义解释参考表5.1。

图片

图5.6 数码管驱动芯片

表5.1 CH422G芯片引脚功能说明

引脚号引脚名称类型引脚说明
14VCC电源正电源,持续电流不小于 100mA
7GND电源公共接地,持续电流不小于 100mA
1~4、12、13、15、16、SEG0~SEG7三态输出及输入数码管的段驱动,高电平有效,双向输入输出,内置弱上拉电阻
8~11DIG0~DIG3推挽或开漏输出数码管的字驱动,低电平有效,通用输出,可选开漏输出,低电平有效
5SDA开漏输出及输入2 线串行接口的数据输入和输出,内置上拉电阻
6SCL输入2 线串行接口的数据时钟

3、simulink模型分析

本次实验中只用到I2C写模型,写I2C数据核心模型如图5.7所示,其参数设置如图5.8所示,其中“I2C module”用于设置选用哪个I2C,即STM32中常说的I2C0,I2C1,I2C2,实验中用到的I2C芯片连接在I2C2(PB10->SCL,PB11->SDA)上,"Slave address"用于设置I2C器件地址,图中为了便于理解,使用了一个hex2dec('24')模型转换函数,“Slave register addr”用于设置寄存器地址,参数设置基本就介绍这些,后面用到其它方式再逐一介绍,这里面的具体参数含义稍后为大家解答。

图片

图5.7 I2C向寄存器写数据模型

图片

图5.8 I2C写模型参数设置

在驱动CH422芯片前,我们首先要知道进行哪些参数设置和数据写入才能使数码管正常工作,如下代码所示,先对芯片进行设置(读者朋友对着操作即可,此代码为官方提供的参考代码,官方手册上只有0x48和0x46有简要说明),我们只需往0x48,0x44,0x46地址中写入固定数据,最后往0x60地址中写如要显示的数据即可。

/* 共阴数码管编码表 0~F */
unsigned char BCD_decode_tab[ 0x10 ] = { 0X3F, 0X06, 0X5B, 0X4F, 0X66, 0X6D, 0X7D, 0X07, 0X7F, 0X6F, 0X77, 0X7C, 0X58, 0X5E, 0X79, 0X71 };   //0--9数码管数字




CH422_Write(0x48,0x01);  /* 设置输出引脚 DIG0~DIG3 开漏输出使能  */
CH422_Write(0x44,0x00);  /* 设置低8位开漏输出命令,默认方式 */
CH422_Write(0x46,0x00);  /* DIG0~DIG3使引脚输出低电平 */


CH422_Write(0x60,BCD_decode_tab[i]); /* 设置双向输入输出命令,显示数据用 */

这里作者首先用C语言方式正常驱动数码管工作,如图5.9所示,这是参数设置过程正确时逻辑分析仪捕获到的I2C波形,图5.10为正常显示数字过程中捕获到的I2C波形。

图片

图5.9 C语言方式正常设置数码管波形

图片

图5.10 C语言方式正常显示数字波形

为了实现上述相同的效果,我们需要在simulink对参数进行设置来达到上述效果,0x48,0x44,0x46参数设置如图5.11~5.13所示,细心的读者应该有发现,器件地址与C语言写的地址不一样,这里作者暂时没找到原因,但是好在还有一定的规律可循,最终得到的波形如图5.14所示,与C语言驱动的还是有点不一样,只代表其能工作,图中首次出现一个脉冲符号样式,"Enable"模型它是作为子模型的使能用,另外就是每一个写入模型都是放在一个子模型中,方便对数据进行控制操作。

图片

图5.11 simulink中"0x48"写入“0x01”

图片

图5.12 simulink中"0x44"写入“0x00”

图片

图5.13 simulink中"0x46"写入“0x00”

图片

图5.14 使用simulink模型初始化数码管I2C波形

数码管显示数据显示模型如图5.15所示,地址部分还是一样的问题,只是寄存器部分数据可以正常使用编码表中的十六进制数据,最终的波形如图5.16所示。

图片

图5.15 simulink中"0x60"写入“0x3F”

图片

图5.16 simulink模型“0x60”显示字母'A'指令波形

最后我们来看下整个模型,参考图5.2中,除最后一个显示模型,其它所有的I2C写入模型都是顺序执行,且都只执行一次,最终停留在在显示字符'A'处。

实验代码统一放在码云上,有问题欢迎给我留言!!

总结

本节实验中实现了一个基本I2C驱动数码管显示实验,模型中初步做到了参数初始化和数据显示写入,但是这里有个问题,我们无法使用硬件在环修改参数达到同步修改数码管数据的效果,这里读者朋友可以研究研究下。另外本节中还有个问题就是数据显示不是循环显示,大家也可以修改模型实现循环滚动显示。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电路原理图
    +关注

    关注

    38

    文章

    344

    浏览量

    37769
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348744
  • 数码管
    +关注

    关注

    31

    文章

    1827

    浏览量

    89948
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1346

    浏览量

    120816
  • Simulink
    +关注

    关注

    22

    文章

    513

    浏览量

    61567
收藏 人收藏

    评论

    相关推荐

    4 位动态显示数码管显示实验及电路

    复习实验一,进一步熟悉实验软硬件环境和程序调试方法。2.练习数据传送指令等基本指令的使用和软件与硬件的配合。3.掌握数码管与单片机的连接方法和简单
    发表于 09-28 12:40

    数码管显示电路

    本设计显示电路是由8段共阳极数码管(4个),三极(4个9012),电阻(4个1K,8个200Ω),电源(+5V)几部分构成。具体电路如图3-2所示:电路分析:1)1K电阻:分别接到单
    发表于 03-12 15:13

    STM32数码管问题

    学习51单片机的都知道,可以有I/O口做为1个字节整体输出来控制数码管显示,学习STM32也已经快1个多月了,但是看到所有的例程和方案里少了数码管
    发表于 03-11 05:24

    「正点原子NANO STM32开发板资料连载」第十七章 数码管显示实验

    1)实验平台:ALIENTEK NANO STM32F411 V1开发板2)摘自《正点原子STM32F4 开发指南(HAL 库版》关注官方微信号公众号,获取更多资料:正点原子第十七章
    发表于 04-21 12:00

    什么是数码管静态显示

    注意:本实验采用清翔电子51单片机开发板(同样的51单片机开发板,不同型号,内部设计会有一定差异,程序不一定适用)1、数码管知识a图为一个数码管每段对应的字母b图为共阴极数码管(他们的
    发表于 07-06 07:28

    单片机数码管显示实验报告

    单片机数码管显示实验报告,一、 实验目的(一) 掌握单片机 I/O 口的输出控制;(二) 熟悉开发板上单片机
    发表于 07-21 09:12

    STM32数码管显示简介

    STM32数码管显示简介1.硬件部分STM32F103C8T6 最小系统板一位共阴数码管2
    发表于 08-04 08:51

    STM32F103单片机驱动TM1637数码管显示模块的方法

    四位数码管显示模块实际运行效果下面先看一下TM1637和数码管连接的具体线路图 实际使用的模块没有带按键,只用了4个数码管,模块和单片机连接只需要4根线VCC、GND、CLK、DIO。
    发表于 12-08 07:08

    动态数码管显示实验现象说明

    完整电路图:完整代码:/*实验说明:实验接线:1,动态数码管模块-->单片机管脚参考动态数码管显示实验
    发表于 01-07 08:04

    数码管的结构和功能,如何使用数码管

    )打好基础。二、实验器材:C8051F330单片机,0.5K电阻八个,10K电阻六个,9013三极(NPN型)六个,三个共阳极双数码管,稳压电源,跳线,插槽,电烙铁,锡丝若干三、
    发表于 01-10 07:42

    数码管驱动电路分享

    根据项目需求可以用I/O外部上拉,用来驱动数码管;也可以74HC138(38译码器)+74HC245(8路信号收发器)驱动数码管。本文会以后
    发表于 01-24 06:27

    什么是数码管?静态数码管驱动介绍

    目录一,什么是数码管二,静态数码管驱动三,动态数码管四,动态数码管显示编程实战五,使用38译码
    发表于 02-24 06:21

    嵌入式教程_DSP实验箱操作教程2-25 数码管显示实验

    实验目的 本教程是基于创龙教仪TL6748-PlusTEB操作完成的。 本次教程学习的目的是了解HD7279A-SP驱动芯片特性和数码管控制的原理,并实现控制数码管
    发表于 06-27 13:41

    数码管显示实验

    数码管显示实验 一、实验目的数码管是单片机系统常用的输出显示器件,单个
    发表于 09-28 12:28 1.5w次阅读
    <b class='flag-5'>数码管</b><b class='flag-5'>显示</b><b class='flag-5'>实验</b>

    数码管循环显示实验

    数码管循环显示实验 数码管循环显示实验一、实验目的
    发表于 03-23 10:42 2234次阅读