用STM32F407控制一个32×64的LED点阵,求助怎么编程

2019-07-20 15:13发布

接口是HUB08
芯片有 74HC245D 74HC595  74hc138 4953s
我的代码是这样的:main.c
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"


int main(void)
{

        delay_init(168);                 
        LED_08_GPIO_Config();                          
        while(1)
        {
          
          Text1_Led();
                delay_ms(1000);
         
               
               
        }
}


led.c
#include "led.h"
#include "sys.h"
                    
//LED IO3õê¼»ˉ
void LED_08_GPIO_Config(void)
{             
  GPIO_InitTypeDef  GPIO_InitStructure;


  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//ê1ÄüGPIOFê±Öó


  //GPIOF3õê¼»ˉéèÖÃ
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 |GPIO_Pin_5 |GPIO_Pin_3 ;//
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//ÆÕí¨êä3öÄ£ê½
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//íÆíìêä3ö
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//éÏà-
        //A B R0 R1 STB CLK¶Ôó|IO¿ú
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15|GPIO_Pin_13|GPIO_Pin_9|GPIO_Pin_7| GPIO_Pin_10|GPIO_Pin_4  ;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//ÆÕí¨êä3öÄ£ê½
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//íÆíìêä3ö
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//ÏÂà-
       
  GPIO_Init(GPIOF, &GPIO_InitStructure);//3õê¼»ˉGPIO
       
       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//ê1ÄüGPIOCê±Öó


  //GPIOC3õê¼»ˉéèÖÃ
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_2;//
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//ÆÕí¨êä3öÄ£ê½
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//íÆíìêä3ö
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//éÏà-
        //C G0 G1 OE¶Ôó|μÄIO¿ú
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5| GPIO_Pin_3| GPIO_Pin_1| GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//ÆÕí¨êä3öÄ£ê½
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//íÆíìêä3ö
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//ÏÂà-
  GPIO_Init(GPIOC, &GPIO_InitStructure);//3õê¼»ˉGPIO
       




RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//ê1ÄüGPIOBê±Öó


  //GPIOB3õê¼»ˉéèÖÃ
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//ÆÕí¨êä3öÄ£ê½
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//íÆíìêä3ö
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//éÏà-
  GPIO_Init(GPIOB, &GPIO_InitStructure);//3õê¼»ˉGPIO
       
        GPIO_SetBits(GPIOB,GPIO_Pin_2);//GPIOBéèÖøߣ¬μÆÃe
       
       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//ê1ÄüGPIOAê±Öó


  //GPIOA3õê¼»ˉéèÖÃ
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;//
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//ÆÕí¨êä3öÄ£ê½
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//íÆíìêä3ö
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//ÏÂà-
  GPIO_Init(GPIOA, &GPIO_InitStructure);//3õê¼»ˉGPIO
       




}
/***************************************************************
*oˉêyÃû£oLed_Light
*DÎ2Î:void
*·μ»ØÖμ:void
*oˉêy1|Äü£oμãááÖ÷3ìDò£¬ÏèÇåÆᣬè»oóèÃoìμÆè«áá
****************************************************************/
void Led_Light(void)
{
OE(1);
Clean_595();


while(1)
{
  WriteDataToFirstHalScreen();
  SetRowLight();
}
}
/***************************************************************
*:Clean_595
*:void
*:void
****************************************************************/
void Clean_595(void)
{
int columnarr[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
int send_data[64]={0};                                
int i,j;


STB(0);
for(i=0;i<8;i++)
{
  for(j=0;j<8;j++)
  {
   send_data[j+i*8]=columnarr%2;
   columnarr=columnarr/2;
  }
}
for(i=0;i<64;i++)
{
  CLK(0);
  R0(send_data);
  G0(send_data);
  CLK(1);
}
STB(1);
CLK(0);
STB(0);
}
/***************************************************************
*:WriteDataToFirstHalScreen
*:void
*:void


****************************************************************/
void WriteDataToFirstHalScreen(void)
{
int i,j;
  int columnarr[8]={0};
int send_data[64]={0};


STB(0);
for(i=0;i<8;i++)
{
  for(j=0;j<8;j++)
  {
   send_data[j+i*8]=columnarr%2;
   columnarr=columnarr/2;
  }
}
for(i=0;i<64;i++)
{
  CLK(0);
  R0(send_data);
  CLK(1);
}
STB(1);     
CLK(0);
STB(0);
}
/***************************************************************
*SetRowLight
*:void
*:void
*
****************************************************************/


void SetRowLight(void)
{
// u8 weixuan[16]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
int rowarr[4] = {0};
int i=0,rownum;


for(rownum=0;rownum<16;rownum++)
{
  OE(0);
  
  while(rownum>0)
  {
   rowarr = rownum%2;
   rownum = rownum/2;
   i++;
  }
  A(rowarr[0]);
  B(rowarr[1]);
  C(rowarr[2]);
  D(rowarr[3]);
  OE(1);
}
}
void Text1_Led(void)
{
LED_08_GPIO_Config();
Led_Light();
}

led.h

#ifndef _LED_SCREEN_
#define _LED_SCREEN_


#include "sys.h"


//&#214;&#195;1&#184;&#223;μ&#231;&#198;&#189;£&#172;&#214;&#195;0μíμ&#231;&#198;&#189;
#define A(x) x?GPIO_SetBits(GPIOF,GPIO_Pin_15):GPIO_ResetBits(GPIOF,GPIO_Pin_15)
#define B(x) x?GPIO_SetBits(GPIOF,GPIO_Pin_13):GPIO_ResetBits(GPIOF,GPIO_Pin_13)
#define C(x) x?GPIO_SetBits(GPIOC,GPIO_Pin_5):GPIO_ResetBits(GPIOC,GPIO_Pin_5)
#define D(x) x?GPIO_SetBits(GPIOA,GPIO_Pin_7):GPIO_ResetBits(GPIOA,GPIO_Pin_7)
//R0 G0 &#191;&#216;&#214;&#198;é&#207;°&#235;&#198;áμ&#196;oì&#194;ì£&#172;R1 G1&#191;&#216;&#214;&#198;&#207;&#194;°&#235;&#198;áμ&#196;oì&#194;ì£&#172;1μ&#196;ê±oò&#184;&#223;μ&#231;&#198;&#189;£&#172;2&#187;áá
#define R0(x) x?GPIO_SetBits(GPIOF,GPIO_Pin_9):GPIO_ResetBits(GPIOF,GPIO_Pin_9)
#define R1(x) x?GPIO_SetBits(GPIOF,GPIO_Pin_7):GPIO_ResetBits(GPIOF,GPIO_Pin_7)
#define G0(x) x?GPIO_SetBits(GPIOC,GPIO_Pin_3):GPIO_ResetBits(GPIOC,GPIO_Pin_3)
#define G1(x) x?GPIO_SetBits(GPIOC,GPIO_Pin_1):GPIO_ResetBits(GPIOC,GPIO_Pin_1)
//OEê1&#196;ü
#define OE(x) x?GPIO_SetBits(GPIOC,GPIO_Pin_0):GPIO_ResetBits(GPIOC,GPIO_Pin_0)
//STB&#203;&#248;′&#230;&#191;ú
#define STB(x) x?GPIO_SetBits(GPIOF,GPIO_Pin_10):GPIO_ResetBits(GPIOF,GPIO_Pin_10)
//CLKê±&#214;ó&#191;ú
#define CLK(x) x?GPIO_SetBits(GPIOF,GPIO_Pin_4):GPIO_ResetBits(GPIOF,GPIO_Pin_4)
/*--------------------------1--------------------------*/
void LED_08_GPIO_Config(void);
void Led_Light(void);


void Clean_595(void);
void WriteDataToFirstHalScreen(void);
void SetRowLight(void);


void Text1_Led(void);


#endif



线都接好过后,LED板子没反应,重启单片机过后,LED板子只有两排闪了4下(重复启动也是4下)然后就没反应了,求助啊。


0条回答

一周热门 更多>