【蓝桥杯嵌入式】资源拓展板模块详解

您所在的位置:网站首页 74ls248连接数码管 【蓝桥杯嵌入式】资源拓展板模块详解

【蓝桥杯嵌入式】资源拓展板模块详解

2023-12-22 11:39| 来源: 网络整理| 查看: 265

目录

一、原理

1.1数码管

1.2 74HC595

二、编码说明

2.1 数码管字模

2.2十六进制数字模编码参考

三、程序设计

3.1 原理图

3.2 逻辑分析

3.3 配置方法和参考代码

3.4 参考例程

 

一、原理 1.1数码管

 

扩展板使用3位5161AS数码管。

5161AS数码管引脚图:

691d10c0989b4e7db378924b2a8ab5ab.png

 

 

5161AS数码管原理图:

cc8c3603652a4843b5430bfa341179c3.png

 

 

从上图可知,5161AS数码管为共阴极数码管。每位数码管由八个LED组成,其中a--g显示数字,h显示小数点。

 

1.2 74HC595

扩展板使用74HC595芯片。74HC595是一个8位串行输入、并行输出的位移缓存器,其中并行输出为三态输出。

注:可能原理图上使用的是74LS595。74HS595为CMOS芯片,74LS595为TTL芯片,两者在功能上类似,使用上也一样。

74HC595芯片引脚图:

329a472635db49fd867a445e24fb9dd5.png

 

 

14脚:gif.latex?SER,串行数据输入引脚

12脚:gif.latex?RCLK,存储寄存器时钟输入引脚。上升沿时,数据从移位寄存器转存至 存储寄存器。存储寄存器与数码管直接连接,即存储寄存器的值直接控制数码管的显示。

11脚:gif.latex?SRCLK,移位寄存器时钟引脚,上升沿时,移位寄存器中的数据整体后移,并接受新的数据(从DS输入)。具体可参考数电课本关于移位寄存器的讲解。

10脚:gif.latex?%5Coverline%7BSRCLK%7D,低电平时,清空移位寄存器中已有的数据,一般不用,接高电平即可。

13脚:gif.latex?%5Coverline%7BOE%7D,输出使能控制脚,它是低电才使能输出,所以接GND

9脚:gif.latex?Q_%7BH%27%7D串行数据输出引脚。当移位寄存器中的数据多于8位时,最先进入移位寄存器的数据将会溢出,并从该引脚串行输出。用于多个74HC595芯片的级联。

1-7脚:Q1-Q7并行输出引脚

 

时序图

a723f5a83deb4b74bc08397f17150d91.png

 

 

二、编码说明 2.1 数码管字模

八位二进制数(即一个字节)控制一个数码管,从高位到低位依次控制h、g、f、e、d、c、b、a,1亮0熄。

注:本编码方式的解码,应从最高位开始读取,即首先将一字节的字模数据的最高位与1做与(&)运算以此读取高一位(即h),然后将数据左移一位,通过相同的方法读取高二位(即g)。

例:将字符0进行编码

解:通过观察前面列举的数码管引脚图可知,要想使之显示字符0,需要a,b,c,d,e,f这几个LED灯亮,而其余的g,h这两个LED灯灭。因此字符0的字模二进制编码应为:0011 1111(hgfe dcba)。转换成十六进制为0x3f。

2.2十六进制数字模编码参考 uint8_t Seg7[17] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f,0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x00}; //依次为 0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F、空 三、程序设计 3.1 原理图

扩展板数码管原理图如下:

c31dbcae2de14f5aa6847ea7c0e78ffd.png

 

 

 

排针原理图如下:

4fd0ee8b9dc54927b9b38d1eaa2b62e9.png

 

 

综合两个原理图可知,MCU可通过PA1,PA2,PA3三个引脚驱动数码管。其中PA1与SER连接,向74HC595发送串行数据;PA2与RCLK连接,控制存储寄存器;PA3与SCK(即:SRCLK)连接,控制移位寄存器。

3.2 逻辑分析

观察原理图可知,资源拓展板上共有三位数码管,其中DS1为最高位,DS3为最低位。每个数码管分别有一个595芯片控制。在三个595芯片中,U1为最高位,且其数据引脚SER直接与MCU连接,U2,U3为U1的级联。U2的SER引脚连接U1的gif.latex?DH%27,即输入U2的数据为U1经过移位寄存器移位后溢出的数据。U3以此类推。

在向595芯片传输字模数据时,应首先传DS3显示所需的字模数据,然后传DS2显示所需的字模数据,最后传DS1所需的字模数据。在经过移位寄存器移位后,各数码管显示所需的字模数据将一一对应。此时,再向存储寄存器发出上升沿脉冲信号(即RCLK置1),即可将信号输出芯片,用以控制数码管的显示。

 

3.3 配置方法和参考代码

在扩展板上使用跳线帽将排针P3的1,2,3号针脚分别与P4的1,2,3号针脚连接。

 

在CubeMX中,将PA1,PA2,PA3配置为推挽输出模式,无上下拉电阻,初始电位为低电平。

 

生成初始化代码后即可编写数码管的驱动代码。参考代码如下:

uint8_t Seg7[17] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x00}; //该数组应在.h中或驱动代码所在的.c文件的开头声明。 //*为提高代码的可读性,将控制PA1,PA2,PA3引脚输出高\低电平的指令替换为对应数据线的高低电平转换*// #define RCLK_H (HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET)) #define RCLK_L (HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET)) #define SCK_H (HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_SET)) #define SCK_L (HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET)) #define SER_H (HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET)) #define SER_L (HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET)) void SegDisp(int Bit1,int Bit2,int Bit3)//Bit1:DS1 Bit2:DS2 Bit3:DS3,对应实参都为0~16的整型数据, 直接对应字模数组中的相应字模数据 { uint8_t temp = 0;//缓存单元,用于缓存字模数据 uint8_t i = 0;//循环变量 RCLK_L;//RCLK置0,准备向芯片发送数据 temp = Seg7[Bit3];//将DS3显示所需的字模数据写入缓存单元 for(i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3