STM32 4位数码管和74HC595

这篇具有很好参考价值的文章主要介绍了STM32 4位数码管和74HC595。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

4位数码管

        在使用一位数码管的时候,会用到8个IO口,那如果使用4位数码管,难道要使用32个IO口吗?肯定是不行的,太浪费了IO口了。把四个数码管全部接一起共用8个IO口,然后分别给他们一个片选。所以4位数码管共有12个IO口。

4位数码管 stm32,stm32,嵌入式硬件,单片机,c++,c语言,学习

        当选择数码管1显示的时候,这可以选择1(位选)然后再根据1位数码管的原理(段选)显示这个数码管。

动态显示

        根据人眼视觉残留的原理,在显示的时候,位选依次选择数码管,然后段选控制数码管显示。这种依次选择依次显示的速度非常快,快到人眼反应不过来,从而使4位数码管上的数字同时显示(只是人眼看上去同时显示)。

消影

        在动态显示的时候,会发现数码管在闪烁,这是位选和段选不同步导致的。我们可以通过加延迟,或者置零来解决这个问题,这就是常说的消影。

        如果还想用更少的引脚控制4位数码管,我们可以使用74HC595。

74HC595

        74HC595是一个8位串行输入、并行输出的位移缓存器:并行输出为三态输出。在SCK 的上升沿,串行数据由SDL输入到内部的8位位移缓存器,并由Q7'输出,而并行输出则是在LCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存器。当串行数据输入端OE的控制信号为低使能时,并行输出端的输出值等于并行输出缓存器所存储的值。

4位数码管 stm32,stm32,嵌入式硬件,单片机,c++,c语言,学习

74HC595引脚
符号 引脚 描述
Q0---Q7 第15脚,第1-7脚 8位并行数据输出
GND 第8脚
Q7 第9脚 串行数据输出
/MR 第10脚 主复位(低电平有效)
SH_CP 第11脚 数据输入时钟线
ST_CP 第12脚 输出存储器锁存时钟线
/OE 第13脚 输出有效(第电平有效)
DS 第14脚 串行数据输入
VCC 第16脚

电源

串入并出

4位数码管 stm32,stm32,嵌入式硬件,单片机,c++,c语言,学习

        当我们给DS依次输入8个bit的数据,会同时在Q0-Q7输出,那不就可以只用1个IO口连接到DS,相当于扩展成8个IO口。而4位数码管要12个IO口,那用2个74HC595不就好了。

4位数码管 stm32,stm32,嵌入式硬件,单片机,c++,c语言,学习

串入串出 

4位数码管 stm32,stm32,嵌入式硬件,单片机,c++,c语言,学习

        从原理图上我们可以看见74HC595(1)(左侧的)的QH’连接到了74HC595(2)的SER,也就是一个74HC595的串行输出连接到了下一个74HC595的串行输入。

        当输入的数据超出并行输出的范围时,会依次顶替之前的数据,当输入16位数据时,原先输入到74HC595(1)的数据D0-D7,就会顶替掉成D8-D15,而被顶替的数据则通过QH'到SER的连接传输到74HC595(2)中,使其位D0-D7。

        第一个74HC595(左侧的)用于选择数码管(位选),第二个74HC595用于显示数码管(段选)。

SH_CP和ST_CP

  • SH_CP(11脚):上升沿时数据寄存器的数据移位。Q0->Q1->Q2-->Q3-->...-->Q7;下降沿移位寄存器数据不变。
  • ST_CP(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。通常我将ST_CP置为低电平,当移位结束后,在ST_CP端产生一个正脉冲,更新显示数据。

使用方法 

第一步:目的:将要准备输入的位数据移入74HC595数据输入端上。

方法:送位数据到_595。

第二步:目的:将位数据逐位移入74HC595,即数据串入

方法:SH_CP产生一上升沿,将DS上的数据移入74HC595移位寄存器中,先送低位,后送高位。(应该是先送高位)

第三步:目的:并行输出数据。即数据并出

方法:ST_CP产生一上升沿,将由DS上已移入数据寄存器中的数据

送入到输出锁存器。

说明: 从上可分析:从SH_CP产生一上升沿(移入数据)和ST_CP产生一上升沿(输出数据)是二个独立过程,实际应用时互不干扰。即可输出数据的 同时移入数据。

引脚连接

4位数码管 stm32,stm32,嵌入式硬件,单片机,c++,c语言,学习

P1的5个IO口连接单片机,而P2通过级联可以继续接数码管。

输入顺序

4位数码管 stm32,stm32,嵌入式硬件,单片机,c++,c语言,学习

 从图中可以看到数据是QA-QB-QC...QH,最先输入的是QA。

4位数码管 stm32,stm32,嵌入式硬件,单片机,c++,c语言,学习

上图最后一行PARALLEL OUTPUTS(并行输出),可以知道QA是高位。文章来源地址https://www.toymoban.com/news/detail-854283.html

代码

bsp_74HC595.c

#include "bsp_74HC595.h"

unsigned int num[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x00};

void HC595_GPIO_Configuration()
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_12|GPIO_Pin_15;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStructure);

	GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_RESET);
	GPIO_WriteBit(GPIOB,GPIO_Pin_13,Bit_RESET);
	GPIO_WriteBit(GPIOB,GPIO_Pin_15,Bit_RESET);
}
//串入
void HC595_Send_Byte(unsigned char num)
{
	unsigned int i;
	for(i = 0;i<8;i++)
	{
		if(num & 0x80)//取最高位 1000 0000
		{
			GPIO_WriteBit(GPIOB,GPIO_Pin_15,Bit_SET);
		}
		else
		{
			GPIO_WriteBit(GPIOB,GPIO_Pin_15,Bit_RESET);
		}
		GPIO_WriteBit(GPIOB,GPIO_Pin_13,Bit_SET);
		Delay_us(10);
		GPIO_WriteBit(GPIOB,GPIO_Pin_13,Bit_RESET);
		Delay_us(10);
		
		num <<=1;
	}
}
//并出
void HC595_Send_Data(unsigned char num,unsigned char show_bit)
{
	HC595_Send_Byte(num);
	HC595_Send_Byte(1 << show_bit);//高4位没有用

	GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_RESET);
	Delay_us(10);
	GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_SET);
	Delay_us(10);
}

bsp_74HC595.h

#ifndef __BSP_74HC595_H__
#define __BSP_74HC595_H__

#include<stm32f10x.h>
#include "Delay.h"
extern unsigned num[];
void HC595_GPIO_Configuration(void);

void HC595_Send_Data(unsigned char num,unsigned char show_bit);

void HC595_Send_Byte(unsigned char num);

#endif

main.c

int main(void)
{
	
	HC595_GPIO_Configuration();
	while(1)
	{
		HC595_Send_Data(num[2],4);//4号数码管,显示数字2
		HC595_Send_Data(num[0],1);//1号数码管,显示数字0
		HC595_Send_Data(num[3],2);//2号数码管,显示数字3
	}
}

到了这里,关于STM32 4位数码管和74HC595的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 51单片机驱动8位数码管(74HC595驱动)滚动显示

    原文链接:https://www.yourcee.com/newsinfo/2929591.html 点击图片购买 主要关注下供电电压是3.0-5.0v(建议5V),请在规定范围内供电。 模块上芯片引出5个引脚,芯片引脚与模块引脚对应关系是:VCC-VCC SCK-SCLK, RCK-RCLK,SER-DIO,GND-GND 可以对比程序学习时序图,便于理解。 1.显示异常可排除

    2024年02月15日
    浏览(59)
  • 【基础知识】【模块介绍】8位8段数码管(74HC595)【硬件部分】

    数码管实际上是 多个LED按照一定顺序排列,并加上遮罩所构成的元件。 八段一般会引出9个引脚,其中7个引脚显示数字(或某些字母),1个显示小数点,1个作为片选端。 根据连接方式的不同,数码管分为共阳和共阴。 共阳在这端输出低电平时点亮,高电平时会熄灭,共阴

    2023年04月17日
    浏览(81)
  • FPGA学习日志——74hc595驱动的数码管静态显示seg_595_static

    数码管是一种半导体发光器件,其基本单元是发光二极管。数码管按段数一般分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管(多一个小数点显示)。 八段数码管是一个八字型数码管,分为八段:a、b、c、d、e、f、g、dp,其中dp为小数点,每一段即

    2024年02月08日
    浏览(126)
  • STM32 数码管显示

    一 认识二级管 常用的二级管分为两种 1,(b)图共阴极结构:是把所有 LED 的阴极作为公共端(COM) 连起来,接低电平,通常接地。通过控制每一个 LED 的阳极电平使其发光或熄灭,阳极为高电平时LED 发光,为低电平时 LED熄灭。如显示数字0时,a、b、ad.e、t端为高电平,其他各

    2024年02月08日
    浏览(52)
  • 【FPGA零基础学习之旅#12】三线制数码管驱动(74HC595)串行移位寄存器驱动

    🎉欢迎来到FPGA专栏~三线制数码管驱动 ☆* o(≧▽≦)o *☆ 嗨 ~我是 小夏与酒 🍹 ✨ 博客主页: 小夏与酒的博客 🎈该系列 文章专栏: FPGA学习之旅 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏 📜 欢迎大家关注! ❤️ 🥝 ISSP调试演示: 程序配置完成:

    2024年02月09日
    浏览(50)
  • STM32HAL库驱动数码管

    本文档创建于2023年3月7日 本文记录了我学习数码管驱动的过程,实际是微机原理课上留的一个作业。 本文作者:RobotFreak 本文参考《NANO_STM32F103开发指南-HAL库版本_V2.0》,正点原子官网可下载。 数码管,也称LED数码管,按发光二极管单元连接方式可分为“共阳极数码管”和“

    2024年02月08日
    浏览(39)
  • STM32-GPIO数码管动态显示

    目录 一、数码管原理 1、LED数码管的结构 2、LED数码管工作原理 3、数码管动态显示 1)动态显示的概念 2)动态显示的接口 二、代码的实现 三、仿真结果展示   本篇文章将继续进一步了解GPIO外设输出模式 知道这一部分的朋友可以直接点击目录部分跳过这段跳过 ,这里介绍

    2023年04月08日
    浏览(41)
  • STM32物联网项目——TM1620驱动数码管显示

    程序功能:       TM1620 这里主要说说关于TM1620指令与数据传输,其他概述等内容详细见TM1620手册: 链接:https://pan.baidu.com/s/1C4I_oy9n9QjSPu8UD-FJRg  提取码:9ec0  --来自百度网盘超级会员V2的分享 TM1620一共有4条指令: (1) 显示模式命令设置:  该指令用来设置选择段和位的个数

    2024年01月16日
    浏览(42)
  • 基于STM32的四位数码管计数器设计与实现

    ✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进, 代码获取、问题探讨及文章转载可私信。  ☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。 🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇 点击领取更多详细资料 本文介绍了一种基于STM

    2024年02月02日
    浏览(49)
  • STM32使用HAL库驱动TA6932数码管驱动芯片

    8段16位,支持共阴共阳LED数码管。 推挽配置即可。 1、使用TA6932_Init进行初始化 2、使用TA6932_Disp(uint8_t *_ucPtr,uint8_t _ucLenth)进行显示,_upPtr指针指向段码,_ucLenth为显示长度,不超过16位。

    2024年02月07日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包