stm32 HAL 8位串口数码管74HC590驱动

该博客主要介绍了如何使用STM32H7xx微控制器通过GPIO口驱动LED矩阵显示屏。代码中定义了dio_w、sclk_w和rclk_w函数用于控制数据线、时钟线和锁存器,实现了数据的串行传输。drv_led_out函数用于将8位数据写入LED显示缓存,并通过延时函数控制显示速度。在初始化函数drv_led_init中,设置了LED的显示数据并进行循环显示。
摘要由CSDN通过智能技术生成

 

dio  d11

sclk d12

rclk  d13 

#include "drv_led.h"

// 平台文件
#include "stm32h7xx_hal.h"
#include "delay.h"

unsigned char fseg[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char LED[8];	//用于LED的4位显示缓存

void dio_w(uint8_t state)
{
    HAL_GPIO_WritePin(GPIOD,GPIO_PIN_11,state);
}

void sclk_w(uint8_t state)
{
    HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,state);
}

void rclk_w(uint8_t state)
{
    HAL_GPIO_WritePin(GPIOD,GPIO_PIN_13,state);
}

void drv_led_out(uint8_t index,uint8_t  data)
{
    uint8_t i;
    unsigned char num;
	    // 片选
    uint8_t seg = 0x01<<index;
	
	  num = fseg[data];
    // 数据
    for(i=0; i<8; i++)
    {
        sclk_w(0);
        if(num&0x80)
        {
            dio_w(1);
        } else {
            dio_w(0);
        }
        num<<=1;
        sclk_w(0);
        delay_us(50);
        sclk_w(1);
        delay_us(50);
    }
		// 片选
    for(i=0; i<8; i++)
    {
        
        if(seg&0x80)
        {
            dio_w(1);
        } else {
            dio_w(0);
        }
        seg<<=1;
        sclk_w(0);
        delay_us(50);
        sclk_w(1);
        delay_us(50);
    }

    rclk_w(0);
    rclk_w(1);
}



void drv_led_init(void)
{

    LED[0]=1;
    LED[1]=2;
    LED[2]=3;
    LED[3]=4;
    LED[4]=5;
    LED[5]=6;
    LED[6]=7;
    LED[7]=8;

    for(;;)
    {
			  for(int i =0;i<8;i++){
					drv_led_out(i, LED[i]);
				}
        
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值