前言:蓝桥杯扩展板中,数码管使用三片移位锁存器控制。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]);
}