【蓝桥杯嵌入式国赛】移位寄存机控制数码管

前言:蓝桥杯扩展板中,数码管使用三片移位锁存器控制。SCK为数据移位信号,当出现上升沿时将此时SER电平信号移入锁存器。RCLK为输出锁存信号,出现上升沿时将锁存器数据输出,并对输出信号进行锁存。
注意:使用数码管时,要将P1、P2、P3的跳线帽接到对应位置。
一、CubeMX配置:

GPIO配置

将PA1、PA2、PA3设置为推挽输出。

二、代码部分:

创建seg.h文件:

#ifndef __SEG_H
#define __SEG_H

#include "main.h"

#define SER_H   HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,1)
#define SER_L   HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,0)
#define RCLK_H  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,1)
#define RCLK_L  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,0)
#define SCK_H   HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,1)
#define SCK_L   HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,0)

void seg_Display(uint8_t bit1,uint8_t bit2,uint8_t bit3);
void seg_ShowStr(uint8_t show[3]);
#endif

创建seg.c文件:

#include "seg.h"

uint8_t Seg[17] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x00};
void seg_Display(uint8_t bit1,uint8_t bit2,uint8_t bit3){
	RCLK_L;
	uint8_t bit[3]={bit3,bit2,bit1};
	for(int u=0;u<3;u++){
		uint8_t temp=Seg[bit[u]];
		for(int i=0;i<8;i++){
			SCK_L;
			if(temp & 0x80) SER_H;
			else SER_L;
			temp = temp << 1;
			SCK_L;
			SCK_H;
		}
	}
	RCLK_L;
	RCLK_H;
}

void seg_ShowStr(uint8_t show[3]){
	uint8_t bit[3]={0};
	for(int i=0;i<3;i++){
		if(show[i] <= '9') bit[i] = show[i] - '0';
		else bit[i] = show[i] - 'A' + 10;
	}
	seg_Display(bit[0],bit[1],bit[2]);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值