0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

音乐频谱LED显示屏驱动控制程序案例解析

454398 来源:博客园 作者: 依旧淡然 2020-10-21 16:00 次阅读

前些日子,购得一块08接口的双色LED显示屏(打算做个音乐频谱显示器),捣鼓了好几天,终于搞清楚了其控制原理,在这里做个总结,算是备忘吧。

1.LED显示屏的扫描方式

LED显示屏的扫描方式有静态、1/2、1/4、1/8、1/16几种。

这些扫描方式具体是什么意思呢?我们以1/16扫描方式为例来说明。因为LED显示屏是逐行刷新显示的,所以在任意时刻我们只能控制其任意一行的显示,每次刷新显示一行,16行为一个扫描周期,这就是1/16扫描方式。当然了,一个扫描周期的时间必须要小于人眼视觉暂留的时间(约0.05秒到0.2秒),否则,人眼会观察到LED显示屏所呈现的画面出现闪烁。

2.LED显示屏的接口形式

LED显示屏的接口形式有04接口、08接口、12接口几种,这里只介绍08接口。

08接口的管脚定义如图1所示。

图108接口管脚定义

其中,管脚LA、LB、LC、LD表示行信号;管脚R1、R2、G1、G2表示列信号;管脚EN表示使能信号;管脚SCK表示时钟信号;管脚STB表示锁存信号;管脚GND表示接地。

那么,管脚LA、LB、LC、LD是如何来控制行信号,从而实现1/16扫描方式的。其实很简单,这是通过两个3-8译码器74HC138芯片来实现,通过这两个芯片可以实现如下的功能:

当管脚LD、LC、LB、LA的输出分别为0000时,LED显示屏的第一行被选中;

当管脚LD、LC、LB、LA的输出分别为0001时,LED显示屏的第二行被选中;

当管脚LD、LC、LB、LA的输出分别为0010时,LED显示屏的第三行被选中;

......

当管脚LD、LC、LB、LA的输出分别为1111时,LED显示屏的第十六行被选中。

现在,我们已经知道如何通过08接口的四个行信号LA、LB、LC、LD来控制LED显示屏的每一行了。将08接口的四个列信号都接地,循环给四个行信号输入0000到1111,就可以点亮整个LED显示屏了。

但是要在LED显示屏上显示出汉字或是图形,仅仅对行信号进行控制是远远不够的,我们还需要对列信号进行控制。

3.LED显示屏的列驱动

LED显示屏的列驱动使用了74HC595芯片,该芯片具有8位串行输入、8位串行/并行输出,8位锁存功能。

对于64*32的LED显示屏来说,因为其总共有64列,所以通过对8个74HC595芯片进行级联,即可将其扩展为64位串行输入,64位并行输出,从而实现对64列信号进行控制。

08接口中的管脚R1、R2、G1、G2就是用来输入64位串行数据的。其中,R1、G1分别用来控制上半屏(16行)的红、绿信号;R2、G2分别用来控制下半屏(16行)的红绿信号。因此,对于64*32的双色LED显示屏来说,总共需要使用32个74HC595芯片。

显然,当红绿信号同时使能时(列信号低电平使能),就可以控制LED显示屏显示出黄色来了。

现在,我们已经知道LED显示屏的列驱动原理,下一步就可以编写程序,让LED显示屏显示出任意我们想要的汉字或图形了。

4.示例程序

了解了LED显示屏的驱动原理之后,编写单片机程序,利用08接口对其进行控制是很容易的。

程序的大致流程应该是这样的:

(1)初始化单片机的GPIO引脚。

(2)设置08接口的使能信号EN。

(3)利用行信号选中第1行,移位串行输入第1行的列信号数据,锁存列信号,并行输出显示。

(4)利用行信号选中第2行,移位串行输入第2行的列信号数据,锁存列信号,并行输出显示。

(5)依次遍历,直到第32行,并行输出显示为止。

(6)循环进行3-5的过程。

如下的代码示例了整个程序流程。

 1 void main(void)
 2 {
 3     int rowNumber = 0;                   //行序号
 4     int columnNumber = 0;                //列序号
 5 
 6     InitGPIO();                          //初始化单片机的GPIO引脚    
 7     LED_OE = 1;                          //使能信号
 8 
 9     while(1)                             //循环刷新显示
10     {        
11         for(rowNumber=0; rowNumber<16; rowNumber++)                   //写入上半屏的显示内容
12         {
13               SetRowLight(rowNumber);                                 //行信号选择
14 
15             for(columnNumber=0; columnNumber<8; columnNumber++)       //写入列信号数据
16             {
17                 Write1ByteToFirstHalfScreen(FirstHalfScreenArray[rowNumber][columnNumber], 0xFF);
18             }
19 
20             LED_STB = 0;                                              //锁存列信号
21             LED_STB = 1;
22         }
23             
24         for(rowNumber=0; rowNumber<16; rowNumber++)                   //写入下半屏的显示内容
25         {
26               SetRowLight(rowNumber);                                 //行信号选择
27                                                                     
28             for(columnNumber=0; columnNumber<8; columnNumber++)       //写入列信号数据
29             {
30                 Write1ByteToLowerHalfScreen(0xFF, LowerHalfScreenArray[rowNumber][columnNumber]);    
31             }
32                                                                    
33             LED_STB = 0;                                              //锁存列信号
34             LED_STB = 1;
35         }                
36     }
37 }

其中,函数SetRowLight()用于控制行信号的选择;函数Write1ByteToFirstHalfScreen()用于向上半屏写入列信号数据;函数Write1ByteToLowerHalfScreen()用于向下半屏写入列信号数据,二维数组FirstHalfScreenArray[16][8]和LowerHalfScreenArray[16][8]分别用于存储列信号数据,该数据可以通过汉字图形取模软件得到。

编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6011

    文章

    44168

    浏览量

    624526
  • LED显示屏
    +关注

    关注

    35

    文章

    1742

    浏览量

    98134
  • GPIO
    +关注

    关注

    16

    文章

    1152

    浏览量

    50980
  • danpianji
    +关注

    关注

    0

    文章

    7

    浏览量

    2924
收藏 人收藏

    评论

    相关推荐

    单片机驱动控制TFT真彩色液晶控制程序

    单片机驱动控制TFT真彩色液晶控制程序
    发表于 09-28 11:41

    彩色led显示屏fpga控制程序

    多年前做的设计,实现led全彩色显示屏控制。给同行参考设计原理还可以,工程接口做的不好,不太灵活。
    发表于 03-16 19:01

    led显示屏驱动电路

    led显示屏驱动电路(图1 ) LED显示
    发表于 07-08 11:25 1.3w次阅读
    <b class='flag-5'>led</b><b class='flag-5'>显示屏</b><b class='flag-5'>驱动</b>电路

    基于VHDL的显示屏控制电路

    本文介绍了用硬件描述语言 VHDL 设计显示屏控制电路的方法,此方法设计的控制电路达到了简化系统总体结构、扩大应用范围,并易于编制控制程序的目的。
    发表于 07-13 17:50 161次下载
    基于VHDL的<b class='flag-5'>显示屏</b><b class='flag-5'>控制</b>电路

    单片机按键控制程序【汇编版】

    单片机按键控制程序【汇编版】单片机按键控制程序【汇编版】单片机按键控制程序【汇编版】单片机按键控制程序【汇编版】
    发表于 12-29 11:04 0次下载

    多舵机控制程序

    多舵机控制程序
    发表于 03-21 15:43 12次下载

    单片机驱动控制TFT真彩色液晶控制程序

    另一种TFT液晶控制程序参考应用测试等。
    发表于 05-06 16:09 63次下载

    步进电机控制程序液晶显示程序

    步进电机控制程序液晶显示程序,快来学习吧。
    发表于 05-12 16:25 33次下载

    PLC控制LED灯数码显示控制程序

    PLC控制LED灯数码显示控制程序,初次来到此地,请多关照。
    发表于 05-19 14:31 0次下载

    基于WinCE通知API的解析及在控制程序中的应用

    基于WinCE通知API的解析及在控制程序中的应用
    发表于 10-25 09:42 3次下载
    基于WinCE通知API的<b class='flag-5'>解析</b>及在<b class='flag-5'>控制程序</b>中的应用

    LED显示屏控制系统的设计与整体分析

    的画面及视频显示信息,置入帧存储器,按分区驱动方式生成LED显示屏所能识别的串行显示数据和扫描控制
    发表于 11-03 16:12 25次下载
    <b class='flag-5'>LED</b><b class='flag-5'>显示屏</b><b class='flag-5'>控制</b>系统的设计与整体分析

    led显示屏控制软件有哪些_九个led显示屏控制软件介绍

    本文开始介绍了LED显示屏控制系统的相关概念,其次阐述了LED显示屏控制系统分类,最后介绍了九大
    的头像 发表于 03-21 16:42 20.1w次阅读

    LED显示屏控制卡有哪些分类_如何选择LED显示屏控制卡?

    LED显示屏控制卡是LED图文显示屏的核心部件,负责接收来自计算机串行口的画面显示信息,置入帧存
    的头像 发表于 07-28 10:37 1.9w次阅读

    浅谈LED显示屏控制系统

    LED显示屏控制系统(LED Display Control System),又称LED显示屏
    的头像 发表于 07-24 14:55 1869次阅读

    Led显示屏控制系统怎么使用 led显示屏控制器怎么设置

    Led显示屏控制系统是一种用于控制LED显示屏的硬件设备,通过它可以实现对
    的头像 发表于 02-03 14:03 3605次阅读