显示资料.docx
- 文档编号:25821537
- 上传时间:2023-06-15
- 格式:DOCX
- 页数:14
- 大小:193.80KB
显示资料.docx
《显示资料.docx》由会员分享,可在线阅读,更多相关《显示资料.docx(14页珍藏版)》请在冰豆网上搜索。
显示资料
近年来,单片机系统以其体积小、功能强、扩展灵活、使用方便等优点,逐渐渗透到各行业的工程实际应用中。
而LED显示电路就像单片机系统的眼睛,实时地向人们传递着系统工作的各种状态信息和处理结果。
因此,高效、方便的LED显示驱动电路是构成完善的单片机系统必不可少的元素。
常用的LED显示驱动电路有并行译码方式、串行—并行转换方式、显示驱动接口芯片方式等。
并行译码显示方式
图1为单片机89C2051输出显示的一个例子,4位BCD码数据从其P1.0~P1.3并行输出,经7段LED显示驱动电路CD4511译码后驱动LED显示,这样只需向P1.0~P1.3写入欲显示数字的BCD码,即可显示出相应的数字。
这种方式虽然简单,但占用单片机口线较多,资源利用率低,因此不常采用。
图1 并行译码显示方式
串行-并行转换方式
图2所示为89C2051的串口驱动数码管的电路,其中串口工作在方式0,74LS164是8位串入并出移位寄存器,负责将RXD输出的串行数据转换成并行信号。
显然,这种方式显示同样的位数使用单片机的口线大大减少,并且可以让LED显示BCD码以外的字符(如A、B、C、D等),但是,当要显示的位数较多时,仍需占用较多的口线,并且在许多情况下需要串口工作在UART方式,以便进行串行通信,从而限制了这种方式的使用范围。
LED显示驱动芯片
随着单片机技术的发展,许多公司都推出了专用LED显示驱动芯片,如Microchip公司的AY0438、Maxim公司的MAX7219等都是其中的典型代表。
下面以MAX7219为例说明LED显示驱动芯片在单片机系统中的应用。
MAX7219简介
MAX7219是Maxim公司推出的8位LED串行显示驱动器,它采用3线串口传送数据,占用资源少且硬件简单,只需一个外部电阻即可方便地调节LED的亮度;可灵活地选择显示器的个数(1~8个,级联可成倍增加);可进行译码或不译码显示;内含硬件动态扫描控制,可设置低功耗停机方式。
引脚功能和工作原理
MAX7219采用24脚双列直插式封装,其引脚如图3所示。
SEGA~SEGG和DP分别为LED七段驱动器线和小数点线,供给显示器源电流;DIG0~DIG7为8位数字驱动线,输出位选信号,从每位LED共阴极吸入电流。
图3MAX7219引脚功能
DIN是串行数据输入端。
在CLK的上升沿,一位数据被加载到内部16位移位寄存器中,CLK最高频率可达10MHz,在输入时钟的每个上升沿均有一位数据由DIN端移入到内部寄存器中;LOAD用来装载数据,在LOAD的上升沿,16位串行数据被锁存到数据或控制寄存器中,LOAD必须在第16个时钟上升沿的同时或之后、在下一个时钟上升沿之前变高,否则数据将被丢失。
每组数据为16位二进制数据包,其格式如表1所示。
其中D15~D12位不用,D11~D8位为内部5个控制寄存器和8个LED显示数据寄存器的地址,D7~D0位为5个控制寄存器和8个LED数码管待显示的数据,因为控制寄存器与显示数据寄存器独立编址,所以可以通过程序对每个寄存器进行操作。
一般情况下,程序先送控制命令,后向显示寄存器送数据,每16位为一组,从高位地址字节最高位开始送,直到低位数据字节最后一位。
MAX7219内部有14个可寻址的控制字寄存器,各寄存器的功能及地址如表2所示。
其中,地址×0H为空操作寄存器,允许数据从输入到输出直接通过,可用于设备串接。
地址×1H~×8H为显示RAM区,分别对应DIG0~DIG7引脚的8位LED显示数据。
地址×9H为译码模式寄存器,其8位二进制数分别控制着8个LED显示器的译码模式,逻辑高电平时选择硬件译码(BCD-B码译码),译码器选择数据寄存器中的低4位(D3~D0)进行BCD-B码译码,×0H~×9H对应BCD码字符0~9,而×AH~×FH分别对应B码字符-、E、H、L、P及消隐,D4~D6无效,D7单独控制小数点;译码模式寄存器为逻辑低电平时选择软件译码,数据D6~D0分别对应LED显示器的A~G段,D7对应小数点DP。
地址×AH为显示亮度寄存器,通过对该寄存器的D0~D3位写入不同的数值可实现对LED显示亮度的控制,从00H到0FH共16级可调。
地址×BH为扫描界限寄存器,其D0~D3位数值设定为00H~07H,表示显示器动态扫描个数为1~8。
地址×CH为停机寄存器,当其D0位为0时,MAX7219处于停机状态,扫描振荡器停振,所有显示器消隐,寄存器数据保持不变;当D0为1时,正常工作。
地址×FH为显示测试寄存器,当其D0位为0时,正常工作;当D0为1时处于测试状态,全部LED显示器的所有字段都以最大亮度接通显示。
应用举例
图4为MAX7219的位LED显示电路实例。
图4中,单片机89C2051的P1.0、P1.1分别接MAX7219的串行数据输入端DIN和时钟信号CLK,P1.2作为LOAD信号。
电阻R根据不同的LED选值,范围在7KΩ~60KΩ之间。
图4 MAX7219应用电路
结语
通过以上对比,并行译码方式电路最简单,但是资源利用率低,因此并不常用,串行-并行转换方式在小型系统中应用具有很强的优势,但随着单片机应用系统的发展,很多复杂系统中都采用了专用显示驱动芯片。
从上述应用实例可以看出,使用MAX7219后,系统硬件结构简洁、程序流程清晰、控制灵活方便,应用于仪器仪表、医疗设备及智能家电等领域,可省去很多锁存器、译码器及驱动器,大大提高显示部分的集成程度,因此这种显示驱动方式在单片机系统设计中有着广阔的应用前景。
图2 并行译码显示方式
动静显示
所谓共阴极,即是将所有led的阴极连接到一起,而共阳极则相反,所有的阳极被连接到了一起。
但不管哪种结构,其显示设计的原理基本相同,唯一的是其驱动的电路的设计有所差异,一般共阴极采用推(push)电流的方式来驱动,而共阳极结构则采用拉(pull)电流的方式来驱动。
根据led显示的硬件设计方法的不同,led显示驱动分为静态法和动态法两大类,其具体的说明和编程方法分述如下:
1. 静态显示驱动法:
所谓静态显示驱动法,即是指每一个led灯分别对应一个独立的io驱动口;其点亮和关闭由该io来对其进行控制,互不干扰,见图3(注:
对于io驱动能力弱的mcu,必须增加外部的驱动芯片或驱动三极管等器件)。
此种设计一般应用在对单个led的驱动或led数量较少,且所选的mcuio比较充裕的情况下。
比如一些项目的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组数);
单片机驱动LED的静态显示和动态显示简介
单片机驱动LED显示有很多方法,按显示方式可以分为静态显示和动态显示。
静态显示就是显示驱动电路具有输出锁存功能,单片机将要显示的数据送出后就不再控制LED,直到下一次显示时再传送一次新的数据。
只要当前显示的数据没有变化,就无须理睬数码显示管。
静态显示的数据稳定,占用的CPU时间少。
静态显示中,每一个显示器都要占用单独具有琐存功能的I/O口,该接口用于笔画段字型代码。
这样单片机只要把显示的字型数据代码发送到接口电路,该字段就可以显示要发送的字型。
要显示新的数据时,单片机再发送新的字型码。
另一种方法是动态扫描显示。
动态扫描方法是用其接口电路把所有显示器的8个笔画字段(a~g和dp)同名端连在一起,而每一个显示器的公共极COM各自独立接受I/O线控制。
CPU向字段输出端口输出字型码时,所有显示器接受相同的字型码,但究竟使那一位则由I/O线决定。
动态扫描用分时的方法轮流控制每个显示器的COM端,使每个显示器轮流电亮。
在轮流点亮过程中,每位显示器的点亮时间极为短暂,但由于人的视觉暂留现象及发光二极管的余辉效应,给人的印象就是一组稳定的显示数据。
单片机驱动LED数码管显示
用单片机驱动LED数码管有很多方法,按显示方式分,有静态显示和动态(扫描)显示,按译码方式可分硬件译码和软件译码之分。
静态显示就是显示驱动电路具有输出锁存功能,单片机将所要显示的数据,显示数据稳定,占用很少的CPU时间。
动态显示需要CPU时刻对显示器件进行数据刷新,显示数据有闪烁感,占用的CPU时间多。
这两种显示方式各有利弊;静态显示虽然数据稳定,占用很少的CPU时间,但每个显示单元都需要单独的显示驱动电路,使用的硬件较多;
动态显示虽然有闪烁感,占用的CPU时间多,但使用的硬件少,能节省线路板空间。
硬件译码就是显示的段码完全由硬件完成,CPU只要送出标准的BCD码即可,硬件接线有一定标准。
软件译码是用软件来完成硬件的功能,硬件简单,接线灵活,显示段码完全由软件来处理,是目前常用的显示驱动方式。
比较常用的显示驱动芯片有:
74LS164,CD4094+ULN2003(2803),74HC595+ULN2003(2803),TPIC6B595,AMT9095B,AMT9595等许多。
另外,市场上还有一些专用的LED扫描驱动显示模块如MAX7219等,功能很强,价格稍高一些。
下面是一个用74LS164驱动显示的例子和一个用4094扫描驱动显示的例子:
上例图中加了一个PNP型的三极管来控制数码管的电源,是因为164没有数据锁存端,数据在传送过程中,对输出端来说是透明的,这样,数据在传送过程中,数码管上有闪动现象,驱动的位数越多,闪动现象越明显。
为了消除这种现象,在数据传送过程中,关闭三极管使数码管没电不显示,数据传送完后立刻使三极管导通,这样就实现锁存功能。
这种办法可驱动十几个164显示而没有闪动现象。
这个例子是用4094做位选,用89C2051的P1口线做段驱动来扫描驱动9位数码管的显示。
由于4094只有8个输出口线,其中第九位是用CPU口线直接进行位选的。
9个LED的所有
相同位置的段口线都接到一起,然后接到单片机的一个口线上,供八段,使用8条CPU口线。
其软件的工作过程是这样的:
要在LED上显示1--9位数,首先将1的段码送到P1口线上,然后向4094送位选数据01,使4094的Q1口线输出高电平,选中第一位数码管,使阳极得电,在第一位上就显示出1,重复上述过程,一直到第九位,然后不断重复这一过程,就实现了扫描显示。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 显示 资料