STM32-GPIO数码管动态显示

这篇具有很好参考价值的文章主要介绍了STM32-GPIO数码管动态显示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、数码管原理

1、LED数码管的结构

2、LED数码管工作原理

3、数码管动态显示

1)动态显示的概念

2)动态显示的接口

二、代码的实现

三、仿真结果展示


 文章来源地址https://www.toymoban.com/news/detail-402335.html

本篇文章将继续进一步了解GPIO外设输出模式

一、数码管原理

知道这一部分的朋友可以直接点击目录部分跳过这段跳过,这里介绍一下数码管的知识

1、LED数码管的结构

不管在嵌入式STM32中还是在单片机51中,我们经常采用LED数码管来显示我们系统的状态、运算结果等各种信息,LED数码管是机器和人对话的一种重要的输出设备。

STM32-GPIO数码管动态显示

单个LED数码管的外形和内部结构如上图所示。LED数码管由8个发光二极管组成,通过不同的发光字段组合可以显示数字(0~9)、字符(A~F、H、L、P、R、U、Y、符号"——"及小数点"."等)。

按照内部8个发光二极管的连接方式的不同,LED数码管可以分为共阳极与共阴极俩种,上图有结构图。

2、LED数码管工作原理

这里以共阳极LED数码管为例来阐述具体在单片机上的工作原理。

要使数码管显示数字或者字符,直接将相应的数字或者字符送入数码管的段控制端是不行的,必须使段控制端输出相应的字符编码。

如上图所示,八个发光二极管的阳极连接在一起,作为公共端(我们喜欢说位选端)阴极作为”段“控制端(我们说段选端)。

1)当公共端(位选端)接低电平时,所以二极管截止,不发光。

2)当公共端(位选端)接高电平时,当某段控制端为高电平,该段的发光二级管导通并点亮。通过点亮不同的段,显示不同的字符。如显示数字1时,b、c俩段接低电平其他段接高电平。

共阴极LED数码管与共阳极类似,这个里就不在进行介绍了。

这里给出共阳与共阴极数码的显示字形编码:

  共阳极 共阴极
字形 对应编码 对应编码
0

0xc0

0x3f
1 0xf9 0x06
2 0xa4 0x5b
3 0xb0 0x4f
4 0x99 0x66
5  0x92 0x6d
6 0x82 0x7d
7 0xf8 0x07
8 0x80 0x7f
9(g) 0x98(0x90) 0x67(0x6f)
A 0x88 0x77
B 0x83 0x7c
C(c) 0xc6(0xa7) 0x39
d 0xa1 0x5e
E 0x86 0x79
F 0x8e 0x71
H(h) 0x89(0x8b) 0x76(0x74)
L 0xc7 0x38
P 0x8c 0x73
U 0xc1 0x3e
. 0x7f 0x80
—— 0xbf 0x40

3、数码管动态显示

1)动态显示的概念

动态显示是一种按位轮流点亮各位数码管的显示方式,即在某一时段,只让其中一位数码管的位选端有效,并送出相对应的字形显示编码。此时其他位数码管因位选端无效而处于熄灭状态。下一时端按顺序选通另一位数码管,并送出相对应的字形编码显示,按照此规律进行下去,即可使各位数码管分别间断的显示出相应的字符。虽然在同一时刻只有一位数码管点亮,但利用人眼的视觉暂留效应和发光二极管熄灭时的余晖效应,看到的确是多为数码管同时点亮显示,这个过程被称为动态扫描显示。

2)动态显示的接口

数码管的所有段选端共用一个8位的I/O端口,而每个数码管的位选端要占用一根I/O线,因此,n位动态显示数码管只占用一个8位的I/O端口和n根I/O线。显示n位数码时,连接段选的8位I/O端口依次送出n位数码的段码数据。同时,依次控制相应位公共端,当公共端电平位”0“(共阴极)或者”1“(共阳极)时,该位数码管点亮。

到这预备知识介绍完了现在开始写代码了

二、代码的实现

我们使用固件库编程,首先我们需要一个工程模板,详情可以看STM32固件库点亮LED灯_学c入门到入土的博客-CSDN博客

LED头文件

#ifndef _LED_H_         //判断标号_LED_H_是否被定义,如果没有则#ifndef到#endif代码有效
#define _LED_H_
 
#include <stm32f10x.h>
 
#define LED_GPIO_PORT        GPIOC                  
//数码管的GPIO端口

#define LED_GPIO_CLK         RCC_APB2Periph_GPIOC    
//数码管相对应的时钟端口开启

#define LED_GPIO_PIN         GPIO_Pin_All            
//数码管的GPIO引脚号,All表示当前GPIOx的全部引脚

#define uchar unsigned char                          //给无符号字符型宏定义一个别名
#define uint unsigned int                            //给无符号整型宏定义一个别名
 
void LED_GPIO_Config(void);                             //数码管GPIO端口初始化函数

void delay_ms(uint ms);
//延时函数
 
#endif

LED.C文件

#include "led.h"
 
void LED_GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
        /*定义一个GPIO_InitTypeDef类型的结构体*/
 
	  RCC_APB2PeriphClockCmd(LED_GPIO_CLK,ENABLE);
        /*开启数码管相关的GPIO外设时钟*/
 
	  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        /*设置引脚模式为通用推挽输出*/
 
	  GPIO_InitStructure.GPIO_Pin=LED_GPIO_PIN;
        /*选择要控制的引脚*/
 
	  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        /*设置引脚速率为50MHz*/
 
	  GPIO_Init(LED_GPIO_PORT,&GPIO_InitStructure);
        /*调用库函数初始化GPIO*/
}

void delay_ms(uint ms)  //延时函数
{
	unsigned int i,j;
	for(i=ms;i>0;i--)
		for(j=110;j>0;j--);
}

main.C文件

#include "led.h"
uchar LED_AC_table1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//共阳极数码编码
int main()
{
	LED_GPIO_Config();   //调用数码管GPIO外设初始化
	uint j=0x0100;       //这里是个算法变量的函数,这里就不展开讨论
	while(1)
	{
		for(int i=0;i<6;i++)   //循环选段
		{
			delay_ms(50);        //延时
			GPIO_Write(LED_GPIO_PORT,LED_AC_table1[i]+j);  //固件库函数选位输出相对应的字符
			if(j==0x2000)                                  //算法
			{
				j=0x0100;
			}
			else
			{
				j<<=1;
			}
		}
	}	
}

在仿真之前我们看一下我们又一个新的固件库函数

函数名    

GPIO_Write()

函数原型  

void GPIO_Write(GPIO_TypeDef* GPIOx, u16 PortVal)
功能描述 向指定的GPIO端口写入数据
输入参数1 GPIOx:x可以是A,B,C,D,来选择GPIO外设
输入参数2 PortVal:待写入端口数据寄存器的值

三、仿真结果展示

接下来让我们看看Proteus 仿真的结果吧

STM32-GPIO数码管动态显示

 关注我下面我会继续更新GPIO外设输入输出的实际小程序,来帮助大家更好的理解GPIO外设的功能,后面还会更新STM32的所有特色外设。

 

到了这里,关于STM32-GPIO数码管动态显示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于STM32的时钟设计并在六位数码管上显示附proteus仿真

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇

    2024年02月12日
    浏览(51)
  • STM32 HAL库实现三位数码管显示(74HC595+按键+蜂鸣器)

    1、加强数码管学习,实现数码显示变量数据(三位数的显示); 2、3位数码+2个按键+蜂鸣器实现模拟电磁炉功率调节及显示; 关于74HC595的STM32F103的驱动以及数码的显示等请查阅我写的上一篇博客:https://blog.csdn.net/luojuan198780/article/details/136653377 实验效果参考下面网址视频:

    2024年03月17日
    浏览(86)
  • 基于STM32单片机的直流电机PWM调速(数码管显示)(Proteus仿真+程序)

          由 STM32单片机+数码管显示模块+键盘模块+L298N电机驱动模块+直流电机 1、采用STM32F103单片机为主控制器 2、四个按键,分别为启动/暂停、方向切换、加速、减速功能 3、数码管显示PWM占空比和电机转动方向(0正转,1反转) 注意:proteus8.11版本才能打开   24、基于STM32单

    2024年02月11日
    浏览(63)
  • STM32 Proteus仿真4x4矩阵15位抢答器数码管TM1637显示-0039

    STM32 Proteus仿真4x4矩阵15位抢答器数码管TM1637显示-0039 Proteus 仿真小实验: STM32 Proteus仿真4x4矩阵15位抢答器数码管TM1637显示-0039 功能: 硬件组成:STM32F103R6单片机 +TM1637驱动4位数码管+4x4矩阵键盘+蜂鸣器 1.有一个开启键,点击后蜂鸣器短响一声,开始抢答。此后4位数码管倒计

    2024年02月08日
    浏览(43)
  • ARM开发,stm32mp157a-A7核SPI总线实验(实现数码管的显示)

            a.数码管显示相同的值 0000 1111 ......9999;         b.数码管显示不同的值 1234; ---spi.h头文件--- ---spi.c函数文件--- ---main.c测试文件--- a.数码管显示相同的值 0000 1111 ......9999; b.数码管显示不同的值 1234;

    2024年02月11日
    浏览(45)
  • 嵌入式开发:使用STM32CubeMX 和 Keil uVision5实现两位数码管循环显示实验

    一、STM32CubeMx实现数码管 1、双击打开STM32CubeMX。 2、点击File选项,在File列表下选择New Project选项新建工程。 3、在图中所示位置的方框中输入我们使用的芯片型号来搜索芯片 4、与我们的搜索相关的芯片型号会在这里呈现,我们只需要选择我们需要的即可,这里我们双击第一个

    2024年02月08日
    浏览(54)
  • STM32F103基于标准库+I2C SSD1306仿数码管RTC时钟显示

    ✨申明:本文章仅发表在CSDN网站,任何其他网站,未注明来源,见此内容均为盗链和爬取。 🍁对于文中所提供的相关资源链接将作不定期更换。 📺显示效果: 🌿工程基于正点原子标准库3.5版本RTC例程作为模板。 🌿使用IIC SSD1306 OLED 双色屏幕软件IIC驱动显示。 ⛳时钟说明

    2023年04月22日
    浏览(47)
  • 51单片机(四)静态数码管和动态数码管显示

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月09日
    浏览(47)
  • 数码管动态显示

    8个数码管 SEL 8个显示电路 a,b,c,d,e,f,g,h SEG 要使哪一个亮,则将SEL[X]置为1,X线拉低---------使用一个 3-8译码器 ,根据cnt[2:0]来选择哪一个数码管亮 所以不同的数都可以根据SEL和SEG来进行选择 根据输入的不同的数来进行显示,一共有8个数码管,一个数的范围是0-f 。 需要4位,一

    2023年04月19日
    浏览(46)
  • 实验(四)数码管动态显示实验

    一.实验目的、内容、仪器 实验目的: 1.熟悉数码管的功能和使用 2.了解位选和段选,和动态显示的原理 了解74HC138的引脚功能。 实验内容:接共阴极数码管,要求动态显示(HELLOC51),动态扫描显示即轮流向各位数码管送出字形码和相应的位选。 实验仪器:7SEG-MPX8-CC:八位数码管共

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包