【STM32单片机学习】(12)数码管动态扫描(联合体结构体)超简单

news/2024/10/18 12:22:40/

数码管动态扫描采用联合体union关键字和结构体组合,使用定时器中断刷新,在此分享和记录一下。

文章目录

  • 前言
  • 一、pandas是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结

一、union关键字

        union,中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。

         union的长度大小等于成员中最大数据类型所占地址空间的大小 。在“struct”中,每一个成员都具有单独的内存位置。而在“union”中, 不论有多少成员,所有成员只存储于同一个地址空间中,也就是说,联合中的所有成员都是从相同的内存地址开始。以定义一个拥有许多成员的联合,但是同一时刻只能有一个成员允许含有一个值。联合让程序员可以方便地通过不同方式使用同一个内存位置。

C语言共用体union_哔哩哔哩_bilibili

二、使用步骤

 

1.定义union

代码如下

typedef union //定义联合体
{u8 byte;//作COM端struct {//定义结构体  ---作SEG端u8    b0      :1;//结构体中的位定义u8    b1      :1;u8    b2      :1;                     u8    b3      :1;u8    b4      :1;u8    b5      :1;u8    b6      :1;u8    b7      :1;} bits;
}byte_bit;byte_bit LEDCOM1;
byte_bit LEDCOM2;
byte_bit LEDCOM3;
byte_bit LEDCOM4;#define     LED_COM1    (LEDCOM1.byte)
#define     LED_COM2    (LEDCOM2.byte)
#define     LED_COM3    (LEDCOM3.byte)
#define     LED_COM4    (LEDCOM4.byte)

2.输出数据

代码如下:

//将SEG数据输出到IO口
void SEG_OUT(u8 SEG_Temp)
{byte_bit LED_SEG;LED_SEG.byte = SEG_Temp;LED_SEG_0 = LED_SEG.bits.b0;LED_SEG_1 = LED_SEG.bits.b1;LED_SEG_2 = LED_SEG.bits.b2;LED_SEG_3 = LED_SEG.bits.b3;}
//将COM数据输出到IO口
void COM_OUT(u8 COM_Temp)
{byte_bit LED_COM;LED_COM.byte = COM_Temp;LED_COM_1 = LED_COM.bits.b0;LED_COM_2 = LED_COM.bits.b1;LED_COM_3 = LED_COM.bits.b2;LED_COM_4 = LED_COM.bits.b3;
}

3.扫描显示

代码如下:


//数码管档位 白
void Group_dsplay_W(u8 Group1)
{if(Group1==0){ LED_COM1 &= Bin(00000001);//白亮LED_COM1 |= Bin(00000001);//白亮LED_COM3 &= Bin(00001110);LED_COM3 |= Bin(00000000);//白亮}else if(Group1==1){LED_COM1 &= Bin(00000010);//白亮LED_COM1 |= Bin(00000010);//白亮LED_COM3 &= Bin(00001110);LED_COM3 |= Bin(00000000);//白亮}else if(Group1==2){LED_COM1 &= Bin(00000100);LED_COM1 |= Bin(00000100);//白亮LED_COM3 &= Bin(00001110);LED_COM3 |= Bin(00000000);//白亮}else if(Group1==3){LED_COM1 &= Bin(00001000);LED_COM1 |= Bin(00001000);//白亮LED_COM3 &= Bin(00001110);LED_COM3 |= Bin(00000000);//白亮}else if(Group1==4){LED_COM1 &= Bin(00000000);LED_COM1 |= Bin(00000000);//白亮LED_COM3 &= Bin(00001111);LED_COM3 |= Bin(00000001);//白亮}
}

4.定时器刷新显示

void Timer2_Routine(void) interrupt 5	         //定时器2中断入口
{TF2=0;								 //溢出标志位清零LED_Display_Refresh();
}

总结

记录一下union关键字和结构体的使用,在此笔记分享。


http://www.ppmy.cn/news/733527.html

相关文章

【32单片机学习】(10)STM32串口+内部温度传感器+光敏传感器通过DMA搬运数据

目录 前言 一、DMA及各外设介绍 二、实验现象 串口发送 LCD显示 三、代码部分 1.adc部分 adc.c adc.h 2.串口部分 serial.c serial.h 3.DMA配置 dma.c dma.h 4.main函数 main.c 总结 前言 基于stm32f103zet6,将串口收发不定长数据和adc采集通过使…

RGB环形补光灯行业头部企业市场占有率及排名调研报告

本文调研和分析全球RGB环形补光灯发展现状及未来趋势,核心内容如下: (1)全球市场总体规模,分别按销量和按收入进行了统计分析,历史数据2018-2022年,预测数据2023至2029年。 (2&#…

【51单片机学习】(1):单片机入门

1.C51数据类型 在C51中int只占两个字节 2.RAM和ROM ROM:(Read Only Memory) 程序存储器在单片机中用来存储程序数据及常量数据或变量数据,凡是c文件及h文件中所有代码、全局变量、局部变量、const’限定符定义的常量数据、startup.asm文件中的代码(类…

【32单片机学习】(1)stm32位带操作

位带区操作 STM32F10x支持位带操作的两个内存区的范围是: 0x2000_0000-0x200F_FFFF(SRAM 区中的最低 1MB) 0x4000_0000-0x400F_FFFF(片上外设区中的最低 1MB) 例如操作GPIOB5->ODR寄存器(GPIOB_ODR寄…

【32单片机学习】(2)stm32库文件

startup_stm32f10x_hd.s 设置堆栈指针、设置PC指针、初始化中断向量表、配置系统时钟、调用C库函数_main,将汇编环境转到C语言编译环境 ; Reset handler //程序从此处开始 Reset_Handler PROCEXPORT Reset_Handler [WEAK]IMPORT __mainIMPORT S…

【51单片机学习】(2)定时器扫描实现按键长按和短按

用Delay消抖时会导致主程序中的一些进程受到影响&#xff0c;所以在这里借鉴江科大使用定时器扫描按键状态进行消抖的方法。在实际使用中加入了长按功能 按键驱动代码key.c #include <REGX52.H>unsigned char Key_KeyNumber,KeyTime,KeyCount,i; unsigned int times;/**…

【32单片机学习】(7)STM32时钟周期

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 1.理论时间 2.官方设计标准时间 3.时钟周期的应用 前言 在学习stm32的I2C部分时&#xff0c;发现和C51的有所不同&#xff0c;stm32在SCL翻转IO口后要一定的等…

【32单片机学习】(6)STM32串口+DMA收发不定长数据

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 1.DMA介绍 2.串口接收数据 3.实验现象 1.实验电路图 2.串口收发不定长数据视频演示 3.OLED 显示接收数据 4.代码部分 1.1串口模块 serial.c serial.h …