|
作者:sword__yang
VFD(Vacuum Fluorescent Display),通常也称为“真空荧光显示屏”。VFD是从真空管发展而来的显示元件,利用阳极上荧光体受电子的冲击而发光,是一种自发光显示元件。由于它易于做多色彩显示,又可以用低电压来驱动,所以,与半导体有较好的相容性,可靠性也高,所以被广泛应用在家用电器、办公自动化设备、工业仪器仪表及汽车等各种领域中。
VFD根据显示内容可分为:数字显示、字符显示、图案显示、点阵显示;根据驱动方式可分为:静态驱动(直流)和动态驱动(脉冲)。
和别的显示器件相比,VFD具有如下特点:
1)由于VFD为自发光元素,因此,与其它显示器件相比,具有更广阔的视野角以及更鲜明的显示效果。
2)显示部分的图案及文字均可自由设计。
3)可实现多色化显示。
4)由于VFD是在真空环境下进行驱动,因此,其对应用环境具有强的适应性、可靠性也较高、使用寿命长。动作温度范围较广,特别适用于车载显示。
5)动作电压低,易于驱动。
VFD的基本工作原理:
普通的VFD是三极管结构的电子管,至少在一个方向可以看到透明的真空容器内,置有灯丝(直热式氧化物阴极)、栅极(栅网)以及阳极(涂覆有显示图形的荧光粉的导体)等基本电极,还置有各种金属零部件,及通过厚膜或薄膜技术形成的膜层等。灯丝加热后,通过栅极控制飞向阳极的电子束,从而可以控制各个笔划、点阵像素的亮与灭。由于VFD的笔画、像素段比较多,目前都是通过专用的集成电路来驱动这些显示屏,也有把驱动芯片和VFD显示屏封装在一起的模块。
以下我们以三星的NHVC11SS40 VFD荧光显示屏以及NEC的VFD专用驱动芯片uPD16311为例,介绍如何用MCU来控制这个VFD屏的显示。
NHVC11SS40 的结构见图II-3.0 , 整个屏幕划分为11个栅极区(1G~11G), 每个栅极区下又分布有15个阳极笔画段(P1~P15),整个显示器的灯丝是共用的(图中未画出),用~4.1V交流供电。
(原文件名:1.jpg)
(原文件名:2.jpg)
(原文件名:3.jpg)
控制芯片uPD16311是一个1/8~1/16 DUTY 扫描的VFD控制器(共有52脚),它有12条固定段码驱动(阳极)驱动输出,8条固定的栅极驱动输出,另外还有8条可编程的段码/栅极驱动输出,可以灵活地自定义该输出是用作段码还是栅极,这样就使得芯片有很高的灵活性。芯片还包括了显示存储器、控制单元、键扫描电路、附加的LED发光管驱动电路。通过4线的SPI总线和外部的MCU接口,它的功能方框图见图II-3.1。
uPD16311芯片特点:
*多显示模式 ( 12段+16位至20段+8位数字)
*按键扫描 ( 4X12矩阵)
*亮度调节电路(八个亮度级)
*高电压输出 (VDD-35V 最大)
*LED驱动口 (5通道, 20毫安最大)
*通用开关输入(4位)
*内部下拉输出(P沟道开漏+下拉电阻输出)
*SPI串行接口 (CLK, STB, DIN, DOUT)
可见16311是一个功能比较多,接口比较复杂的芯片,要掌握它的编程使用,我们还得有点耐心才行。
1)显示数据寄存器(见图II-3.2):
这里对应的地址是映射到VFD各个笔画段的,数据的每一个BIT,都对应了一个笔画或者预设的字符(如显示区上面那些“DVD/VCD”等),往这些寄存器里送数,就激活了相应的笔画,显示出我们需要的字符。因为不同的VFD有不同的段码结构,具体往寄存器送的数据,必须是符合其笔画构成的段码,这样才能保证显示出正确的字符来。在例程中我们会给出相对应于显示器NHVC11SS40的段码。
2)按键矩阵和键值RAM
16311巧妙地利用了12个SEGMENT段码的扫描和四条输入引脚(Pin10~13)构成了最多48键的键矩阵,当某一个键按下时,在相应的键值RAM里面就会存储下这个状态,利用读指令就可以把键值读出。
3)LED端口:
芯片有五个LED输出端口(Pin46~50),我们通过把相应的数据写入LDE寄存器时,就可以控制这些LED的亮/灭,上电复位时LED处于熄灭状态。
4)开关状态读取:
芯片有4个开关输入端口(Pin1~4),可以把外部开关的通断状态存储到内部开关寄存器,MCU通过总线就可以读出这些状态。
本来,按键、LED输出、开关这些外围器件,都可以直接通过MCU的I/O端口来实现的,但是利用SPI总线对16311的通信控制,就完成这些功能,相当于扩展了MCU的引脚,而且像按键防抖动处理等,都已经由16311实现了,也大大节省了MCU的资源。
5)控制命令:
a)显示模式命令:
用来改变显示模式,分配不同的显示位(Grid)和段码(Segmengt)的组合。
b)数据设置指令:
用来设置读出或者写入显示、按键、开关、LED等数据。
c)地址设置指令:
用来设置显示区RAM的写入地址。
d)显示控制指令:
用来开关显示屏,以及调整屏幕亮度(共有8级亮度调整)。
详细的命令请参见我们在例程中的注释。下面给出用uPD16311驱动NHVC11SS40 VFD荧光数码屏的MCU例程:
【说明】:
我们只利用了NHVC11SS40 VFD的“米字”段(共10个字符位),上面的固定字符不用。每个位需要显示的字符变量为WORxH和WORxL,共有10个位。
;===========================================
DISPLAY_SEND:
BSF STATUS,RP0 ; 设置PIC16F873A的SPI模式
BCF SSPSTAT,CKE
BCF STATUS,RP0
BSF SSPCON,CKP
BCF PORTC,VFD_EN ; 16311 片选有效(低电平有效)
MOVLW 0XD0 ; 发送显示模式命令:设置12 dig, 16 seg NHVC11SS40 有11 dig, 14 seg.
CALL spi_tx ; 调用SPI发送子程序
BSF PORTC,VFD_EN ; 片选上拉,完成一次传送
NOP ; 在16311的通信数据流中,是最低位在前,所以命令要颠倒过来。
NOP
BCF PORTC,VFD_EN ; 片选有效
MOVLW 0X02 ; 发送数据设置命令:写数据到显示RAM/地址递增/普通操作
CALL spi_tx ; 调用SPI发送子程序
BSF PORTC,VFD_EN ; 片选上拉,完成一次传送
NOP
NOP
BCF PORTC,VFD_EN ; 片选有效
MOVLW 0X03 ; 发送地址设置命令:以下数据写到显示RAM的00地址
CALL spi_tx ; 调用SPI发送子程序
MOVF WOR1H,0 ; 写DIG 1 数据高字节
CALL spi_tx ; 调用SPI发送子程序
MOVF WOR1L,0 ; 写DIG 1数据低字节,完成第1个字的显示
CALL spi_tx ; 调用SPI发送子程序
MOVLW .0 ; 写一个无用的数据填充SEGMENGT17~20 RAM区,以便地址递增
CALL spi_tx
MOVF WOR2H,0
CALL spi_tx
MOVF WOR2L,0
CALL spi_tx ; 完成第2个字的显示, 其余相同
MOVLW .0
CALL spi_tx
MOVF WOR3H,0
CALL spi_tx
MOVF WOR3L,0
CALL spi_tx ; 完成第3个字的显示
MOVLW .0
CALL spi_tx
MOVF WOR4H,0
CALL spi_tx
MOVF WOR4L,0
CALL spi_tx ; 完成第4个字的显示
MOVLW .0
CALL spi_tx
MOVF WOR5H,0
CALL spi_tx
MOVF WOR5L,0
CALL spi_tx ; 完成第5个字的显示
MOVLW .0
CALL spi_tx
MOVF WOR6H,0
CALL spi_tx
MOVF WOR6L,0
CALL spi_tx ; 完成第6个字的显示
MOVLW .0
CALL spi_tx
MOVF WOR7H,0
CALL spi_tx
MOVF WOR7L,0
CALL spi_tx ; 完成第7个字的显示
MOVLW .0
CALL spi_tx
MOVF WOR8H,0
CALL spi_tx
MOVF WOR8L,0
CALL spi_tx ; 完成第8个字的显示
MOVLW .0
CALL spi_tx
MOVF WOR9H,0
CALL spi_tx
MOVF WOR9L,0
CALL spi_tx ; 完成第9个字的显示
MOVLW .0
CALL spi_tx
MOVF WOR10H,0
CALL spi_tx
MOVF WOR10L,0
CALL spi_tx ; 完成第10个字的显示,所有字的显示完成
MOVLW .0
CALL spi_tx
BSF PORTC,VFD_EN
NOP
NOP
WR_D4:
BCF PORTC,VFD_EN
MOVLW 0X31 ; 显示控制命令:开VFD,亮度调节在 11/16 脉冲宽度
WR_D5:
NOP
NOP
CALL spi_tx
BSF PORTC,VFD_EN
RETURN ; 返回
;================================================ |
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|