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

这篇具有很好参考价值的文章主要介绍了【蓝桥杯嵌入式】资源拓展板模块详解——数码管。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、原理

1.1数码管

1.2 74HC595

二、编码说明

2.1 数码管字模

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

三、程序设计

3.1 原理图

3.2 逻辑分析

3.3 配置方法和参考代码

3.4 参考例程


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

一、原理

1.1数码管

 

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

5161AS数码管引脚图:

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

 

 

5161AS数码管原理图:

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

 

 

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

 

1.2 74HC595

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

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

74HC595芯片引脚图:

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

 

 

14脚:,串行数据输入引脚

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

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

10脚:,低电平时,清空移位寄存器中已有的数据,一般不用,接高电平即可。

13脚:,输出使能控制脚,它是低电才使能输出,所以接GND

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

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

 

时序图

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

 

 

二、编码说明

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 原理图

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

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

 

 

 

排针原理图如下:

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

 

 

综合两个原理图可知,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的,即输入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<8;i++)
	{
		SCK_L;//RCK置0,准备向芯片发送一位数据
		if(temp&0x80 )//读取最高位数据,若为1,则数据线传输高电平信号;若为0,则数据线传输低电平信号
		{
			SER_H;
		}
		else
		{
			SER_L;
		}
		SCK_L;
		SCK_H;//SCK置1,SRCLK时钟产生上升沿,移位寄存器将数据整体后移一位
		temp = temp<<1;//缓存数据左移一位,准备读取高二位数据。
	}
	temp = Seg7[Bit2];
	for(i=0;i<8;i++)
	{
		RCLK_L;
		if(temp&0x80 )
		{
			SER_H;
		}
		else
		{
			SER_L;
		}
		SCK_L;
		SCK_H;
		temp = temp<<1;
	}
	temp = Seg7[Bit3];
	for(i=0;i<8;i++)
	{
		SCK_L;
		if(temp&0x80 )
		{
			SER_H;
		}
		else
		{
			SER_L;
		}
		SCK_L;
		SCK_H;
		temp = temp<<1;
	}
	RCLK_L;
	RCLK_H;//RCLK置1,RCLK时钟产生上升沿,存储寄存器转存移位寄存器数据,并向数码管发出控制信号。
	
}

3.4 参考例程

例:控制三位数码管同时循环显示0--16的十六进制数。

参考代码:

While(1)
{
    int i;
	for(i=0;i<=16;i++)
    {
		SegDisp(i,i,i);
		HAL_Delay(500);
	}
}

 

 

 

到了这里,关于【蓝桥杯嵌入式】资源拓展板模块详解——数码管的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包