蓝桥杯嵌入式拓展板-----》数码管

该文介绍了如何利用74HC595芯片驱动共阴极数码管显示数字,通过Cubemx配置STM32的IO口,编写了相应的驱动代码在Keil5中,展示了从硬件原理到软件实现的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

硬件原理图:

引脚介绍:

cubemx配置:

最后看运行效果:


硬件原理图:

 数码管是共阴极的,所以当输入为1时,数码管亮。
74HC595是一个8位串行输入、并行输出的位移缓存器

引脚介绍:

这里我们需要使用到三个引脚分别是:SER、RCK、SCK

其中分别对应的是PA1、PA2、PA3  

实物图如下:


RCLK引脚 :当RCLK到上升沿时,移位寄存器进入存储寄存器,也就是负责将数据传到数码管。
SCK 引脚到上升沿时:数据寄存器移位
SER 引脚是串行数据输入端位简单来说就是数据发送通过SER,然后SCK上升沿,标记为一次,当3*8为数据发送完毕,RCLK上升沿便实现了数码管显示。

 

cubemx配置:

 

 

 

 到Keil5创建smg.c和smg.h

#include "smg.h"

unsigned char SMG[17] = { 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x00}; 

void Smg_Set(uint8_t n1,uint8_t n2,uint8_t n3)
{
	uint8_t num=0,i=0;
	num=SMG[n3];
	for(i=0;i<8;i++)
	{
		if(num&0x80)SER_H;
		else SER_L;
		SCK_H;
		num<<=1;
		SCK_L;
	}
	
	
	num=SMG[n2];
	for(i=0;i<8;i++)
	{
		if(num&0x80)SER_H;
		else SER_L;
		SCK_H;
		num<<=1;
		SCK_L;
	}
	
	num=SMG[n1];
	for(i=0;i<8;i++)
	{
		if(num&0x80)SER_H;
		else SER_L;
		SCK_H;
		num<<=1;
		SCK_L;
	}
	
	RCLK_H;
	RCLK_L;
}
#ifndef	__SMG_H
#define	__SMG_H

#include "main.h"

#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)
#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)

void Smg_Set(uint8_t n1,uint8_t n2,uint8_t n3);
#endif

主程序:

最后看运行效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值