void函数调用时显示不允许使用不完整的_4位数码管显示模块驱动

TM1637四位数码管模块是一个带时钟点的4位共阳数码管(0.36英寸)的显示模块,驱动芯片为TM1637,驱动方式为IIC,因此只需2根信号线即可使单片机控制4位8段数码管(数码管8级亮度可调)。

模块特点如下:

  • 显示器件为4位共阳数码管

  • 数码管8级亮度可调

  • 控制接口电平可为5V或3.3V

  • IIC驱动,只需要占用两个IO引脚即可实现驱动显示功能

  • 带有时钟点,应用于电子钟显示很方便

TM1637管脚定义

a3dca808cd71096e20b217bffc232ce3.png

硬件连接

模块共4个引脚(GND、VCC、DIO、CLK),GND为地,VCC为供电电源,DIO为数据输入输出脚,CLK为时钟信号脚。

用4根母对母杜邦线将4位数码管显示模块和STM32核心板连接起来,如下图、下表所示:

8da5f2f4d006d04626652c2d9ab502a7.png
四位数码管连接线STM32核心板
CLK黄色PA3
DIO蓝色PA2
VCC红色3.3V
GND黑色GND

IIC总线时序分析

因为TM1637是IIC总线驱动,所以驱动TM1637的总线时序需满足IIC总线的规定。

下图是指令数据传输过程(读按键数据时序):

e57253318aa9664fa13e4dad663c543b.png

上面时序图需要注意以下几点:

  1. IIC总线对数据的有效性要求:在输入数据时,当CLK是高电平时,DIO上的信号必须保持不变;只有CLK上的时钟信号为低电平时,DIO上的信号才能改变。

所以我们封装的写字节的函数,都是在CLK引脚为低电平的时候,修改DIO的数据;

30340b4d0605be17d3118a2406e41d2c.png
  1. 数据输入的开始条件是CLK为高电平时,DIO由高变低;
1a1cd2846d01f65ebb8e812ed970b3da.png

具体代码实现如下:

 //IIC开始void TM1637_start(void){	 CLK_1;	 DIO_1;	 delay_us(2);	 DIO_0;}
  1. 结束条件是CLK为高电平时,DIO由低电平变为高电平。
e776fe8855fc1623e9c58a2b3eceed70.png

具体代码实现如下:

//IIC停止void TM1637_stop(void){	 CLK_0;	 delay_us(2);	 DIO_0;	 delay_us(2);	 CLK_1;	 delay_us(2);	 DIO_1;	 delay_us(2);}
  1. TM1637的数据传输带有应答信号ACK,在传输数据的过程中,在时钟线的第九个时钟芯片内部会产生一个应答信号ACK将DIO管脚拉低。
8e02e4f80c744bf2e5626c6ab87ca428.png

写命令的实现

根据上面实现的IIC 写字节函数,实现下面地址自动加1模式下向SRAM写数据,下图中时序图和代码部分,颜色、形状相同部分相互对应。

e220a6664046192d9952cf992747a95d.png

起始信号之后,由DIO输入TM1637的第一个字节作为一条指令。经过内部译码,取这个字节的B7、B6两位比特位以区别不同的指令。

B7B6指令
01数据命令设置
10显示控制命令设置
11地址命令设置

数据命令设置

该指令用来设置数据写和读,B1和B0位不允许设置01或11,有上面表格可以查到B7=0,B6=1。

ec9407893259a4ca479a44fcca6a8652.png

比如:

d95b9d06e7e9a0ddbb906c15936b6d3c.png

0x40这个命令,就对应上表中第一行:写数据到显示寄存器。

地址命令设置

c9e6e739099f2147c89f7edcf979b485.png

该指令用来设置显示寄存器的地址,如果地址设为06H或更高,数据将被忽略,直到有效地址被设定;上电时,地址默认为00H。

比如:

ed08129dbcd699974e86990cea3ff935.png

0xC0这个就是地址命令,对应显示地址00H,即第一个数码管的地址,后面发送数据就可以给第一个数码管设置显示内容。

显示控制

d1bedb74a53a7e1f370c0e89c3a11604.png

比如:

92c100a4428f8ab0d2b87f7f9ae22b38.png

0x8F对应二进制1000 1111,B3=1代表开显示,B2~B0的111代表脉冲宽度,即显示亮度,通过表格可以得出0x8F代表最高亮度。

结果展示

这种数码管可以显示的内容有:0123456789AbcdEFHLnPU,下面视频对这些内容进行了循环显示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在线就能用的Linux我给你找好了

今天的天气真的是超级爽,秋日的凉风吹在脸上真的太美了,好不容易的假期,希望大家都玩得开心,今天分享一篇文章,是守望兄的,总结了几个在线的Linux,喜欢的同学,可以保存下来&#xff…

mysql访问类型最好的_【干货满满】最全的MySQL性能指南(一):选择最佳的数据类型...

对于 MySQL 数据库来说,好的逻辑表和物理表的规划至关重要,我们需要根据查询语句来针对性地设计 Schema ,没有万能好用的 Schema。一个 denormalized 的 schema 可以在某些场景下加速语句查询,但是放在其他应用场景下就会适得其反…

测试两个主机之间的连通性_借助网络测试神器极速解决网络故障

时下,网络使用越来越频繁,随之遇到网络故障的情况也多起来,那么诊断网络故障就成了必不可少的一环,投诉和求助是一种基本的方法,但有时太过缓慢,有些时候自己可以快速搞定,检查到故障原因所在&a…

随想,对嵌入式职场建议

guoqingjie已经过去两天了,因为楠哥生病,我们搁浅在了深圳,不过相比在路上的奔波,待在家里感觉惬意不少,不用在路上各种操心,之前上班感冒,身体处在亚健康状态,睡了两天身体也恢复一…

java可达性_java垃圾回收机制--可达性算法

先说一些题外话,Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区,这些区分为线程私有区和线程共享区1、线程私有区a、程序计数器记录正在执行的虚拟机字节码指令地址。此区域是是唯一一个在java虚拟机规范中没有规定任何Ou…

为什么要有uboot?

一、为什么要有uboot1.1、计算机系统的主要部件(1)计算机系统就是以CPU为核心来运行的系统。典型的计算机系统有:PC机(台式机笔记本)、嵌入式设备(手机、平板电脑、游戏机)、单片机(家用电器像电饭锅、空调…

华为路由器上有没有mac表_MAC地址表、ARP缓存表、路由表及交换机、路由器基本原理...

MAC地址表说到MAC地址表,就不得不说一下交换机的工作原理了,因为交换机是根据MAC地址表转发数据帧的。在交换机中有一张记录着局域网主机MAC地址与交换机接口的对应关系的表,交换机就是根据这张表负责将数据帧传输到指定的主机上的。交换机的…

#define的高级用法

来源:嵌入式大杂烩地址:https://blog.csdn.net/xiaoxu2050/article/details/82893476一、宏的定义与撤销需要注意的是:(1)宏定义应注意添加括号,这样语义会比较清晰。(2)使用#undef可…

python读取csv文件_python3.0读取csv文件

创建CSV文件,可以打开excel文件,创建表格以后,另存为csv文件(以逗号分隔的文件)以文本格式打开,发现是用逗号分隔的用python读取csv文件,首先要引入一个库:csvimport csvdef getCsvFile(strpath):with open(strpath, &…

直击中关村创业大街,新街头霸王来了

中国的硅谷在北京中关村。如今,中关村中正在酝酿硅谷中的硅谷,这里将不断诞生最前卫最现代的互联网和移动互联网创业公司,他们当中极可能孵化出中国互联网企业未来10年的新的BAT。这个硅谷中的硅谷。就是中关村创业大街。这条街在过去15年是北…

我们应该这样理解鸿蒙

之前写过文章谈到的鸿蒙,很多人觉得我说的有点过分,但是我觉得现在出来的情况还是符合预期的,鸿蒙正在完成他的任务。讲个故事,手机还没有普及的时候,相机的地位非常高,相机里面有一个东西叫做胶卷&#xf…

人工智能在语音和数字图像处理领域有哪些具体化应用_智能呼叫中心系统有哪些优势...

近年来,随着科技的发展特别是人工智能技术、云计算、大数据的到来,新技术逐渐渗入人们日常生活中的各行各业里面,以机器人来代替人工处理繁重的任务变得普遍。在人工智能时代下,新一代智能呼叫中心系统应运而生,呼叫中…

centos下mysql多实例安装3306、3307实例(2014-10-15)

背景说明 mysql的安装方法有多种,如二进制安装、源代码编译安装、yum安装等。yum安装仅仅能安装mysql 5.1 版本号;源代码安装编译的过程比較长。若没有对源代码进行改动且要求使用mysql较高版本号,建议使用二进制安装。本文以二进制安装mysql…

如何自己实现一个栈

文章转自编程珠玑,作者:守望先生前言栈是一种应用广泛的数据结构,例如函数的调用就需要使用栈,其实我们在介绍《栈的操作栈的常见操作有出栈(POP),从栈中弹出一个元素;入栈(PUSH),将一个元素压入…

python编写ATM类_Python中编写类的各种技巧和方法

有关 Python 内编写类的各种技巧和方法(构建和初始化、重载操作符、类描述、属性访问控制、自定义序列、反射机制、可调用对象、上下文管理、构建描述符对象、Pickling)。你可以把它当作一个教程,进阶,或者使用参考;我希望它能够成为一份针对…

再说嵌入式入门

我之前写过几篇嵌入式入门的文章 不过我的读者还是觉得不够过瘾,我觉得还是要着重说一下嵌入式软件应该重点学习什么,guoqing收假最后一天写文。精通C语言 精通C语言 精通C语言C语言对于嵌入式软件来说就是他的命脉,不懂C语言的人根本就不能说…

java ios 开发工具_iOS应用开发的五个Java开源工具

随着第三方工具的不断壮大,开发人员逐渐摆脱政策束缚,对于iOS系统的封闭性为其他语言(如Java)开发者诟病得到解脱,开始使用自己熟悉的语言来编写iOS本地应用,或将其他平台上的应用移植到iOS上。本文为你介绍5款开源的开发工具&…

hive 时间转字符串_大数据面试杀招——Hive高频考点,还不会的进来挨打

一、什么是Hive,为什么要用Hive,你是如何理解Hive?面试官往往一上来就一个“灵魂三连问”,很多没有提前准备好的小伙伴基本回答得都磕磕绊绊,效果不是很好。下面贴出菌哥的回答:Hive是基于Hadoop的一个数据仓库工具&a…

java jpa jar_JPA 开发所需的Jar包 (基于Hibernate)

JPA 开发所需的Jar包 (基于Hibernate)(一)下载Sun 的JPA规范(即:Jar包)登陆JavaEE 的 Technologies 页面:http://java.sun.com/javaee/technologies/index.jsp选择 Java Persistence 2.0选择 Final Release 中的 Download Page 后进入下面的界面:下载如下…

C语言入坑指南-数组之谜

前言在C语言中,数组和指针似乎总是“暧昧不清”,有时候很容易把它们混淆。本文就来理一理数组和指针之间到底有哪些异同。数组回顾在分析之前,我们不妨回顾一下数组的知识。数组是可以存储一个固定大小的相同类型元素的顺序集合。为了便于我们…