?
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]);
}
}
}
|