【蓝桥杯嵌入式】资源拓展板模块详解 |
您所在的位置:网站首页 › 74ls248连接数码管 › 【蓝桥杯嵌入式】资源拓展板模块详解 |
目录 一、原理 1.1数码管 1.2 74HC595 二、编码说明 2.1 数码管字模 2.2十六进制数字模编码参考 三、程序设计 3.1 原理图 3.2 逻辑分析 3.3 配置方法和参考代码 3.4 参考例程 一、原理 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 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |