找个人帮忙写一下代码。

 

byte num_0[8] = { B00000000,B00000000,B01111100,B01000100,B01111100,B00000000,B00000000,B00000000 };//定义数组 用于让led显示0
byte num_1[8] = { B00000000,B00000000,B00000000,B01111110,B01111110,B00000000,B00000000,B00000000 }; //定义数组 用于让led显示1
byte num_2[8] = { B00000000,B00000000,B01110100,B01010100,B01010100,B01011100,B00000000,B00000000 }; //定义数组 用于让led显示2
byte num_3[8] = { B00000000,B00000000,B01010100,B01010100,B01010100,B01111100,B00000000,B00000000 }; //定义数组 用于让led显示3
byte num_4[8] = { B00000000,B00000000,B00011100,B00010000,B00010000,B01111100,B00000000,B00000000 }; //定义数组 用于让led显示4
byte num_5[8] = { B00000000,B00000000,B01011100,B01010100,B01010100,B00100100,B00000000,B00000000 }; //定义数组 用于让led显示5
byte num_6[8] = { B00000000,B00000000,B01111100,B01010010,B01010010,B01011110,B00000000,B00000000 }; //定义数组 用于让led显示6
byte num_7[8] = { B00000000,B00000000,B01000000,B01000110,B01011000,B01100000,B00000000,B00000000 }; //定义数组 用于让led显示7
byte num_8[8] = { B00000000,B00000000,B01111110,B01011010,B01011010,B01111110,B00000000,B00000000 }; //定义数组 用于让led显示8
byte num_9[8] = { B00000000,B00000000,B01110010,B01010010,B01010010,B01111110,B00000000,B00000000 }; //定义数组 用于让led显示9

struct Button{
  int pin;
  int last_p;
};

//7-segs 74HC595 引脚 驱动点阵
constexpr int latch_pin = 1;
constexpr int clock_pin = 2;
constexpr int data_pin = 3;

//7-segs 74HC595 引脚 驱动跑马灯
constexpr int latch_pin2 = 4;
constexpr int clock_pin2 = 5;
constexpr int data_pin2 = 6;

//开始暂停按键
constexpr int inpt=7;

//模拟量输入
constexpr int an=8;

int last_dy_time;//用于电压滚动显示时间
int last_p_time;//用于按键防抖
int last_pmd_time;//用于跑马灯循环时间
int st;//标记跑马灯启停
int last_p;//用于确认单击
int an_v;//模拟量读数
int dy_b;//电压滚动显示的位
int pmd;//跑马灯变量

int but(Button b){
  if(!digitalRead(b.pin)){
    if(micros()-last_p_time>50000){
      last_p_time=micros();
      if(b.last_p==0){
        return 1;    
      }
      b.last_p=1;
    }
  }
  b.last_p=0;
  return 0;
}

//驱动点阵
void led(int n,int b,int dp){
  int tmp=n;
  if(dp){
    tmp&=0x7f;
  }
  for(int i=0;i<8;i++){
    digitalWrite(data_pin,(tmp & 0x80)!=0);
    digitalWrite(clock_pin, HIGH);
    digitalWrite(clock_pin,LOW);
    tmp<<=1;
  }
  tmp=1<<b;
  tmp=~tmp;
  for(int i=0;i<8;i++){
    digitalWrite(data_pin,(tmp & 0x80)!=0);
    digitalWrite(clock_pin, HIGH);
    digitalWrite(clock_pin,LOW);
    tmp<<=1;
  }
    digitalWrite(latch_pin, HIGH);
    digitalWrite(latch_pin, LOW);
}

//驱动跑马灯
void led2(int n){
  int tmp=1<<n;
  for(int i=0;i<16;i++){
    digitalWrite(data_pin,(tmp & 0x8000)!=0);
    digitalWrite(clock_pin, HIGH);
    digitalWrite(clock_pin,LOW);
    tmp<<=1;
  }
    digitalWrite(latch_pin, HIGH);
    digitalWrite(latch_pin, LOW);
}

Button b_in;

void setup()    //arduino主函数 用于初始化
{
  b_in.pin=inpt;
  last_p_time=0;
  last_pmd_time=0;
  st=1;
  last_p=0;
  dy_b=3;

  pinMode(latch_pin,OUTPUT);
  pinMode(clock_pin,OUTPUT);
  pinMode(data_pin,OUTPUT);  
  pinMode(latch_pin2,OUTPUT);
  pinMode(clock_pin2,OUTPUT);
  pinMode(data_pin2,OUTPUT);
  pinMode(inpt,OUTPUT);
  pinMode(an,INPUT);
}

void loop()//arduino主循环
{
    if(but(b_in)){
      st=~st;
    }
    an_v=analogRead(an);
    if(st){//跑马灯循环
       if(micros()-last_pmd_time>an_v*1000){
          pmd++;
          if(pmd>9){
            pmd=0;
          }
          led2(pmd);
       }
    }
    if(micros()-last_dy_time>1000000){
      dy_b--;
      if(dy_b==-1){
        dy_b=3;
      }
    }
    an_v=(an_v/(int)pow(10,dy_b))%10;
    
    int dpst=0;
    if(dy_b==3){
      dpst=1;
    }
    
    switch(an_v/200){ //显示电压值
      case 0:
        for(int i=0;i<8;i++){
          led(num_0[i],i,dpst);
        }
      case 1:
        for(int i=0;i<8;i++){
          led(num_1[i],i,dpst);
        }
      case 2:
        for(int i=0;i<8;i++){
          led(num_2[i],i,dpst);
        }
      case 3:
        for(int i=0;i<8;i++){
          led(num_3[i],i,dpst);
        }
      case 4:
        for(int i=0;i<8;i++){
          led(num_4[i],i,dpst);
        }
      case 5:
        for(int i=0;i<8;i++){
          led(num_5[i],i,dpst);
        }     
      case 6:
        for(int i=0;i<8;i++){
          led(num_6[i],i,dpst);
        } 
      case 7:
        for(int i=0;i<8;i++){
          led(num_7[i],i,dpst);
        } 
      case 8:
        for(int i=0;i<8;i++){
          led(num_8[i],i,dpst);
        } 
      case 9:
        for(int i=0;i<8;i++){
          led(num_9[i],i,dpst);
        } 
    }

 
}

 

一、新建工程并添加相应的工程文件

本实验需要用到三个固件库文件,分别为stm32f4xx_gpio.c /stm32f4xx_gpio.h 、stm32f4xx_rcc.c/stm32f4xx_rcc.h 、misc.c/ misc.h 。

二、编写用户驱动代码

1、编写c文件
a.使能GPIO时钟,根据电路原理图可知LED0、LED1对应io口的引脚为PE3、PE4,LED2对应的引脚为PG9,故将RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOG作为第一个入口参数。
b.初始化io口设置
c.初始化GPIO
d.设置输出电平,由电路图可知,为上拉模式,设置输出高电平,灯灭。

#include "led.h"
#include "common.h"

//初始化PE3,PE4为输出口,并使能io口时钟
//LEDio口初始化

void LED_Init(void)
{

	GPIO_InitTypeDef  GPIO_InitStructure;//声明一个初始化io口的结构体变量
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOG,ENABLE);//使能GPIOE、GPIOG时钟
	//初始化设置
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;//普通输出模式
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3 | GPIO_Pin_4;//LED0和LED1对应的io口	
	GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽输出
	GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//上拉
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
	GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE
	GPIO_SetBits(GPIOE,GPIO_Pin_3 | GPIO_Pin_4);//输出高灯灭

	
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//LED2对应的io口PG9
	GPIO_Init(GPIOG, &GPIO_InitStructure);//初始化GPIOG
	GPIO_SetBits(GPIOG,GPIO_Pin_9);//输出高灯灭
}



2、编写头文件

#ifndef __LED_H 
#define __LED_H 
#include "common.h"

#define LED0 PEout(3) //宏定义
#define LED1 PEout(4) //宏定义
#define LED2 PGout(9) //宏定义
 
void LED_Init(void);          
#endif 



宏定义的部分必须要与使能的io口相匹配。

三、编写主函数

#include "led.h"
#include "common.h"

int main(void)
{ 
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置系统中断优先级分组2
	delay_init();		  //初始化延时函数
	LED_Init();		    //初始化LED端口
	
  while(1)
	{
    LED0=0;     //LED0亮
    LED1=1;     //LED1灭
    LED2=1;     //LED2灭
		
    delay_ms(500);
		LED0=1;     //LED0灭
    LED1=0;     //LED1亮
    LED2=1;     //LED2灭
		 
		delay_ms(500);
		LED0=1;     //LED0灭
    LED1=1;     //LED1灭
    LED2=0;     //LED2亮
    delay_ms(500);
	}
}


望采纳,谢谢!!!

先模拟电路图,然后直接编程实现。