当前位置: 首页 > news >正文

STM32实现HC595控制三位数码管(内含程序,PCB原理图及相关资料)

目录

任务要求

一、595的作用

二、电路设计

三、STM32选型

四、cubeMX配置

五、代码实现

六、实现效果(显示12.8)


任务要求

使用两个595实现对三位数码管控制,实现三位值显示。

一、595的作用

74HC595的作用是将串行数据进行并行显示。主要功能是节约单片机的IO口,保证少量的IO口即可完成数码管显示。

二、电路设计

因为三位数码管涉及11个引脚(包含8个段位引脚和3个COM引脚),正常IO驱动的话,就需要11个引脚,这样就会消耗很多IO口。

这时就需要这两个595实现数码管控制。

一个595只有8个数据输出口,因此需要两个595级联实现数码管显示。

电路图设计如下。

图中STCP、SHCP、DS引脚需要接在STM32的引脚,这样就能实现3个IO口控制数码管显示。

STM32引脚595芯片引脚
PB7STCP
PB6SHCP
PB5DS

然后,绘制PCB板

三、STM32选型

其实STM32选型,什么类型的单片机无所谓,因为使用HAL库开发能够实现代码的较好移植。只要配置好Cube MX生成工程就可以。

这里选用的是:STM32G030K8T6(再次说明一下,这里的单片机选型不重要,实现方法相同

四、cubeMX配置

选择相应的引脚,其均设置成输出模式

修改引脚的别名,这里也可以不修改。

五、代码实现

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);
}

数码管显示函数

void DispData(void)
{HC595_Write_Data(table[gBai]);HC595_Write_Data(0X0006);		//	0000 0000 0000 0000Disp_out(); /// 增加小数点HC595_Write_Data(table[gShi]|0X80);			//	加小数点 增加|0X80HC595_Write_Data(0X0005);	Disp_out(); HC595_Write_Data(table[gGe]);HC595_Write_Data(0X0003);	Disp_out(); //	保证数码管亮度一致HC595_Write_Data(table[0]);HC595_Write_Data(0X0007);	Disp_out(); 
}

到这就实现了数码管显示。

主函数代码

int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();/* USER CODE BEGIN 2 *//* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */DispData();}/* USER CODE END 3 */
}

六、实现效果(显示12.8)

代码链接:

STM32实现HC595控制三位数码管资源-CSDN文库

吾芯电子

http://www.lryc.cn/news/496052.html

相关文章:

  • 《沉积与特提斯地质》
  • Android studio 签名加固后的apk文件
  • Brain.js(二):项目集成方式详解——npm、cdn、下载、源码构建
  • 关于Vscode配置Unity环境时的一些报错问题(持续更新)
  • MacOS 配置github密钥
  • 从0开始学PHP面向对象内容之常用设计模式(策略,观察者)
  • 前端 如何用 div 标签实现 步骤审批
  • 【大数据技术基础 | 实验十四】Kafka实验:订阅推送示例
  • SpringAi整合大模型(进阶版)
  • 为什么爱用低秩矩阵
  • React 自定义钩子:useOnlineStatus
  • uniapp 小程序 监听全局路由跳转 获取路由参数
  • 12.02 深度学习-卷积
  • MySQL 主从同步一致性详解
  • Spring源码导入idea时gradle构建慢问题
  • Dockerfile 安装echarts插件给java提供服务
  • Springboot小知识(1):启动类与配置
  • [CISCN 2019华东南]Web11
  • Cypress内存溢出奔溃问题汇总
  • 树莓派4B--OpenCV安装踩坑
  • 电子电气架构 --- 面向服务的汽车诊断架构
  • Pytest --capture 参数详解:如何控制测试执行过程中的输出行为
  • IS-IS的原理
  • C++(4个类型转换)
  • Ubuntu20.04安装NVIDIA显卡驱动
  • 速盾:介绍一下高防cdn的缓存响应事什么功能?
  • Nuclei-快速漏洞扫描器
  • linux网络抓包工具
  • 详解桥接模式
  • 探索AI新世界!热门工具与学习资源免费获取