目录
硬件原理图:
数码管是共阴极的,所以当输入为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
主程序: