OpenEdv-开源电子网

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

点亮led大屏幕例程谁有,求助

[复制链接]

2

主题

8

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-7-15
在线时间
2 小时
发表于 2016-7-15 15:45:53 | 显示全部楼层 |阅读模式
1金钱
现在有一个led的64X32的屏幕,如何初始化如何配置,谁有例程相互学习下

QQ图片20160715154430.jpg
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2013-6-23
在线时间
59 小时
发表于 2016-7-15 18:26:49 | 显示全部楼层
首先你要知道这个LED点阵硬件是怎么连接的,有哪几个I/O口需要控制,I/O口的时序怎么控制,然后再来想MCU怎么控制,编程写软件
回复

使用道具 举报

10

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
485
金钱
485
注册时间
2013-12-3
在线时间
83 小时
发表于 2016-7-15 18:35:11 | 显示全部楼层
这个是点阵屏  接口一般都一样     你邮箱多少  发你一个我写的  你参考参考吧
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-7-15
在线时间
2 小时
 楼主| 发表于 2016-7-18 09:55:25 | 显示全部楼层
yy21910115 发表于 2016-7-15 18:35
这个是点阵屏  接口一般都一样     你邮箱多少  发你一个我写的  你参考参考吧

谢谢了,313292429@qq.com学习学习。
现在已经点亮,开始要显示汉字图形,整好继续学习
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-7-15
在线时间
2 小时
 楼主| 发表于 2016-7-18 09:56:49 | 显示全部楼层
分享下点亮的程序先是.h程序
#ifndef _LED_SCREEN_
#define        _LED_SCREEN_

//置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(GPIOB,GPIO_PIN_0)
#define R2(x) x?GPIO_SetBits(GPIOA,GPIO_PIN_1):GPIO_ResetBits(GPIOB,GPIO_PIN_1)
#define G1(x) x?GPIO_SetBits(GPIOA,GPIO_PIN_4):GPIO_ResetBits(GPIOB,GPIO_PIN_4)
#define G2(x) x?GPIO_SetBits(GPIOA,GPIO_PIN_5):GPIO_ResetBits(GPIOB,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)

void Init_LED_Screen(void);

void LED_08_GPIO_Config(void);
void Led_Light(void);

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

#endif /* __GPIO_H */
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

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

/***************************************************************
*函数名: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)
{
        int i;
        EN(1);//高电平,失能
        Clean_595();//清除锁存器信息,红绿全灭

        while(1)
        {
                for(i=0;i<16;i++)
                {
                        HC595_Send_Date_Up();//写入全点亮上屏绿灯
                        HC_138();
                        HC595_Send_Date_Down();//写入全点亮下屏红灯
                        HC_138();
                }
        }
}
/***************************************************************
*函数名: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]={1};                                 //十六变二进制保存,发送给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%2;
                        columnarr=columnarr/2;
                }
        }

        for(i=0;i<64;i++)
        {
                R1(send_data);//发送相应位的电平,一位一位发送
                G1(send_data);
                R2(send_data);//发送相应位的电平,一位一位发送
                G2(send_data);
                Delay_us(1);
                CLK(1);//时钟低电平,不接收
                Delay_us(1);
                CLK(0);//时钟高电平,接收
        }
        STB(1);
        Delay_us(1);
        STB(0);
}

/***************************************************************
*函数名:WriteDataToFirstHalScreen
*形参:void
*返回值:void
*函数功能:发送数据控制列的led亮灭/红灯
****************************************************************/
void HC595_Send_Date_Up(void)
{
        int i,j;
        int send_data[64]={0};//全为低电平,全亮
  for(i=0;i<8;i++)
        {
        for(j=0;j<8;j++)
        {
                G1(send_data[j+i*8]);//发送相应位的电平,一位一位发送
                Delay_us(1);
                CLK(1);//接收数据存入锁存
                Delay_us(1);
                CLK(0);
        }
        }
        Delay_us(1);
        STB(1);
        Delay_us(1);
        STB(0);

}
void HC595_Send_Date_Down(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%2;
                        columnarr=columnarr/2;
                }
        }

        for(i=0;i<64;i++)
        {
                R2(send_data);//发送相应位的电平,一位一位发送
                Delay_us(1);
                CLK(1);//接收数据存入锁存
                Delay_us(1);
                CLK(0);
               
        }
        Delay_us(1);
        STB(1);
        Delay_us(1);
        STB(0);
}
/***************************************************************
*函数名:SetRowLight
*形参:void
*返回值:void
*函数功能:点亮主程序,先清屏,然后让红灯全亮
****************************************************************/
/*行信号选择函数,输入行后,进行abcd的二进制转换选择改变高低电平进而选择行*/
void HC_138(void)
{
        int rowarr[4] = {0};
        int i=0,j,rownum;

                EN(0);
                //换算二进制,发送相应行
                for(j=0;j<4;j++)
                {
                        rowarr = rownum%2;
                        rownum = rownum/2;
                        i++;
                }

                LA(rowarr[0]);//发送相应的电平,确定哪一行
                LB(rowarr[1]);
                LC(rowarr[2]);
                LD(rowarr[3]);
                EN(1);
}
回复

使用道具 举报

10

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
485
金钱
485
注册时间
2013-12-3
在线时间
83 小时
发表于 2016-7-18 16:26:40 | 显示全部楼层
我用寄存器写的  估计你不喜欢    你能点亮说明理解了他的原理 ,再要显示汉字就简单了,跟显示数字差不多
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-7-15
在线时间
2 小时
 楼主| 发表于 2016-7-20 09:12:19 | 显示全部楼层
yy21910115 发表于 2016-7-18 16:26
我用寄存器写的  估计你不喜欢    你能点亮说明理解了他的原理 ,再要显示汉字就简单了,跟显示数字差不多

自弄好了,屏又点亮不起来,抓狂,还是上面程序,真不知道哪里有错
回复

使用道具 举报

4

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2014-2-20
在线时间
56 小时
发表于 2016-7-20 22:22:49 | 显示全部楼层
这个比较容易,你的屏是32*64的点阵屏吧,之前用该模组做过一个LED数字钟。
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-7-15
在线时间
2 小时
 楼主| 发表于 2016-7-21 08:53:13 | 显示全部楼层
linhao091 发表于 2016-7-20 22:22
这个比较容易,你的屏是32*64的点阵屏吧,之前用该模组做过一个LED数字钟。

兄弟能帮忙看下吗,感觉时序也没有问题,和网上其他下哦那个地写的都差不多,现在是考入程序后,上半屏的第四和第16行绿灯亮一下后灭掉,下屏4和16行在亮红。
如果都调成亮红色,上下半屏都是4和十六行亮,不会灭。
兄弟你是51还是32做的,能发个程序看看吗
313292429@qq.com
回复

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2017-4-22
在线时间
13 小时
发表于 2017-4-22 10:24:15 | 显示全部楼层
帮忙发一份,谢谢啦,429032522@qq.com,唉,最近也在做这个,感觉都没问题,但是就是做不出来
回复

使用道具 举报

4

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2014-2-20
在线时间
56 小时
发表于 2017-5-30 16:43:45 | 显示全部楼层
sahdfasd 发表于 2016-7-21 08:53
兄弟能帮忙看下吗,感觉时序也没有问题,和网上其他下哦那个地写的都差不多,现在是考入程序后,上半屏的 ...

好久没上论坛了,可加QQ1321425355,共同探讨。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-20 17:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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