搜索
bottom↓
回复: 8

【开源项目】单片机在音响上的应用(三):荧光显示VFD、按键控制

[复制链接]

出0入0汤圆

发表于 2010-8-27 09:29:59 | 显示全部楼层 |阅读模式
作者: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来反美的!

出0入0汤圆

发表于 2010-12-3 21:02:21 | 显示全部楼层
小菜鸟弱弱的问一下,CIG型VFD是怎么驱动的?我有看到SPI口,手上有几块双叶电子的DM140GINK和FV825GIN,没有相关资料,不知道如何点亮

出0入0汤圆

发表于 2010-12-4 18:03:27 | 显示全部楼层
哈,VFD我前段时间也做了个,有空发上来交流交流

出0入0汤圆

发表于 2011-11-4 12:28:19 | 显示全部楼层
mark 16311

出0入0汤圆

发表于 2011-11-12 17:03:38 | 显示全部楼层
mark

出0入0汤圆

发表于 2014-1-7 16:15:29 | 显示全部楼层
MARK
学习了!

出0入0汤圆

发表于 2014-2-14 22:17:22 来自手机 | 显示全部楼层
学习学习,谢谢

出0入0汤圆

发表于 2014-2-17 10:01:11 | 显示全部楼层
学习学习,谢谢

出0入0汤圆

发表于 2015-10-21 18:05:21 | 显示全部楼层
谢谢分享 !
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 18:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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