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

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

    关注

    40

    文章

    345

    浏览量

    38252
  • STM32
    +关注

    关注

    2265

    文章

    10870

    浏览量

    354687
  • 数码管
    +关注

    关注

    32

    文章

    1874

    浏览量

    90919
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1481

    浏览量

    123238
  • Simulink
    +关注

    关注

    22

    文章

    522

    浏览量

    62300
收藏 人收藏

    评论

    相关推荐

    ZLG7290 I2C接口键盘及LED驱动

    ZLG7290 I2C接口键盘及LED驱动器:一特点1 I2C 串行接口提供键盘中断信号方便与处理器接口2驱动8 位共阴
    发表于 09-22 17:08 12次下载
    ZLG7290 <b class='flag-5'>I2C</b>接口键盘及LED<b class='flag-5'>驱动</b>器

    I2C总线接口模块设计

    实验是基于EasyFPGA030的I2C总线接口模块设计,用EasyFPGA030开发套件通过I2C协议实现对二线制I2C串行EEPROM的读写操作,先把数据
    发表于 11-02 17:01 41次下载

    LED数码管显示驱动芯片 BL1616

    LED数码管显示驱动芯片 BL1616一、概述:BL1616是8段×16位LED显示驱动芯片,内置时钟振荡电路,可以动态
    发表于 11-13 16:17 114次下载

    基于EasyFPGA030的I2C总线接口模块

    实验是基于EasyFPGA030的I2C总线接口模块设计,用EasyFPGA030开发套件通过I2C协议实现对二线制I2C串行EEPROM的读写操作,先把数据
    发表于 03-11 15:37 29次下载

    数码管显示实验

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

    LED数码管显示控制实验

    实验 LED数码管显示控制实验一、实验目的1.学会用PLC控制LED数码管
    发表于 09-30 13:18 1.4w次阅读
    LED<b class='flag-5'>数码管</b><b class='flag-5'>显示</b>控制<b class='flag-5'>实验</b>

    数码管循环显示实验

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

    LED数码管显示实验

    LED数码管显示实验 一.实验目的1.掌握数字、字符转换成显示段码的软件译码方法2.掌握静态
    发表于 05-16 02:07 6416次阅读
    LED<b class='flag-5'>数码管</b><b class='flag-5'>显示</b><b class='flag-5'>实验</b>

    使用单片机实现兼容I2C接口的MAX6955驱动16段数码管显示C语言实例

    本文档的主要内容详细介绍的是使用单片机实现兼容I2C接口的MAX6955驱动16段数码管显示C语言实例免费下载。
    发表于 03-31 14:45 16次下载

    单片机:数码管显示实验

    一、 实验目的(一) 掌握单片机 I/O 口的输出控制;(二) 熟悉开发板上单片机 I/O 口与数码管的电路连接;(三) 掌握 keil C
    发表于 11-11 11:21 10次下载
    单片机:<b class='flag-5'>数码管</b><b class='flag-5'>显示</b><b class='flag-5'>实验</b>

    C51单片机实验——7段数码管实验

    实验方案通过程序设计,控制实验箱上7段数码管显示出设计方案的结果。硬件连线:P2口作为输出口连接数码
    发表于 11-23 16:36 19次下载
    <b class='flag-5'>C</b>51单片机<b class='flag-5'>实验</b>——7段<b class='flag-5'>数码管</b><b class='flag-5'>实验</b>

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

    是TM1637四位数码管显示模块实际运行效果下面先看一下TM1637和数码管连接的具体线路图 实际使用的模块没有带按键,只用了4个数码管,模块和单片机连接只需要4根线VCC、GN
    发表于 11-25 10:51 90次下载
    <b class='flag-5'>STM32</b>F103单片机<b class='flag-5'>驱动</b>TM1637<b class='flag-5'>数码管</b><b class='flag-5'>显示</b>模块

    STM32--数码管显示使用

    STM32数码管显示简介1.硬件部分STM32F103C8T6 最小系统板 一位共阴数码管2
    发表于 12-24 19:32 53次下载
    <b class='flag-5'>STM32</b>--<b class='flag-5'>数码管</b><b class='flag-5'>显示</b>使用

    STM32 I2C存取实验资料

    STM32 I2C存取实验资料
    发表于 12-30 10:36 16次下载

    STM32 Cubemx实现串口通信、I2C与GPIO的综合应用

    项目目标通过按键,按下的值能够串口接受并显示出来,串口发送数字,使用数码管显示数字。将串口发送的数字使用I2C写入EEPROM,按复位键并能
    发表于 01-14 10:43 1次下载
    <b class='flag-5'>STM32</b> Cubemx实现串口通信、<b class='flag-5'>I2C</b>与GPIO的综合应用