【STM32学习】(14)两个74HC595控制四个数码管显示
74HC595是在单片机系统中常用的芯片之一他的作用就是把串行的信号转为并行的信号,常用在各种数码管以及点阵屏的驱动芯片, 使用74HC595可以节约单片机mcu的io口资源,用3个io就可以控制8个数码管的引脚,他还具有一定的驱动能力,可以免掉三极管等放大电路,所以这块芯片是驱动数码管的神器.应用非常广泛。
74HC595引脚图
74HC595管脚功能
我选用的单片机型号为:STM32L052K8系列的低功耗芯片,其实与F4系列和F1系列都是一样使用。
下面来看一下接线:
可以从上图中清晰的看到与单片机的连线。
两个595通过级联的形式进行连接。
两个数码管为共阳极
那如何进行代码实现呢?
这样我们就可以写出595的驱动程序,如下:
/**********************************/
/** 函数名称:void HC595_Write_Data(unsigned char dis_data) **/
/** 输入参数:unsigned char dis_data 需要输入的数据 */
/** 函数功能:将数据写进74HC595中*/
/** ****************************** **/
void HC595_Write_Data(unsigned char dis_data)
{unsigned char i;unsigned char temp;temp = dis_data;for(i=0;i<8;i++) // 循环将一个字节的八位依次写入到寄存器{HAL_GPIO_WritePin(SRCLK_GPIO_Port,SRCLK_Pin,GPIO_PIN_RESET);// SRCLK低电平if(temp & 0X80){HAL_GPIO_WritePin(DATA_GPIO_Port,DATA_Pin,GPIO_PIN_SET);}else{HAL_GPIO_WritePin(DATA_GPIO_Port,DATA_Pin,GPIO_PIN_RESET);}temp = temp<<1;HAL_GPIO_WritePin(SRCLK_GPIO_Port,SRCLK_Pin,GPIO_PIN_RESET); // SRCLK低电平HAL_GPIO_WritePin(SRCLK_GPIO_Port,SRCLK_Pin,GPIO_PIN_SET); // SRCLK高电平}
}/****************************************/
/**函数名称:void Disp_out(void)*/
/**函数参数:无参*/
/**函数功能:将写入到寄存器的数据输出到端口显示*/
/****************************************/
void Disp_out(void)
{HAL_GPIO_WritePin(RCLK_GPIO_Port,RCLK_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(RCLK_GPIO_Port,RCLK_Pin,GPIO_PIN_SET);
}
IO口初始化函数为: 都设置成推完输出,无上拉就行
static void MX_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};/* GPIO Ports Clock Enable */__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();/*Configure GPIO pin Output Level */HAL_GPIO_WritePin(GPIOA, SRCLK_Pin|DATA_Pin, GPIO_PIN_SET);/*Configure GPIO pin Output Level */HAL_GPIO_WritePin(RCLK_GPIO_Port, RCLK_Pin, GPIO_PIN_SET);/*Configure GPIO pins : SRCLK_Pin DATA_Pin */GPIO_InitStruct.Pin = SRCLK_Pin|DATA_Pin;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);/*Configure GPIO pin : RCLK_Pin */GPIO_InitStruct.Pin = RCLK_Pin;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(RCLK_GPIO_Port, &GPIO_InitStruct);}
现在要动态显示1234
主函数代码为:
int main(void)
{MX_GPIO_Init();while (1){HC595_Write_Data(0x01); // 片选第一个数码管HC595_Write_Data(0x99);Disp_out(); HAL_Delay(2); // 延时2msHC595_Write_Data(0x02); // 片选第二个数码管HC595_Write_Data(0xb0);Disp_out(); HAL_Delay(2); // 延时2msHC595_Write_Data(0x04); // 片选第三个数码管HC595_Write_Data(0xa4); Disp_out();HAL_Delay(2); // 延时2msHC595_Write_Data(0x08); // 片选第四个数码管HC595_Write_Data(0xf9); // Disp_out();HAL_Delay(2); // 延时2ms}}
效果如图:
有一个小的提示:当有595级联的时候,如有两个快595级联。
HC595_Write_Data(0x01); // 片选第一个数码管 先发的数据会级联到第二块595芯片中
HC595_Write_Data(0x99); // 后发的这个数据才是第一块595芯片的数据
Disp_out(); // 最后将数据传输到各自的端口,进行功能操作
到这里就结束了,大家可以互相学习,提出建议。
【STM32学习】(14)两个74HC595控制四个数码管显示相关推荐
- 74hc595点亮点阵式led交通灯灯 c语言程序,89C51单片机C语言用四个74hc595控制四个LED实现交通灯...
89C51单片机C语言用四个74hc595控制四个LED实现交通灯 (2009-05-16 18:52:38) 标签: 教育 #include #define uchar unsigned char ...
- 两个74HC595D驱动芯片控制三位数码管显示
两个74HC595D驱动芯片控制三位数码管显示 概述 一.数码管引脚及使用概述 1.1位数码管显示方式 2.3位数码管 3.3位数码管电路图 二.74HC595D引脚及使用概述 1. 74HC595引 ...
- 8255总线实验 编写程序利用8255扩展单片机的IO口,控制8位数码管显示1-8。
8255总线实验 编写程序利用8255扩展单片机的IO口,控制8位数码管显示1-8. 程序: #include<reg51.h> #include<absacc.h> #def ...
- 物联网开发笔记(75)- 使用Micropython开发ESP32开发板之控制tm1637时钟数码管显示
一.目的 这一节我们学习如何使用我们的ESP32开发板来控制4位tm1637时钟数码管显示. 二.环境 ESP32 + 4位tm1637时钟数码管(wokwi仿真也可) + Thonny IDE + ...
- STM32F407控制TM1638按键数码管显示模块
TM1638按键数码管显示模块 实物图 原理图 tm1638.c文件 #include "tm1638.h" #include "delay.h" // // ...
- c语言键盘控制数码管显示,3*4矩阵键盘控制4位数码管显示的C程序
这个很简单 ;******************************************************************************** ;* 标题: 伟纳电 ...
- arduino二位数码管_用arduino和2个74HC595级联控制8位数码管显示
初学者打出来的代码,可能不"美观",希望大家点评,多多留下意见,话不多说上代码-- 下面为8位数码管全部显示 #include "Arduino.h" void ...
- 人教版用计算机娱乐,学习娱乐两不误!这四款高质量软件让教育事半功倍
古韩愈有言"师者,传道受业解惑也".又是一年教师节,一路师者相伴,不断成长.感恩每一位老师,祝老师们节日快乐!没错,一年一度的教师节到了. 但是我们今天不歌颂老师,来谈一谈新型的学 ...
- STM32学习记——两个蓝牙的连接(1)
你好!这个栏目主要是我学习STM32的一些记录,这是我第一次写技术博客,目的有三个,第一是做一个记录,记录自己学了些什么,防止以后忘记,也利于以后复习,顺带还能检验自己学的是否到位,第二是希望能够帮助 ...
最新文章
- AI生态赋能2018论坛来袭!转型AI看这里!
- *HDU 2108 计算几何
- 成功解决ImportError: Could not find 'msvcp140.dll'. TensorFlow requires that this DLL be installed in a
- 真香!原来 CLI 开发可以这么简单
- Log 日志的使用与重要性
- UML类图操作(一)
- c语言链表递增,[C语言][PTA][2019Fall] 6-28 递增的整数序列链表的插入 (15 point(s))
- datetime(0) NULL DEFAULT NULL报错
- VSCode使用VIM复制内容到系统剪切板
- SqlDataAdapter的增加,删除,修改
- PLC通讯智能网关-不用PLC编程,实现西门子PLC与罗克韦尔(AB)PLC之间数据通讯
- 随机生成验证码(JAVA代码)
- iNodeClient 校园网客户端在linux环境下的使用方法
- unilx安装mysql_内容更新 · web-liuyang/uni-app-tools@72f7fd7 · GitHub
- vs2019编译的程序在win7环境上运行失败
- s3cmd安装配置及基础命令
- 树莓派11bullseye换源/Opencv安装
- 使用koa2+wechaty打造个人微信小秘书
- ViewBinding 与 Kotlin 委托双剑合璧
- 华大HC32A460 系列介绍(二)
热门文章
- 二次元博客系统Halo
- linux+格式化磁盘格式化,Linux下的磁盘格式化
- JAVA 序列化http://www.importnew.com/17964.html
- 关于st25系列NFC标签简单介绍及st25TV系列用于门禁读取时的注意事项总结
- android 手机误删短信恢复软件,误删除短信恢复大师 for android v4.1 安卓版 恢复Android手机上误删除的短信记录的软件...
- 不同类型的云计算专业知识,推荐几本专业云计算技术书籍
- 网络营销推广怎么做 微信如何吸引粉丝
- Dream-hacking 造梦工程与脑波艺术
- vue动态添加下划线
- 2014、2015年国家级虚拟仿真实验教学中心入选名单