首页 > 编程语言 >零基础STM32单片机编程入门(十九) 4位数码管显示模块实战含源码

零基础STM32单片机编程入门(十九) 4位数码管显示模块实战含源码

时间:2024-07-23 21:29:38浏览次数:19  
标签:HAL LED PIN STM32 数码管 源码 寄存器 GPIO

文章目录

一.概要

数码管显示器是一类价格便宜、使用简单,通过对其不同的管脚输入相对的电流,使其发亮,从而显示出数字能够显示 时间、日期、温度等所有可用数字表示的参数的器件。在电器特别是家电领域应用极为广泛,如显示屏、空调、热水器、冰箱等等。

在这里插入图片描述

二.4位数码管主要参数

1.采用2片595驱动数码管,需要单片机3路IO口,根据数码管动态扫描原理进行显示
2.宽工作电压3.3V到5V
3.PCB板尺寸:0.36英寸:22mm*40mm
4.数码管型号:4位共阳
5.重量:7g

模块接口说明:
1.VCC 电源引脚(3 ~ 5 V)
2.SCLK 移位寄存器时钟
3.RCLK 锁存器时钟
4.DIO 数据输入
5.GND 电源地

三.数码管显示器的工作原理

在这里插入图片描述

‌数码管显示器的工作原理主要通过控制发光二极管(‌LED)的亮灭来显示数字或其他信息。 这些LED通常被组织成特定的段,通过控制这些段的点亮或熄灭,可以组合出不同的数字和字符。以下是详细的工作原理说明:‌

1.基本构造与工作方式: 数码管通常由七个或八个LED组成,这些LED被安排成特定的段,如a, b, c, d, e, f, g(对于七段数码管)以及可能还包括一个小数点或dp段。每个LED都有一个引脚,用于控制其亮灭状态。根据公共端的连接方式,数码管可以分为共阴极和共阳极两种类型。

2.共阴极与共阳极数码管: 共阴极数码管的公共端连接到地(GND),而共阳极数码管的公共端连接到正电源(VCC)。这两种类型的数码管在电路连接和控制方式上有所不同,但基本原理相同,即通过控制每个LED的亮灭来显示数字。

3.显示数字的方式: 通过选择性地点亮对应的LED段,可以组合出0到9的数字以及其他一些字符。例如,要显示数字8,需要点亮对应的a, b, c, d, e, f, g段。对于多位数的显示,可以通过级联连接多个数码管或使用动态扫描技术来实现。

数码管动态显示是根据人眼视觉残留的原理,在显示的时候,位选依次选择数码管,然后段选控制数码管显示。这种依次选择依次显示的速度非常快,快到人眼反应不过来,从而使4位数码管上的数字同时显示(只是人眼看上去同时显示)。

四.74HC595芯片介绍

74HC595是8位串行输入并行输出的移位寄存器。其使用场景通常为在调用大量LED灯时会占用大量IO口,导致引脚不足,这时我们使用这类寄存器可以起到减少引脚使用的目的,同时还可以有效控制LED的亮灭。市面上常见移位寄存器有74HC595。
在这里插入图片描述
74HC595的11脚,(SRCLK) 移位寄存器时钟引脚,上升沿有效。
74HC595的12脚: (RCLK) 存储寄存器时钟引脚,也是上升沿有效。数据从位移寄存器转移到存储寄存器,也是需要时钟脉冲驱动的,这就是12脚的作用。

1.74HC595芯片内部框图

74HC595的数据来源只有一个口,一次只能输入一个位,那么连续输入8次,就可以积攒为一个字节了。

移位寄存器:
串行输入,已进入的位数据依次下移(所以叫移位寄存器)。

存储寄存器:
存储寄存器是直接和8个输出引脚相通的,将移位寄存器的数据转移到存储寄存器后,QA QB QC QD QE QF QG QH 就可以输出我们开始输入的一个字节的数据。

在这里插入图片描述

2.74HC595通讯时序

SRCLK上升沿,移位寄存器中的数据整体后移,并接受新的数据(从SER输入) 高位先行。
RCLK上升沿时,数据从移位寄存器转存带存储寄存器。

在这里插入图片描述

五.4位数码管原理图

在这里插入图片描述

如电路图所示,图中是4位数码管的电路图,具有两片595驱动芯片,两片595级联在一起,第二片595(U2)是对数码管的8段码进行段码操作,第一片595(U1)是对4位数码管进行位选操作,即选择哪一个数码管进行显示操作。

六.4位数码管显示实验

硬件准备:

STLINK接STM32F103C8T6小系统板,STLINK接电脑USB口。

用5根杜邦线把模块与开发板相连
板子3.3----模块VCC
板子A4-----模块SCLK
板子A5-----模块RCLK
板子A6-----模块DIO
板子G------模块GND

打开STM32CubeMX软件,新建工程
在这里插入图片描述
Part Number处输入STM32F103C8,再双击就创建新的工程
在这里插入图片描述
配置下载口引脚
在这里插入图片描述
配置外部晶振引脚
在这里插入图片描述
配置系统主频
在这里插入图片描述

配置工程文件名,保存路径,KEIL5工程输出方式
在这里插入图片描述
生成工程
在这里插入图片描述
用Keil5打开工程
在这里插入图片描述

添加4位数码管驱动相关代码

在这里插入图片描述

主要代码

#define uchar unsigned char
 unsigned char  fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
 unsigned char  segbit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
 unsigned char  disbuf[4]={0,0,0,0};
void LED4_Display (void);			// LED显示
void LED_OUT(uchar X);				// LED单字节串行移位函数
unsigned char  LED_0F[17] = //低电平显示
{// 0	 1	  2	   3	4	 5	  6	   7	8	 9	  A	   b	C    d	  E    F    -
	0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0x7F,0x7F
};
	unsigned char Counter=0;
	unsigned long TimeCounter=0;

#define SCLK_PIN GPIO_PIN_4
#define RCLK_PIN GPIO_PIN_5
#define DIO_PIN GPIO_PIN_6
uchar LED[8];	//用于LED的8位显示缓存
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
//4位数码管主函数
void LED4_Display (void)
{
	unsigned char  *led_table;          // 查表指针
	uchar i;
	//显示第1位
	led_table = LED_0F + LED[0];
	i = *led_table;
	LED_OUT(i);			
	LED_OUT(0x01);		
	HAL_GPIO_WritePin(GPIOA, RCLK_PIN, GPIO_PIN_RESET);//管脚输出低
  HAL_Delay(1);
	HAL_GPIO_WritePin(GPIOA, RCLK_PIN, GPIO_PIN_SET);//管脚输出高
	//显示第2位
	led_table = LED_0F + LED[1];
	i = *led_table;
	LED_OUT(i);		
	LED_OUT(0x02);		
	HAL_GPIO_WritePin(GPIOA, RCLK_PIN, GPIO_PIN_RESET);
  HAL_Delay(1);
	HAL_GPIO_WritePin(GPIOA, RCLK_PIN, GPIO_PIN_SET);
	//显示第3位
	led_table = LED_0F + LED[2];
	i = *led_table&0X7F;//带小数点
	LED_OUT(i);			
	LED_OUT(0x04);	
	HAL_GPIO_WritePin(GPIOA, RCLK_PIN, GPIO_PIN_RESET);
  HAL_Delay(1);
	HAL_GPIO_WritePin(GPIOA, RCLK_PIN, GPIO_PIN_SET);
	//显示第4位
	led_table = LED_0F + LED[3];
	i = *led_table;
	LED_OUT(i);			
	LED_OUT(0x08);		
	HAL_GPIO_WritePin(GPIOA, RCLK_PIN, GPIO_PIN_RESET);
	HAL_Delay(1);
	HAL_GPIO_WritePin(GPIOA, RCLK_PIN, GPIO_PIN_SET);
}
//管脚输出控制
void LED_OUT(uchar X)
{
	uchar i;
	for(i=8;i>=1;i--)
	{
		if (X&0x80) 
		{
			HAL_GPIO_WritePin(GPIOA, DIO_PIN, GPIO_PIN_SET);
		}else 
		{
			HAL_GPIO_WritePin(GPIOA, DIO_PIN, GPIO_PIN_RESET);
		}
		X<<=1;
		HAL_GPIO_WritePin(GPIOA, SCLK_PIN, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOA, SCLK_PIN, GPIO_PIN_SET);
	}
}
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();//初始化1毫秒 Tick

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();//外部8M晶振,系统72M主频

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */
	LED[0]=1;//数字偏移量
	LED[1]=2;
	LED[2]=3;
	LED[3]=4;
	LED[4]=5;
	LED[5]=6;
	LED[6]=7;
	LED[7]=8;
  /* USER CODE END 2 */

	while(1) 
	{		
		LED4_Display();//数码管显示

	}	  
  /* USER CODE END 3 */
}

显示效果,显示43.21数字
在这里插入图片描述

七.CubeMX工程源代码下载

链接:https://pan.baidu.com/s/1O_ACUPT5bFYuOquFnAWLtw
提取码:penk
如果链接失效,可以联系博主给最新链接
程序下载下来之后解压就行

八.小结

在家用电器,DIY电子产品中,LED数码管显示比较常见,LED数码管显示器具有亮度高、寿命长、节能环保、可视角度大等优点。‌

标签:HAL,LED,PIN,STM32,数码管,源码,寄存器,GPIO
From: https://blog.csdn.net/zy2232652/article/details/140628785

相关文章

  • STM32驱动NRF24L01模块
    STM32驱动NRF24L01模块模块简介:NRF24L01模块是一款2.4GHZ无线通信模块。其参数如下:2.4GHzISM频段250Kbps,1Mbps,2Mbps三种空中传输速率输出功率为0dBm时发射功耗为11.3mA空中传输速率为2Mbps时接收功耗为13.5mAPowerdown模式功耗低至900nA,Standby-I模式功耗低至2......
  • 【计算机毕业设计】基于微信小程序的传染病防控宣传系统【源码+lw+部署文档】
     包含论文源码的压缩包较大,请私信或者加我的绿色小软件获取免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。本人尊重原创作者或出版方,资料版权归原作者或出版方所有,本人不对......
  • 【xv6】xv6源码调试环境搭建
    1.xv6源代码下载gitclonehttps://github.com/ytcoode/xv6.git2.编译并在qemu中运行xv6镜像2.1安装qemusudoapt-getinstallqemu2.2编译并运行xv6将54行QEMU前面的#号注释掉然后直接在当前目录下执行makeqemu即可直接加载并运行xv6镜像手动运行:qemu-syste......
  • Java 集合框架:HashMap 的介绍、使用、原理与源码解析
    大家好,我是栗筝i,这篇文章是我的“栗筝i的Java技术栈”专栏的第020篇文章,在“栗筝i的Java技术栈”这个专栏中我会持续为大家更新Java技术相关全套技术栈内容。专栏的主要目标是已经有一定Java开发经验,并希望进一步完善自己对整个Java技术体系来充实自己的......
  • 源码搭建同城预约上门按摩小程序APP系统可运营版
    在这个快节奏的社会里,我们每个人都需要找到一种方式来放松身心,而按摩正是一个非常好的选择。不过大家是否曾遇到过预约按摩服务时的不便?比如想要预约的时候发现电话打不通,或者网上预约系统繁琐难懂。别担心,今天我给大家介绍一个非常便捷的解决方案!顺便推荐一下他们的开源地址......
  • java毕业设计-基于微信小程序的蛋糕订购商城系统设计与实现,基于springboot+vue+微信小
    文章目录前言演示视频项目背景项目架构和内容获取(文末获取)具体实现截图用户微信小程序端管理后台技术栈具体功能模块设计系统需求分析可行性分析系统测试为什么我?关于我我自己的网站项目相关文件前言博主介绍:✌️码农一枚,专注于大学生项目实战开发、讲解和毕业......
  • linux内核源码阅读-mm
     总体功能:在Intel80X86CPU中,程序在寻址过程中使用的是由段和偏移值构成的地址。该地址并不能直接用来寻址物理内存地址,因此被称为虚拟地址。为了能寻址物理内存,就需要一种地址变换机制将虚拟地址映射或变换到物理内存中,这种地址变换机制就是内存管理的主要功能之一(内存管理......
  • 500个计算机毕业设计项目分享(源码+论文+PPT)
    计算机毕业设计项目分享(源码+论文+PPT)需要链接请私信我哦!部分选题参考基于生鲜仓储管理系统的设计与实现基于Java的电竞酒店管理系统设计与实现基于Javaweb的电动车租借的信息管理系统的设计与实现基于微信小程序的小说阅读系统基于Android平台的广州二手手机商城设计......
  • stm32软件延时
    voidNOP_DELAY_US(uint8_tus){__NOP();__NOP();__NOP();__NOP();__NOP(); __NOP();__NOP();__NOP();__NOP();__NOP(); __NOP();__NOP();__NOP();......
  • STM32 芯片架构
    STM32芯片架构把STM32想像类比成一台电脑。CPU通过总线(Bus)控制各类外设。各部分功能如下:CPU:包含运算器,控制器及若干寄存器,是单片机的控制和指挥中心。ROM(STM32中称为FLASH):用于存放程序和数据,为只读储存器。更改(擦除)和写入程序都较为麻烦,需要遵守FLASH相关的......