版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式原理与应用集成电路学院
嵌入式课程组STM32数码管显示原理与应用项目33.1数码管01数码管概述04数码管显示方式03数码管字段编码02数码管的结构和工作原理了解数码管的结构和工作方式。了解数码管字段编码模式。了解数码管显示方式。任务内容:任务要求:数码管概述01数码管概述数码管是一种用于显示数字的电子元件,通常由多个发光二极管(LED)组成,能够显示数字0到9以及一些特殊字符,如字母和符号。数码管也称为LED数码管,根据其段数的不同可分为七段数码管和八段数码管。八段数码管相比七段数码管多一个发光二极管单元用于显示小数点,因此外形稍有不同。数码管具有亮度高、低功耗、寿命长等特点,广泛应用于各种计数、显示和指示系统中,如时钟、计时器、计数器、温度显示器等。数码管的结构和工作原理02数码管的结构和工作原理八段数码管由8个发光二极管构成,能够显示数字、字母和符号,通过不同的组合实现。数码管根据发光二极管连接的方式可分为共阳极数码管和共阴极数码管。共阳数码管的所有发光二极管的正极连接到一起形成公共端,在使用时应将公共端接到+5V。当某一字段发光二极管的负极为低电平时,对应字段点亮;负极为高电平时,对应字段不亮。共阴数码管的所有发光二极管的负极连接到一起形成公共端,在使用时应将公共端接到地GND。当某一字段发光二极管的正极为高电平时,对应字段点亮;正极为低电平时,对应字段不亮。数码管字段编码03数码管字段编码单片机连接数码管时,通常GPIO口8个引脚从低位到高位分别连接数码管a~dp八个引脚,在单片机系统中要使数码管显示出相应的数字或字符时,GPIO口就需要输出相应的字段编码。显示内容PX7PX6PX5PX4PX3PX2PX1PX0共阴字段码共阳字段码dpgfedcba0001111110x3f0xc01000001100x060xf92010110110x5b0xa43010011110x4f0xb04011001100x660x995011011010x6d0x926011111010x7d0x827000001110x070xf88011111110x7f0x809011011110x6f0x90A011101110x770x88B011111000x7c0x83C001110010x390xc6D010111100x5e0xa1E011110010x790x86F011100010x710x8e数码管显示方式04数码管显示方式静态显示方式每个LED分段直接与驱动电路的输出端口相连优点:
简单直接,适用于少量数码管的显示
控制电路简单,成本较低缺点:
需要较多的引脚
当数码管数量增多时,引脚数量会大幅增加数码管显示方式动态扫描显示方式每个数码管的LED分段依次被快速地点亮,形成连续的显示效果优点:
有效节省引脚数量,适用于大量数码管的显示
可实现多个数码管同时显示缺点:
驱动电路复杂,需要采用锁存器硬件模块来控制数码管的扫描
对控制时序要求较高数码管显示方式锁存器驱动方式数码管的共阳极(或共阴极)端子连接到同一个电源,LED分段分别连接到锁存器的输出端口锁存器的输入端口连接到单片机的输出端口,控制锁存器的状态优点:
节省引脚数量,降低连接成本和布局复杂度
可实现多个数码管的同时显示缺点:
需要额外的锁存器芯片,增加了硬件成本
控制时序复杂,需要确保锁存器的输出信号与数码管的显示时序匹配3.2一位数码管显示程序设计01电路设计02编写代码能使用Proteus将STM32F103C8单片机PB0-BB7连接共阴数码管。能通过编程实现数码管循环显示0-F。任务内容:任务要求:电路设计01电路设计数码管引脚从左到右依次为a,b,c,d,e,f,g,dp,最右侧的是公共端。分别与STM32F103C8单片机的PB0-PB7相连。编写代码02编写代码使用STM32CubeMX工具配置用于数码管的8个GPIO引脚。将数码管的8个引脚按固定顺序连接到STM32F103C8单片机的PB0-PB7引脚上,确保每个引脚都配置为推挽输出模式、默认低电平、无上拉下拉电阻、最大输出速度为低速。编写代码2.生成代码在STM32CubeMX中完成GPIO配置后,点击“Project”菜单中的“GenerateCode”生成代码。3.编写代码打开生成的STM32CubeIDE工程,在main.c文件中,编写数码管显示代码。编写代码程序首先定义了一个名为seg_num[]的数组,其中存储了共阴数码管每个数字对应的段码,每个元素表示一个数字在循环体内部,通过将seg_num[]数组中的元素依次写入GPIOB的输出数据寄存器,来控制共阴数码管显示数字0到F。每个数字的显示时间为0.5秒,通过调用HAL_Delay(500)
函数实现延时。编写代码仿真效果-数码管循环显示0-F3.3STM32CubeIDE自定义函数01自定义函数作用02STM32CubeIDE自定义函数流程了解自定义函数的作用。掌握自定义函数的流程。任务内容:任务要求:自定义函数作用01自定义函数作用功能封装与模块化:自定义函数将具有特定功能的代码封装到一个函数中,实现功能模块化,提高代码的可读性和可维护性。代码复用:自定义函数可以在不同的地方重复使用,从而提高代码的复用性,避免了重复编写代码,提高了开发效率。提高代码可读性:将复杂的功能抽象为一个函数名,提高了代码的可读性,通过命名和函数注释清晰地表达功能和用途。简化调试和测试:将代码封装为函数使得调试和测试更简单,可以更快地定位到具体函数进行调试,而不必检查整个程序的代码。项目组织与管理:自定义函数将项目的不同功能模块进行逻辑划分,并封装为函数库或模块,便于项目组织和管理,提高了开发效率。STM32CubeIDE自定义函数流程02STM32CubeIDE自定义函数流程1.为自定义函数创建文件夹STM32CubeIDE生成代码创建工程目录如下图所示,用户常用的文件都在“Core”目录下,“Inc”文件夹存放相关头文件,“Src”文件夹存放源文件,我们创建的自定义函数文件夹也放在“Core”目录下。STM32CubeIDE自定义函数流程选中“Core”文件夹点击鼠标右键,并依次点击“新建”->“文件夹”,并起名“HardWare”,“Core”目录下就会新增一个“HardWare”文件夹。STM32CubeIDE自定义函数流程该文件夹可用于存放各种外设相关的函数文件,如显示、键盘等,使代码实现功能模块化。在该文件夹下再新建一个文件夹存放数码管自定义函数。STM32CubeIDE自定义函数流程2.创建自定义函数(1)创建源文件选中新建的“7seg”文件夹点击鼠标右键,并依次点击“新建”->“SourceFile”创建源文件,并在弹出的对话框中为源文件起名“7seg.c”,需要注意源文件后缀必须加“.c”STM32CubeIDE自定义函数流程(2)创建头文件选中新建的“7seg”文件夹点击鼠标右键,并依次点击“新建”->“HeaderFile”创建头文件,并在弹出的对话框中为头文件起名“7seg.h”,需要注意源文件后缀必须加“.h”STM32CubeIDE自定义函数流程3.编写自定义函数(1)通过“include”关联相关头文件“7seg.h”和“main.h”。(2)将原来在“main.c”中的代码移植到“7seg.c”文件中。(3)在“7seg.h”中加入显示函数的声明。STM32CubeIDE自定义函数流程4.主程序调用自定义显示函数(1)包含自定义显示函数头文件。(2)主程序中调用自定义显示函数STM32CubeIDE自定义函数流程5.工程文件中关联文件点击“项目”菜单,选择“属性”。在弹出的对话框中,依次点击“C/C++General”下拉项中的“PathsandSymbols”。在“PathsandSymbols”界面,点击“Add”按钮。弹出“adddirectorypath”界面,点击“Workspace”工作空间。STM32CubeIDE自定义函数流程在目录选择窗口中,选择之前创建的自定义函数目录“7seg”,并点击确定。STM32CubeIDE自定义函数流程回到“PathsandSymbols”界面,已经出现了添加的“7seg”目录地址。点击“应用并关闭”即可完成设置。3.4函数调用实现数码管显示设计01相关概念02编写代码了解有参函数和无参函数。学习编写显示函数和主程序。任务内容:任务要求:相关概念01相关概念有参函数(带参数的函数)和无参函数(不带参数的函数)是编程中常见的两种函数类型。有参函数:有参函数指的是在函数定义时需要传入参数的函数。这些参数可以是函数执行时所需的数据或信息,它们被用于在函数内部执行特定的操作。有参函数能够接收外部传入的数据,并且可以根据传入的参数值执行不同的操作。无参函数:无参函数指的是在函数定义时不需要传入参数的函数。这些函数不依赖外部传入的数据或信息,它们的执行结果通常是固定的或者仅与函数内部的逻辑有关。编写代码02编写代码一、编写显示函数在有参显示函数中,函数只需要满足数码管显示功能即可,显示内容和显示方式则由主程序控制。显示函数代码编写代码二、编写主函数在主程序中调用有参显示函数,主程序可以自定义显示内容和显示方式①显示指定数值代码:该代码仿真实现数码管固定显示“3”,可以通过修改数值改变数码管显示内容。②数码管循环显示9-0代码:编写代码STM32是由意法半导体(STMicroelectronics)推出的一系列32位ARMCortex-M单片机。STM32系列单片机具有丰富的外设和强大的性能。STM32系列单片机广泛应用于工业控制、汽车电子、消费类电子等领域。STM32系列微控制是嵌入式系统设计中的重要组成部分。3.5多位数码管静态显示设计01电路设计03编写代码02数据处理掌握以静态显示的方式显示两位数码管。任务内容:任务要求:电路设计01电路设计打开Proteus软件并新建工程。从元件库中添加“7SEG-MPX1-CC”共阴数码管组件。将个位数码管连接至GPIOB的低8位。将十位数码管连接至GPIOB的高8位。数据处理02数据处理如果数码管要显示数值“24”,这两个字段码是如何产生的首先定义了一个名为a的变量,赋值为24,表示待处理的两位数字。使用除法运算将变量a除以10,得到的商保存在变量shi中,即获取十位数。使用求余运算将变量a除以10的余数保存在变量ge中,即获取个位数。通过以上操作,将数字24拆分成十位数和个位数,并存储在变量shi和ge中。可以利用这两个变量的值来获取对应数字的段码,用于在数码管上进行显示。编写代码03编写代码1.配置GPIO引脚打开STM32CubeIDE软件,新建一个基于STM32F103C8单片机的“STM32Project”工程,用STM32CubeMX工具配置连接两个数码管的16个GPIO引脚。将两个数码管的16个引脚按固定顺序连接到STM32F103C8单片机的PB0-PB15引脚上,确保每个引脚都配置为推挽输出模式、默认低电平、无上拉下拉电阻、最大输出速度为低速。编写代码3.编写代码与控制单个数码管相比,控制两位数码管的静态显示代码编写存在一个难点,即需要使用同一个GPIO口控制两个数码管的显示。其中,GPIOB的低8位用于输出数码管个位的字段码,而GPIOB的高8位用于输出数码管十位的字段码。因此,设计思路是将数码管的个位和十位字段码整合在一起,由GPIOB同时输出。这样,就可以实现两个数码管同时显示数值。编写代码将两个8位的字段码整合在一个16位变量的过程,具体步骤如下:创建一个16位的变量,用于存储两个8位字段码的整合结果。将十位字段码赋值给变量的低8位,并将该变量向左移动8位。将个位字段码和变量进行或运算就能够正确地将两个字段码整合在一起。整合完成后,这个16位变量就包含了两个8位字段码的信息。编写代码自定义函数“7seg.c”代码编写代码自定义函数“7seg.h”代码第三行代码是定义了一个小数点点亮的宏定义"point",编程采用的字段码是不包含小数点的七段码,因此数码管显示时数码管都是不会点亮的,如果需要数码管的小数点点亮,可以单独控制小数点引脚,小数点是由PB15控制,可以通过宏定义"point"使小数点点亮。编写代码主函数“main.c”核心代码3.6锁存器在数码管电路中的应用01锁存器03编写代码02电路设计学会锁存器控制数码管静态显示电路设计。学会锁存器控制数码管代码编写。任务内容:任务要求:锁存器01锁存器锁存器简介:锁存器是逻辑电路元件,用于将输入信号的状态保持在输出端,直到下一次输入信号到来或复位操作。基于触发器特性工作,可在时钟信号或输入信号变化下触发状态转换。常见类型包括RS触发器、D触发器、JK触发器和T触发器。工作原理:当输入信号变化时,锁存器保存当前输入状态,并持续输出该状态。输出状态保持直到接收到下一个输入信号或复位信号。在电路中起到存储、延迟和信号控制作用。74HC573锁存器:74HC573是一种8位锁存器,可存储8位二进制数据,用于数字系统的数据存储和输出控制。具有8个输入端(D0-D7)、8个输出端(Q0-Q7)和一个控制端(LE)用于控制输出状态。锁存器74HC573工作原理:控制端(LE)为高电平时,锁存器处于工作状态,输入信号(D0-D7)传递到输出端(Q0-Q7)。控制端(LE)为低电平时,锁存器被锁定,输出状态保持不变,不受输入信号影响。特点:输入端具有8位数据输入,输出端具有8位数据输出,适用于8位数据存储和输出控制。具有高速和低功耗的特点,适用于数字系统的高性能应用。可通过级联多个锁存器实现更多位的数据存储和输出控制。应用场景:数据存储与输出控制:可用于存储临时数据或控制外部设备。时序逻辑:配合时钟信号实现复杂的时序控制功能。数字系统中的高性能应用:适用于要求高速和低功耗的数字系统。片选信号(低有效)控制信号INPUTOUTPUT`OELEDQ0111010000XQ01XXZ电路设计02电路设计同样显示两位数码管占用的GPIO口减少了很多,并且以后每增加一个数码管只需要多提供一位GPIO口即可,这就是通过锁存器控制数码管静态显示的优势。PA0-PA7与两个锁存器的输入口D0-D7相连,用于输入数码管段码,PA8和PA9分别连接两个锁存器,用于控制锁存器状态。OE接地使两个锁存器始终处于选中工作状态。编写代码03编写代码1.配置GPIO引脚打开STM32CubeIDE软件,新建一个基于STM32F103C8单片机的“STM32Project”工程,用STM32CubeMX工具配置连接锁存器的10个GPIO引脚。将两个锁存器的8个引脚一一并联按固定顺序连接到STM32F103C8单片机的PA0-PA7引脚上,另外将两个锁存器的LE分别接到PA8和PA9引脚上,确保每个引脚都配置为推挽输出模式、默认低电平、无上拉下拉电阻、最大输出速度为低速,并且PA8和PA9分别添加用户标签“GE”、“SHI”。编写代码定义两个锁存器:十位锁存器:控制十位数码管的显示。个位锁存器:控制个位数码管的显示。共用一组GPIO口:两个锁存器的输入共用一组GPIO口,接收相同的字段码。分时接收字段码:先取出十位数码管要显示数值的字段码,通过GPIOA输出字段码,通过PA8控制十位锁存器LE产生下降沿,使十位锁存器锁存并输出该段码。再取出个位数码管要显示数值的字段码,通过GPIOA输出字段码,通过PA9控制个位锁存器LE产生下降沿,使个位锁存器锁存并输出该段码。锁存器状态控制:在十位锁存器输出段码并锁存时,个位锁存器处于锁存状态,不接收新的字段码。在个位锁存器输出段码并锁存时,十位锁存器处于锁存状态,不接收新的字段码。编写代码自定义函数“7seg.c”代码编写代码主函数“main.c”代码编写代码仿真效果3.7数码管动态显示设计01动态显示概述04四位数码管动态显示设计03数码管动态显示原理02动态显示数码管结构了解动态显示数码管结构。了解数码管动态显示原理。学会四位数码管动态显示设计。任务内容:任务要求:动态显示概述01动态显示概述数码管的动态显示原理是一种通过时间分片的方式,实现多位数码管依次显示数字的方法。其基本原理是利用人眼视觉暂留的特性,通过高速切换每个数码管的显示,使得所有数码管看起来像是同时显示的。动态显示数码管结构02动态显示数码管结构当数码管的位数比较多时,若采用静态显示方式,会占用大量的I/O口,硬件电路比较复杂。为了简化电路,降低成本,就采用了动态显示方式。动态显示电路是将各位数码管的相同的字段连在一起,由一个并行I/O口控制,各位数码管的公共端由另一个并行I/O口控制。动态显示方式占用I/O口少,电路简单,但程序设计比静态显示方式复杂。数码管动态显示原理03数码管动态显示原理依次选通每个数码管:单片机的GPIO口(Px口)输出字段码,决定显示的内容。单片机的另一个GPIO口(Py口)输出位码,决定哪位数码管点亮。实现轮流显示内容,例如,要求显示“12345678”。首先,Px口输出“1”的字段码“0x3f”,Py口输出位码“0xfe”选择第一个数码管点亮,调用1~2ms的延时程序。然后,Px口输出“2”的字段码“0x06”,Py口输出位码“0xfd”选择第二个数码管点亮,调用1~2ms的延时程序。以此类推,依次显示“12345678”,并反复循环。实现连续显示效果:按一定的时间间隔逐个切换数码管的选通状态,使每个数码管在人眼中呈现连续显示的效果。四位数码管动态显示设计04四位数码管动态显示设计1.电路设计在Proteus中新建基于STM32F103C8的工程,在元件模式中添加“74HC573”锁存器和“7SEG-MPX4-CCBLUE”的四位共阴动态显示数码管,并绘制仿真电路图四位数码管动态显示设计2.编写代码四位数码管动态显示程序的设计流程是:GPIO口PB0-PB7发送第一位显示数值的段码(显示数值)GPIO口PB0-PB7发送第一位显示数值的位码(显示位置)延时1-2ms让第一位数码管显示数值GPIO口PB0-PB7发送第二位显示数值的段码(显示数值)GPIO口PB0-PB7发送第二位显示数值的位码(显示位置)延时1-2ms让第二位数码管显示数值GPIO口PB0-PB7发送第三位显示数值的段码(显示数值)GPIO口PB0-PB7发送第三位显示数值的位码(显示位置)延时1-2ms让第三位数码管显示数值GPIO口PB0-PB7发送第四位显示数值的段码(显示数值)GPIO口PB0-PB7发送第四位显示数值的位码(显示位置)延时1-2ms让第四位数码管显示数值循环程序,数码管动态显示指定数值。四位数码管动态显示设计根据设计流程使第一个数码管点亮的代码如下:四位数码管动态显示设计只要再复制三次以上代码并且修改对应的段码和位码就可以使四位数码管同时显示,但是这里要强调一个在动态显示中重要的概念“消影”。数码管动态显示中的“消影”指的是在切换显示不同数码管时,先将之前显示的数码管熄灭(消影),然后再点亮新的数码管。这种操作是为了确保在切换数码管显示时不会出现两个数码管同时显示的情况,防止出现乱码,从而保证显示的准确性和清晰度。3.优化代码以上代码过于冗长,代码可以分为四组,每组控制一位数码管显示指定数值,四组代码中除了段码、位码部分基本相同,可以通过循环方式对代码进行优化。四位数码管动态显示设计仿真结果3.8实战演练-动态显示日历设计01设计要求03编写代码02电路设计掌握单片机控制数码管的程序设计方法。掌握动态显示日历的设计原理。提高编码能力和逻辑思维能力。任务内容:任务要求:设计要求01设计要求使用STM32CubeIDE进行单片机程序设计,结合Proteus进行电路仿真,实现数码管动态显示年月日的功能。实现动态显示的功能:设计程序使得数码管可以动态显示当前的年、月、日信息,包括年份的四位数字、月份的两位数字、日期的两位数字。在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年兰州市城关区事业单位人员招聘笔试参考试题及答案详解
- 企业办公网络信息安全策略手册
- 孤独症患者的情绪管理策略
- 2026山东麟州投资控股有限公司招聘10人考试参考题库及答案详解
- 2026年珠海市斗门区事业单位人员招聘笔试模拟试题及答案详解
- 云南省蒙自市2026年八年级物理第一学期期末调研试题含解析
- 内蒙古通辽市科尔沁右翼中学旗县2026-2027学年八年级数学第一学期期末统考试题含解析
- 湖南省沅陵县2027届数学八上期末检测试题含解析
- 2026年清远市清城区事业单位人员招聘考试模拟试题及答案详解
- 2026年河南省驻马店市事业单位人员招聘考试参考试题及答案详解
- 插花花艺师国家职业技能标准
- 天燃气管道动火连头方案
- GB/T 6365-2006表面活性剂游离碱度或游离酸度的测定滴定法
- GB/T 19466.6-2009塑料差示扫描量热法(DSC)第6部分:氧化诱导时间(等温OIT)和氧化诱导温度(动态OIT)的测定
- GA 1800.1-2021电力系统治安反恐防范要求第1部分:电网企业
- 六年级下册道德与法治知识点-填空题100道及参考答案
- 教师招聘报名登记表
- 一年级下册生字复习二课件
- 压床机构机械原理优质课程设计
- 汽车发动机电控系统检修:第一章汽油发动机电控燃油喷射系统认知
- 隧道逃生管道安全技术交底(标准版)
评论
0/150
提交评论