OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4127|回复: 5

点亮led点阵程序,哪里有错,求助。。。。。。

[复制链接]

2

主题

8

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-7-15
在线时间
2 小时
发表于 2016-7-20 09:20:03 | 显示全部楼层 |阅读模式
1金钱
前几天还点亮,这是.c程序
#include "includes.h"

/***************************************************************
*函数名:LED_08_GPIO_Config
*形参:void
*返回值:void
*函数功能:08管口初始化
****************************************************************/
void LED_08_GPIO_Config(void)
{  
  GPIO_InitPara  GPIO_InitStructure;
    /* PB4~PB7 接口A B C D    表示行信号的管脚*/
    RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_GPIOB, ENABLE);
    /* Configure the pin */
    GPIO_InitStructure.GPIO_Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
    GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OTYPE_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_NOPULL;
    GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

   /* PA0~PA1 PA4~PA5  接口R1 R2 G1 G2  表示列信号的管脚*/
    RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_GPIOA, ENABLE);
    /* Configure the pin */
    GPIO_InitStructure.GPIO_Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5;
    GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OTYPE_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_NOPULL;
    GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  /* PB0,PB1,PB3, EN使能,STB锁存,CLK时钟*/
    RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_GPIOB, ENABLE);
    /* Configure the pin */
    GPIO_InitStructure.GPIO_Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_3;
    GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OTYPE_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_NOPULL;
    GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}
/***************************************************************
*函数名:Led_Light
*形参:void
*返回值:void
*函数功能:点亮主程序,先清屏,然后让红灯全亮
****************************************************************/
void Led_Light(void)
{
EN(1);//高电平,失能
Clean_595();//清除锁存器信息,红绿全灭

while(1)
{
  WriteDataToFirstHalScreen();//写入全点亮红灯
  SetRowLight();
}
}
/***************************************************************
*函数名:Clean_595
*形参:void
*返回值:void
*函数功能:清屏,清除锁存器里没用的信息,led点阵屏全灭,置高电平
            红绿
****************************************************************/
void Clean_595(void)
{
int columnarr[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};//控制8个595
int send_data[64]={0};                                 //十六变二进制保存,发送给595
int i,j;

STB(0);//锁存低电平,不发送
for(i=0;i<8;i++)//把所有数据存入send_data中,控制64列
{
  for(j=0;j<8;j++)
  {
   send_data[j+i*8]=columnarr[i]%2;
   columnarr[i]=columnarr[i]/2;
  }
}
for(i=0;i<64;i++)
{
  CLK(0);//时钟低电平,不接收
  R1(send_data[i]);//发送相应位的电平,一位一位发送
  G1(send_data[i]);
  CLK(1);//时钟高电平,接收
}
STB(1);
CLK(0);
STB(0);
}
/***************************************************************
*函数名:WriteDataToFirstHalScreen
*形参:void
*返回值:void
*函数功能:发送数据控制列的led亮灭/红灯
****************************************************************/
void WriteDataToFirstHalScreen(void)
{
int i,j;
  int columnarr[8]={0};
int send_data[64]={0};

STB(0);//锁存低电平,不发送
for(i=0;i<8;i++)//把所有数据存入a中,控制64列
{
  for(j=0;j<8;j++)
  {
   send_data[j+i*8]=columnarr[i]%2;
   columnarr[i]=columnarr[i]/2;
  }
}
for(i=0;i<64;i++)
{
  CLK(0);
  R1(send_data[i]);//发送相应位的电平,一位一位发送
  CLK(1);//接收数据存入锁存
}
STB(1);     //锁存置高,发送数据
CLK(0);//全部置低,不发送不接收。
STB(0);
}
/***************************************************************
*函数名:SetRowLight
*形参:void
*返回值:void
*函数功能:点亮主程序,先清屏,然后让红灯全亮
****************************************************************/
/*行信号选择函数,输入行后,进行abcd的二进制转换选择改变高低电平进而选择行*/
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++)
{
  EN(0);
  //换算二进制,发送相应行
  while(rownum>0)
  {
   rowarr[i] = rownum%2;
   rownum = rownum/2;
   i++;
  }
  LA(rowarr[0]);//发送相应的电平,确定哪一行
  LB(rowarr[1]);
  LC(rowarr[2]);
  LD(rowarr[3]);
  EN(1);
}
}
void Text1_Led(void)
{
LED_08_GPIO_Config();
Led_Light();
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-7-15
在线时间
2 小时
 楼主| 发表于 2016-7-20 09:21:30 | 显示全部楼层
本帖最后由 sahdfasd 于 2016-7-20 10:33 编辑

这个是.h
#ifndef _LED_SCREEN_
#define _LED_SCREEN_

#include "includes.h"

//置1高电平,置0低电平
#define LA(x) x?GPIO_SetBits(GPIOB,GPIO_PIN_4):GPIO_ResetBits(GPIOB,GPIO_PIN_4)
#define LB(x) x?GPIO_SetBits(GPIOB,GPIO_PIN_5):GPIO_ResetBits(GPIOB,GPIO_PIN_5)
#define LC(x) x?GPIO_SetBits(GPIOB,GPIO_PIN_6):GPIO_ResetBits(GPIOB,GPIO_PIN_6)
#define LD(x) x?GPIO_SetBits(GPIOB,GPIO_PIN_7):GPIO_ResetBits(GPIOB,GPIO_PIN_7)
//r1g1控制上半屏的红绿,r2g2控制下半屏的红绿,1的时候高电平,不亮
#define R1(x) x?GPIO_SetBits(GPIOA,GPIO_PIN_0):GPIO_ResetBits(GPIOA,GPIO_PIN_0)
#define R2(x) x?GPIO_SetBits(GPIOA,GPIO_PIN_1):GPIO_ResetBits(GPIOA,GPIO_PIN_1)
#define G1(x) x?GPIO_SetBits(GPIOA,GPIO_PIN_4):GPIO_ResetBits(GPIOA,GPIO_PIN_4)
#define G2(x) x?GPIO_SetBits(GPIOA,GPIO_PIN_5):GPIO_ResetBits(GPIOA,GPIO_PIN_5)
//EN使能口
#define EN(x) x?GPIO_SetBits(GPIOB,GPIO_PIN_0):GPIO_ResetBits(GPIOB,GPIO_PIN_0)
//STB锁存口
#define STB(x) x?GPIO_SetBits(GPIOB,GPIO_PIN_1):GPIO_ResetBits(GPIOB,GPIO_PIN_1)
//CLK时钟口
#define CLK(x) x?GPIO_SetBits(GPIOB,GPIO_PIN_3):GPIO_ResetBits(GPIOB,GPIO_PIN_3)
/*--------------------------1--------------------------*/
void LED_08_GPIO_Config(void);
void Led_Light(void);

void Clean_595(void);//清屏,清除锁存器里没用的信息,led点阵屏全灭
void WriteDataToFirstHalScreen(void);
void SetRowLight(void);

void Text1_Led(void);

#endif
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-7-20 21:02:41 | 显示全部楼层
慢慢调试
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2017-4-15
在线时间
4 小时
发表于 2017-4-15 18:51:48 | 显示全部楼层
兄弟给个main函数啊
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2017-4-15
在线时间
4 小时
发表于 2017-4-15 18:56:38 | 显示全部楼层
你这使能该是用RCC_AHB1
回复

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2017-4-22
在线时间
13 小时
发表于 2017-4-24 08:59:38 | 显示全部楼层
可能是电流驱动不足
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-22 01:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表