74LS595 74HC595使用方法以及驱动数码管显示(附:使用代码)
由于74HC595与74LS595功能是一样的没有区别。LS和HC代表不同工作速度,HC代表CMOS芯片电路中工作速度最高的产品,LS表示普及、通用型产品。其驱动方法也是一样的。
器件功能
74LS595是串行输入并行输出的器件,可以串联使用,达到引脚拓展的目的。主要引用在数码管的驱动,点阵的驱动等需要多个引脚的地方。
内部结构和控制时序
74LS595有三部分组成,包括:一个8位移位寄存器、一个8位数据存储器、一个8位三态输出控制器(高电平 低电平 高阻态)。
SHCP为串行数据输入时钟,在器上升沿,移位寄存器发生位移;DS为串行数据输入引脚,在SHCP为上升沿时数据写入移位寄存器;STOP为数据存储器存储信号线,在其上升沿将移位寄存器的8位数据存入存储寄存器;MR为D触发器正常工作引脚,所以芯片正常工作时,此引脚要一直置于高电平;OE为数据并行输出引脚,其为低电平时,数据寄存器的数据并行输出,其为高电平时,引脚表现出高阻态。具体引脚功能如下图所示。
使用代码讲解
以下为3片74LS595串联驱动3个8段数码管的代码讲解,驱动其他外设与其类似可以在其基础上修改。
//以下为HAL库引脚初始化代码,使用库函数可以在此基础上修改,所需引脚设置为推挽输出即可,寄存器版本控制CHR、CHL、BSRR、BRR等寄存器即可。
void LCD_CtrlLinesConfig(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};//定义尹伽婆初始化结构体
__HAL_RCC_GPIOA_CLK_ENABLE(); //使能时钟线A
GPIO_InitStruct.Pin = GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3; //选择所需初始化引脚
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;//选择推挽输出模式
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;//输出速度为高
GPIO_InitStruct.Pull = GPIO_NOPULL; //既不上拉也不下拉
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); //进行初始化
GPIOA->BSRR |= 0x000E; //设置A1 A2 A3 输出为高
}
//以下为串行输入引脚、移位寄存器控制引脚、时钟引脚宏定义
#define STOP(i) if(i) GPIOA->ODR= GPIOA->ODR&~0X00000004 |(1<<2); else GPIOA->ODR= GPIOA->ODR&~0X00000004 |(0<<2); //对A2输出电平进行宏定义
#define SHCP(i) if(i) GPIOA->ODR= GPIOA->ODR&~0X00000008 |(1<<3); else GPIOA->ODR= GPIOA->ODR&~0X00000008 |(0<<3); //对A3输出电平进行宏定义
#define DS(i) if(i) GPIOA->ODR= GPIOA->ODR&~0X00000002 |(1<<1); else GPIOA->ODR= GPIOA->ODR&~0X00000002 |(0<<1); //对A1输出电平进行宏定义
以下是调用函数,实现数码管显示不同的字形,可以在此函数上进行拓展实现不同的显示功能文章来源:https://www.toymoban.com/news/detail-740870.html
void Disp_Smg(uint8_t Bit1,uint8_t Bit2,uint8_t Bit3) //数码管显示
{
static uint8_t Seg7[17] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x00}; //数码管字形存储数组
static uint8_t i=0; //循环所用变量
static uint32_t code_temp=0; //数据存储变量
code_temp= (Seg7[Bit3]<<16) + (Seg7[Bit2]<<8) + Seg7[Bit1]; //将数据存入暂存变量
for(i=0;i<24;i++) //三个数码管共24位所以上限设置为24
{
if(code_temp & 0X800000) //先传送最高位
DS(1) //最高位为1
else
DS(0) //最高位为0
code_temp=code_temp<<1; //数组左移,次高位进入最高位
SHCP(0) //为上升沿做准备
SHCP(1)//出现上升沿进行移位存储
}
STOP(0); //为上升沿做准备
STOP(1); //出现上升沿进行数据存储
}
//由于此代码直接对数据进行显示,所以OE引脚一直连接的低电平,需要暂存显示的可以附加对OE引脚发控制。文章来源地址https://www.toymoban.com/news/detail-740870.html
到了这里,关于74LS595 74HC595使用方法以及驱动数码管显示(附:使用代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!