历史上的今天
返回首页

历史上的今天

今天是:2025年01月22日(星期三)

正在发生

2018年01月22日 | 单片机LED显示驱动

2018-01-22 来源:eefocus

LED(lite EMIt diode)显示是项目开发中经常遇到的一种显示方法,其具有亮度高、全视角、使用寿命长、驱动简单等特点,因而在一些高端和大型的器材和设备上使用较为广泛。下面就常用的led显示及驱动方法作一说明:


led:本文所说的led主要是指下列几种:


l          7-段数码led,分共阴和共阳两种,原理图见1和2;




l          常用nxm led点阵:如8x8 led 点阵模块、5x7 led点阵模块等,其也分为共阴和共阳两种;


l          单个led管。

 

 

 


   所谓共阴极,即是将所有led的阴极连接到一起,而共阳极则相反,所有的阳极被连接到了一起。但不管哪种结构,其显示设计的原理基本相同,唯一的是其驱动的电路的设计有所差异,一般共阴极采用推(push)电流的方式来驱动,而共阳极结构则采用拉(pull)电流的方式来驱动。


    根据led显示的硬件设计方法的不同,led显示驱动分为静态法和动态法两大类,其具体的说明和编程方法分述如下:


1.     静态显示驱动法:


  所谓静态显示驱动法,即是指每一个led灯分别对应一个独立的io驱动口;其点亮和关闭由该io来对其进行控制,互不干扰,见图3(注:对于io驱动能力弱的mcu,必须增加外部的驱动芯片或驱动三极管等器件)。此种设计一般应用在对单个led的驱动或led数量较少,且所选的mcu io比较充裕的情况下。比如一些项目的led指示灯、产品的设计中只有一个7-段led码需要显示等。


  由于每一个led均由独立的io口来控制,因此此种显示驱动的软件设计比较简单明了,无需特别的处理,在需要点亮和关闭时设置相应的io输出口的电平即可(即“0”或“1”,具体须根据驱动电路的设计来决定)。


              

 图 3


优点:电路设计简单,编程简单,而且led的亮度控制容易,只需在驱动端增加相应的电流调节电阻即可方便地实现亮度的调节(对于存在独立驱动的设计,还可以通过调整驱动电压来达到亮度的调节)。


缺点:由于每一个led灯需要一个io口,因此对io口的需求较大,不易实现大数量的led驱动和显示,扩展性能差。


2.     动态的显示驱动法:

    与静态显示方法不同,动态led显示的设计方法是将不同led模块的所有的led的驱动端一对一地连接到一起,见图4,而将其公共极(阴极或阳极)分别由不同的io口来驱动(主要针对7-段码和led点阵模块)。在此,我们称其公共极为扫描线或地址线(因此种连接方法类似于存储器的内部连接,每个led点相当与memory中的一个bit),不同的led模块(类似于memory中的一个byte)用不同的扫描线地址线来进行选定。 

图 4


图4


由于所有的led模块公用了驱动端,因此led的驱动不再像静态法一样为每个led所独享,因此其驱动的设计方法也与静态法完全不同,需要采用分时扫描(也称动态扫描)方法来实现对所有led的显示驱动,其原理如下(以图4为例):


a.  将a0设置为高电平,也即允许第一组led显示,同时将a2,a3,a4设置为低电平,也即关闭该阴极所对应的led组的显示;


b.  在p0口输出a0组对应的显示数据(也称为pattern),如字符点阵数据,7-段码对应的数字的数据等,该数据可以通过rom表的形式来预先定义;


c.  保持一定的时间t,该时间即为所设定定时器的中断时间;


d.  将a0口设置为低电平,关闭a0组led的显示;


e.  将a1设置为高电平,其他几个设置为低电平,开启a1组对应的led的显示;


f.  在p0口输出a1组对应的显示数据(也称为pattern,意义同上);


g.  重复以上步骤,直到所有组被扫描一遍,然后又从a0组开始下一个循环,如此周而复始,实现所有led的动态显示。

1.该方法的原理利用了人眼对物体的视觉延迟来达到所有led的同时显示,实际上,在每一个时刻,只有一组led是处于显示的状态,而其他led组均为关闭状态。理论上,若两次显示之间的时间间隔小于32ms时,人眼即无法分辨,因此,为了达到此要求,led的扫描频率一般可按照下式计算得出:


f = 32 * n


式中,


 f为扫描的频率,对应为定时器的定时时间(t=1/f);


 32 则是由32ms换算而来,32ms对应的频率刚好为 32Hz;


 n则是总的led的组数(此例中为n=4)。


根据此式算出的扫描频率f实际上是led 驱动扫描的最小频率,若低于此频率,则有可能导致led的闪烁。当然,f也不可能越高越好,扫描的频率太高,相对而言,每一组led的点亮的时间就越短,因此有可能导致led的亮度不够或显示效果不理想等一些问题。当然提高led的驱动电压也可以弥补由此造成的亮度不够的问题。


在此例中,由公式可知其扫描的频率应大于等于128hz,则较为理想。


2. mcu程序的实现:


a.  模块的划分:


  在说明其编程之前,先说明一下模块化编程思想在led驱动设计中的应用。为了使程序的结构清晰和维护的便利,特别是为了使程序的移植等变得可行,在程序的设计过程中应尽可能地采用模块化的设计思想,对于复杂的程序结构和功能的实现,更应该在编程之前理顺其相互之间的关系,划分好各功能模块所应完成的功能,定义好各模块之间的数据接口和相互关系。

  一般而言,显示部分所涉及到的内容和功能相对较广,比如按键的变化、系统状态的变化、数据的变化等均需在显示的结果上表现出来。因此,为了保证不同的模块之间的独立性,我们将与led显示的有关的功能进行如下的划分:

1.扫描驱动模块:此模块的功能只完成对所有led的扫描,而不关心所显示的数据的具体变化情况,其从固定的显示缓冲其中提取每一扫描地址所对应的数据,该对应关系是固定的,由程序设计时来设定。该实现的方法类似与pc机中crt的显示驱动和显示缓冲;

2.字符、点阵发生器:由于实际的数据与显示的数据(pattern)之间并非是相同的,因此,需要将实际的数据转化成能够显示的数据。例如在mcu中的各种计算的数据是以bcd码或二进制码的形式来表示的,需要将其转化成7-段码或nxn点阵的pattern数据进行显示;

3. 显示缓冲刷新和处理模块:该模块的功能是接受诸如按键、系统状态变化、数据变化所引起的显示数据的变化。其需要调用到字符、点阵发生器来完成显示缓冲的刷新,其与按键、系统状态变化等之间的接口是采用消息的机制来实现。该模块一般需要根据不同的显示内容来进行分类,比如在跑步机的设计中,可以划分为如下的内容:距离、速度、时间、能量消耗、心率及其他相关的数据。 


b.  程序架构和实现


1. 扫描模块的实现:由于led的扫描驱动是一个重复的不间断的过程,自然,定时中断是最好的实现方法,其流程如图6所示,其中bufFPt用于指向当前的显示缓冲区,ai则为当前所需显示的led组的地址编号,从0到n(n为总的led组数);


2. 刷新模块的实现:在mcu的程序设计中,一般将此模块置于16hz的定时中断中(若主程序的循环周期不固定且最大的循环时间大于1/10秒时,常采用此架构)或主程序循环体中(此种情况主要时针对mcu时钟比较高的场合或不需考虑显示延时的情况下),通过检测对应的消息来决定其是否需要执行数据的刷新。以跑步机的设计为例,其功能流程如图7所示;

3. 字符、点阵发生器:由于在一些实际的应用中,可能的显示内容原则上是可预知的和有限的,特别是汉字的显示,因此其主要是通过定义相应的点阵来保存各种需要显示数据。为了便于程序的设计,一般需将其按照一定的排列规则来进行定义,同时也需要为各个需要显示的字符和图符进行编码,编码的规则必须有利于程序的设计和提高代码的效率,以求能够采用统一的查表指令来实现。 

 

图6


注:上述的流程只是一个原理性的程序说明,在实际的应用中,需要根据mcu的特点及具体的硬件设计来进行程序的设计与简化。比如:在实际的项目中有8x8(或小于8x8)个led需要驱动,而且所选的mcu又是8位或16位的,则此时的地址线的扫描将变得非常的简单,只要建立字节变量ai,其初始值为0x01,然后在每次中断处理程序中需将ai直接输出到led扫描线所对应的io口即可,随后将ai左移一位,对8x8 led情况,当ai=0时,表示一遍扫描完成,此时再将ai设为0x01即可。对于显示的缓冲区的分配,同样可以根据实际的软件设计来分配具体的ram地址空间,以进一步提高程序的执行效率。记住,由于led的扫描需要占用较多的mcu时间,因此在进行扫描驱动的程序设计时,需要尽可能采用简洁高效的代码,以便提高mcu的工作效率。举例来说,假如需驱动8x8 led,根据前面所讲的要求,所需的定时器的中断频率必须是大于等于8x32,即256hz,若在此驱动代码中多增加一条语句,则mcu每秒就需要多执行256条代码,由此可见高效的代码对于led驱动程序来讲是多么重要,特别是当mcu的时钟不够快时!


推荐阅读

史海拾趣

ENERGIZER公司的发展小趣事

随着环保意识的日益增强,ENERGIZER也积极响应环保号召,致力于研发更环保的电池产品。1988年,公司发明了无汞环保碱性电池,这一创新性的产品不仅性能优良,而且对环境友好,受到了消费者的广泛欢迎。同时,ENERGIZER还积极推广电池回收和再利用的理念,倡导绿色消费,为全球的环保事业做出了积极贡献。

ACEINNA公司的发展小趣事

为了配合全球业务的发展,ENERGIZER在亚太地区设立了8个厂房和18个国家的办事处。其中,劲量(中国)有限公司于1992年开始进驻中国,并在1998年在天津设立了生产工厂。这一举措不仅促进了中国与国际间的技术交流与合作,还为中国的电池制造业带来了新的发展机遇。随着中国市场的不断扩大,ENERGIZER在中国的业务也逐渐壮大,成为了中国电池市场的重要参与者。

Filtran Ltd公司的发展小趣事

面对日益严峻的环保压力,Filtran Ltd积极响应可持续发展号召,将环保理念融入产品设计中。公司研发出了一系列绿色滤波器产品,采用可回收材料制造,并在生产过程中减少能源消耗和废弃物排放。这些环保产品不仅满足了市场对高性能滤波器的需求,还赢得了客户的广泛赞誉和信任。Filtran Ltd因此成为了电子行业环保实践的典范。

创世(CS)公司的发展小趣事

在电子行业中,品质控制和质量管理是企业生存和发展的关键。创世公司深知这一点,始终将品质放在首位。公司建立了严格的质量管理体系,从原材料采购到生产制造、产品检测等各个环节都严格把控品质。同时,创世公司还引进了先进的生产设备和检测仪器,确保产品的可靠性和稳定性。这种对品质的执着追求使得创世公司的产品在市场上获得了良好的口碑和广泛的认可。

DFI公司的发展小趣事

近年来,随着智能医疗和金融科技等新兴领域的兴起,DFI看到了新的发展机遇。公司开始将这些领域作为重点发展方向,投入大量资源进行研发和创新。通过与合作伙伴的紧密合作,DFI成功推出了一系列具有创新性的智能医疗和金融科技产品。这些产品不仅为客户提供了更便捷、更高效的服务体验,也为DFI带来了新的增长点。随着这些新兴领域的不断发展壮大,DFI有望在未来实现更大的突破和发展。

请注意,以上故事均为虚构,旨在展示DFI公司可能的发展历程和业务活动。实际情况可能有所不同,具体信息请参考DFI公司的官方资料。

华润华晶公司的发展小趣事

在稳固了国内市场地位后,DFI开始将目光投向全球市场。公司积极开拓北美、拉丁美洲和亚太地区的业务,通过参加国际展会、与当地企业建立合作关系等方式,不断提升品牌知名度和市场份额。同时,DFI还针对不同地区的市场需求,推出定制化的产品和服务,以满足客户的多样化需求。这一全球化战略使DFI在国际市场上取得了显著的成绩。

问答坊 | AI 解惑

Microsoft内部关于WinCE培训资料

Microsoft内部关于WinCE培训资料 …

查看全部问答>

pic代理

pic代理 禾琦商贸(原立奇国际)为Microchip全系列产品授权代理。公司于2002年获得Microchip(美国微芯公司)年度杰出服务奖。禾琦商贸亚洲区最大的代理商,全球前五大代理商之一。总年度营业额超过十亿美金。 公司具多位研发出身的专职应用工程 ...…

查看全部问答>

挑战史上最全UART驱动,哈哈。。。。

zhaojun_xf 同学写了个史上最全uart实验,但是却遇到了spritf的问题,偶要挑战之,哈哈!!为什么会出这个问题呢?因为内存不够用啦。那怎么办呢? 重写sprintf函数嘛?怎么重写呢?google or baidu 嘛。。。。。。。。。哈哈,以下程序参考printf- ...…

查看全部问答>

WinCE 屏保(屏幕关闭后显示一幅图片或一个功能)是怎么做的?

WinCE 屏保(屏幕关闭后显示一幅图片或一个功能)是怎么做的? …

查看全部问答>

PDA没有rs232

大家好 我的PDA没有rs232,请问怎样通过C#程序控制串口?…

查看全部问答>

急!~在EVC4下如何断点续传

VC下看到过例子但是移植过来函数都不认识,请问在EVC4 下如何写断点续传。 谁有做过这方面的例子,希望给小弟参考下~ …

查看全部问答>

紧急求助PCB布线的各位大虾!

急聘:高级布线(PCB layout)工程师   工作职责: 从事通信产品的PCB设计、仿真工作。   职位要求: 1)电子、无线电、通信或相关专业本科以上学历; 2)2年以上相关产品PCB设计开发经验; 3)熟练掌握一种或一种以上(Mentor, ...…

查看全部问答>

晒晒我30分钟的果实。洞洞版本的12864+18B20+1302红外遥控带闹钟万年历源程序

12864+18B20+1302万年历源程序 芯片我用的是STC89C58BD,其他的芯片没试验,请验证, /*定义DS18B20数据线*/ sbit DQ = P1^4; //定义DS1302时钟接口 sbit clock_clk = P3 ^4;//ds1302_clk(时钟线) sbit clock_dat = P3 ^5;//ds1302_dat(数 ...…

查看全部问答>

MSP430fr5739扩展FLASH(W25X16)

跪求帮助,小弟我遇到难题,我不知MSP430fr5739与扩展FLASH(W25X16)之间是怎么搞的,有没有哪位大侠有相关的程序,麻烦发到benbenming@sian.cn,谢谢…

查看全部问答>

求大神帮忙,msp430f149的编程问题

我们的课程设计要求设计一个医用秒表计时器,要求如下 1)医用高精度计时秒表 精度达0.001 启动按钮、暂停按钮及清零按钮 设计每到一秒钟有声音提醒功能,可通过按钮打开及关闭该提醒音 可记录3次或3次以上数据(分别显示或一起显示均可) 硬 ...…

查看全部问答>